Spaces:
Running
Running
File size: 3,110 Bytes
7c56b7b a93e14b 7c56b7b 788e1b9 7c56b7b 788e1b9 a93e14b 7c56b7b 788e1b9 a93e14b 788e1b9 a93e14b 79ec99d a93e14b 79ec99d 7c56b7b a93e14b 0760a62 a93e14b 788e1b9 a93e14b 788e1b9 a93e14b 788e1b9 a93e14b 7c56b7b 788e1b9 a93e14b 47ad849 a93e14b 7c56b7b 788e1b9 a93e14b 788e1b9 a93e14b 3dc8d07 a93e14b 788e1b9 a93e14b 3dc8d07 788e1b9 fb260dd 788e1b9 a93e14b 788e1b9 7c56b7b a93e14b |
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 |
import streamlit as st
import base64
import os
import requests
# Function to convert uploaded image to base64
def convert_image_to_base64(image):
image_bytes = image.read()
encoded_image = base64.b64encode(image_bytes).decode("utf-8")
return encoded_image
# Function to generate caption using Nebius API
def generate_caption(encoded_image):
API_URL = "https://api.studio.nebius.ai/v1/chat/completions"
API_KEY = os.environ.get("NEBIUS_API_KEY")
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": "Qwen/Qwen2-VL-72B-Instruct",
"messages": [
{
"role": "system",
"content": """You are an image to prompt converter. Your work is to observe each and every detail of the image and craft a detailed prompt under 75 words in this format: [image content/subject, description of action, state, and mood], [art form, style], [artist/photographer reference if needed], [additional settings such as camera and lens settings, lighting, colors, effects, texture, background, rendering]."""
},
{
"role": "user",
"content": "Write a caption for this image"
},
{
"role": "user",
"content": f"data:image/png;base64,{encoded_image}" # This is where the image is passed as base64 directly
}
],
"temperature": 0
}
# Send request to Nebius API
response = requests.post(API_URL, headers=headers, json=payload)
if response.status_code == 200:
result = response.json()
caption = result.get("choices", [{}])[0].get("message", {}).get("content", "No caption generated.")
return caption
else:
st.error(f"API Error {response.status_code}: {response.text}")
return None
# Streamlit app layout
def main():
st.set_page_config(page_title="Image Caption Generator", layout="centered", initial_sidebar_state="collapsed")
st.title("🖼️ Image to Caption Generator")
uploaded_file = st.file_uploader("Upload an image", type=["jpg", "jpeg", "png"])
if uploaded_file:
# Display the uploaded image
st.image(uploaded_file, caption="Uploaded Image", use_container_width=True)
if st.button("Generate Caption"):
# Convert the uploaded image to base64
with st.spinner("Generating caption..."):
encoded_image = convert_image_to_base64(uploaded_file)
# Debugging: Ensure the encoded image is valid and not too large
st.write(f"Encoded image length: {len(encoded_image)} characters")
# Get the generated caption from the API
caption = generate_caption(encoded_image)
if caption:
st.subheader("Generated Caption:")
st.text_area("", caption, height=100, key="caption_area")
st.success("Caption generated successfully!")
if __name__ == "__main__":
main()
|