import streamlit as st import warnings warnings.filterwarnings('ignore') 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, prompt): 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": prompt}, # Use the user-provided prompt { "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( """
🔮 ImageX
Image Data Uncovered
""", 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"

{header_text}

" # Main Camera Input Section img_file_buffer = st.camera_input("🚀 Capture Your Image Here") # Text prompt input user_prompt = st.text_input( "📝 Enter your prompt (e.g., 'Explain the image', 'What are the functions in this graph?', 'Describe the scene'):", value="Enter your Prompt:" ) if img_file_buffer and user_prompt: # 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") 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, user_prompt) st.success("✨ Analysis Complete!") st.write(f"**AI Insight:** {explanation}") # Footer st.markdown( """ """, unsafe_allow_html=True )