File size: 3,775 Bytes
325f2c0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b3af97b
325f2c0
b3af97b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
325f2c0
 
 
 
b3af97b
325f2c0
 
b3af97b
 
325f2c0
b3af97b
 
325f2c0
b3af97b
 
 
 
 
 
 
 
 
325f2c0
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
109
110
111
112
113
import streamlit as st
import requests
import base64
from PIL import Image
from io import BytesIO

# Function to encode an image into base64 format
def encode_image(img):
    buffered = BytesIO()
    img.save(buffered, format="PNG")
    encoded_string = base64.b64encode(buffered.getvalue()).decode("utf-8")
    return encoded_string

# Function to get explanation from VLM API
def explain_image_with_vlm(image):
    api = "https://api.hyperbolic.xyz/v1/chat/completions"
    api_key = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZGlsYXppejIwMTNAZ21haWwuY29tIiwiaWF0IjoxNzMyODU1NDI1fQ.lRjbz9LMW9jj7Lf7I8m_dTRh4KQ1wDCdWiTRGErMuEk"

    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {api_key}",
    }

    base64_img = encode_image(image)

    payload = {
        "messages": [
            {
                "role": "user",
                "content": [
                    {"type": "text", "text": "Explain the Image in 10 words only"},
                    {
                        "type": "image_url",
                        "image_url": {"url": f"data:image/jpeg;base64,{base64_img}"},
                    },
                ],
            }
        ],
        "model": "Qwen/Qwen2-VL-72B-Instruct",
        "max_tokens": 2048,
        "temperature": 0.7,
        "top_p": 0.9,
    }

    response = requests.post(api, headers=headers, json=payload)
    if response.status_code == 200:
        return response.json().get("choices", [{}])[0].get("message", {}).get("content", "No explanation found.")
    else:
        return f"Error: {response.status_code} - {response.text}"

# Streamlit UI
st.set_page_config(page_title="๐Ÿ”ฎ AI Vision: Image Insights", layout="wide")

# Header section with futuristic visuals
st.markdown(
    """
    <style>
    .main-header {
        text-align: center;
        font-size: 2.5rem;
        color: #00FFFF;
        font-family: 'Courier New', monospace;
        text-shadow: 0px 0px 8px #00FFFF;
        margin-bottom: 20px;
    }
    .sub-header {
        text-align: center;
        font-size: 1.5rem;
        color: #FFD700;
        font-family: 'Courier New', monospace;
        margin-bottom: 40px;
    }
    </style>
    <div class="main-header">๐Ÿ”ฎ Welcome to AI Vision: The Future of Image Insights</div>
    <div class="sub-header">Where Images Come to Life with AI-Powered Explanations</div>
    """,
    unsafe_allow_html=True
)

# Sidebar for additional futuristic customization
st.sidebar.title("๐Ÿ”ง Settings")
image_format = st.sidebar.radio("Select Image Format:", ["PNG", "JPEG"], index=0)
explanation_length = st.sidebar.slider("Explanation Length (words):", min_value=5, max_value=20, value=10)

def styled_header(header_text):
    return f"<h3 style='color:#7FFF00;'>{header_text}</h3>"

# Main Camera Input Section
img_file_buffer = st.camera_input("๐Ÿš€ Capture Your Image Here")

if img_file_buffer:
    # Display captured image
    image = Image.open(img_file_buffer)
    st.markdown(styled_header("๐Ÿ“ธ Your Captured Image:"), unsafe_allow_html=True)
    st.image(image, caption="Captured Image", use_column_width=True)

    st.markdown(styled_header("๐Ÿค– Image Analysis:"), unsafe_allow_html=True)
    with st.spinner("๐Ÿ” The AI is analyzing your image. Please wait..."):
        explanation = explain_image_with_vlm(image)
        st.success("โœจ Analysis Complete!")
        st.write(f"**AI Insight:** {explanation}")

# Footer
st.markdown(
    """
    <footer style="text-align: center; margin-top: 50px;">
        <hr style="border: 1px solid #00FFFF;">
        <p style="font-family: 'Courier New', monospace; color: #AAAAAA;">Developed by: <b>DataScienceProF</b> | <i>Empowering the Future</i></p>
    </footer>
    """,
    unsafe_allow_html=True
)