File size: 3,486 Bytes
f15b4fe
 
 
887ecc1
599d893
 
887ecc1
 
 
599d893
887ecc1
 
 
 
 
599d893
 
887ecc1
 
 
599d893
887ecc1
599d893
887ecc1
 
 
 
 
599d893
887ecc1
 
 
 
599d893
887ecc1
 
599d893
 
 
 
 
887ecc1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
599d893
 
 
 
887ecc1
599d893
 
f15b4fe
887ecc1
599d893
f15b4fe
887ecc1
 
 
 
f15b4fe
887ecc1
 
f15b4fe
887ecc1
f15b4fe
 
 
887ecc1
 
 
 
 
 
 
 
 
 
 
 
f15b4fe
599d893
f15b4fe
 
887ecc1
f15b4fe
599d893
f15b4fe
 
599d893
 
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
from PIL import Image

# Custom CSS for enhanced styling
st.markdown("""
    <style>
        body {
            background-color: #f7f9fc;
            font-family: 'Arial', sans-serif;
        }
        .main {
            background-color: #ffffff;
            padding: 30px;
            border-radius: 15px;
            box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.1);
        }
        .title {
            color: #2c3e50;
            font-size: 40px;
            font-weight: 700;
            text-align: center;
            margin-bottom: 40px;
        }
        .upload-area {
            background-color: #e8f4f8;
            padding: 20px;
            border-radius: 10px;
            border: 2px dashed #1abc9c;
            text-align: center;
            margin-bottom: 20px;
        }
        .upload-area:hover {
            background-color: #d1ecf1;
        }
        .generate-button {
            background-color: #1abc9c;
            color: white;
            border-radius: 5px;
            padding: 10px;
            font-weight: bold;
            cursor: pointer;
            text-align: center;
            margin-top: 20px;
        }
        .generate-button:hover {
            background-color: #16a085;
        }
        .result-section {
            margin-top: 40px;
        }
        .result-title {
            color: #34495e;
            font-size: 24px;
            font-weight: 600;
            margin-bottom: 20px;
        }
        .success {
            background-color: #dff0d8;
            color: #3c763d;
            padding: 15px;
            border-radius: 5px;
        }
    </style>
""", unsafe_allow_html=True)

# Main UI container
st.markdown('<div class="main">', unsafe_allow_html=True)
st.markdown('<div class="title">Florence-2 Image Captioning Demo</div>', unsafe_allow_html=True)

# Task prompt input
task_prompt = st.text_input("Task Prompt", value="Describe the image in detail:")

# Image upload area
st.markdown('<div class="upload-area">', unsafe_allow_html=True)
uploaded_image = st.file_uploader("Upload your image here", type=["jpg", "jpeg", "png"])
st.markdown('</div>', unsafe_allow_html=True)

# Additional text input (optional)
text_input = st.text_area("Additional Text Input (Optional)", height=150)

# Display the uploaded image and process it if available
if uploaded_image is not None:
    image = Image.open(uploaded_image)
    st.image(image, caption="Uploaded Image", use_column_width=True)

    # Generate Caption button
    if st.button("Generate Caption", key="generate"):
        # Assuming `run_example` function is defined
        result = run_example(task_prompt, image, text_input)

        # Display the generated caption
        st.markdown('<div class="result-section">', unsafe_allow_html=True)
        st.markdown('<div class="result-title">Generated Caption</div>', unsafe_allow_html=True)
        st.markdown(f'<div class="success">{result["text"]}</div>', unsafe_allow_html=True)

        # Display bounding boxes or polygons if available
        if "bboxes" in result:
            st.markdown("### Detected Objects")
            fig = plot_bbox(image, result)
            st.pyplot(fig)

        if "polygons" in result:
            st.markdown("### Image with Polygons")
            processed_image = draw_polygons(image.copy(), result)
            st.image(processed_image, caption="Image with Polygons", use_column_width=True)

st.markdown('</div>', unsafe_allow_html=True)