File size: 3,469 Bytes
5a6aade
 
 
 
 
 
 
 
25835df
5a6aade
 
 
 
 
 
11666df
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9a5d9ef
4605fd9
5a6aade
39a7b7a
 
5a6aade
39a7b7a
 
 
4605fd9
 
87fabef
9d6fdf7
4605fd9
 
 
 
 
 
 
39a7b7a
4605fd9
 
3c0f272
4605fd9
caae7d4
9d6fdf7
 
 
 
4605fd9
9d6fdf7
39a7b7a
 
9d6fdf7
 
 
 
 
 
 
 
 
 
 
 
4605fd9
9d6fdf7
9a5d9ef
 
4605fd9
9a5d9ef
 
4605fd9
39a7b7a
 
 
9d6fdf7
39a7b7a
 
68cca71
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import streamlit as st
import torch
from transformers import AutoProcessor, PaliGemmaForConditionalGeneration
from PIL import Image

# Load the model and processor
model_id = "brucewayne0459/paligemma_derm"
processor = AutoProcessor.from_pretrained(model_id)
model = PaliGemmaForConditionalGeneration.from_pretrained(model_id)
model.eval()

# Set device
device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)

# Add Hugging Face logo at the top
st.markdown(
    """
    <style>
    .huggingface-logo {
        display: flex;
        justify-content: center;
        margin-bottom: 20px;
    }
    .huggingface-logo img {
        width: 150px;
    }
    </style>
    <div class="huggingface-logo">
        <img src="https://huggingface.co/front/assets/huggingface_logo-noborder.svg" alt="Hugging Face Logo">
    </div>
    """,
    unsafe_allow_html=True,
)

# Streamlit app title and instructions
st.title("VisionDerm")
st.write("Upload an image or use your camera to identify the skin condition.")

# Column layout for input and display
col1, col2 = st.columns([3, 2])

with col1:
    # File uploader for image
    uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"])
    # Camera input for photo capture
    camera_photo = st.camera_input("Take a photo")
    prompt = 'Identify the skin condition?'

# Choose input image (either uploaded or taken by camera)
input_image = None
if camera_photo:
    input_image = Image.open(camera_photo)
elif uploaded_file:
    input_image = Image.open(uploaded_file)

with col2:
    if input_image:
        # Display the image
        resized_image = input_image.resize((300, 300))
        st.image(resized_image, caption="Selected Image (300x300)", use_container_width=True)

        # Resize image for processing (512x512 pixels)
        max_size = (512, 512)
        processed_image = input_image.resize(max_size)

        # Predict automatically when the image is uploaded or captured
        with st.spinner("Processing..."):
            try:
                # Prepare inputs
                inputs = processor(
                    text=prompt,
                    images=processed_image,
                    return_tensors="pt",
                    padding="longest"
                ).to(device)

                # Generate output
                default_max_tokens = 50  # Set a default value for max tokens
                with torch.no_grad():
                    outputs = model.generate(**inputs, max_new_tokens=default_max_tokens)

                # Decode output and remove the prompt text
                decoded_output = processor.decode(outputs[0], skip_special_tokens=True)
                if prompt in decoded_output:
                    decoded_output = decoded_output.replace(prompt, "").strip()

                # Capitalize the first letter of each word
                decoded_output = decoded_output.title()

                # Display result
                st.success("Analysis Complete!")
                st.write("**Model Output:**", decoded_output)

            except Exception as e:
                st.error(f"Error: {str(e)}")

# Add team information at the bottom
st.markdown("---")  # Add a horizontal line for separation
st.info("""
### Team: Mahasigma Berprestasi
- **Muhammad Karov Ardava Barus** ; 103052300001
- **Akmal Yaasir Fauzaan** ; 103052300008
- **Farand Diy Dat Mahazalfaa** ; 103052300050
- **Hauzan Rafi Attallah**; 103052330011
""")