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( """