Spaces:
Running
Running
File size: 3,091 Bytes
8ffbf51 c73a6b4 6e2e0c5 c32572d 7c56b7b c73a6b4 c32572d c73a6b4 8ffbf51 79ec99d c32572d c73a6b4 a93e14b c73a6b4 a93e14b 8ffbf51 c73a6b4 a93e14b c73a6b4 7c56b7b c73a6b4 6e2e0c5 c73a6b4 a93e14b c32572d c73a6b4 c32572d 8ffbf51 c73a6b4 6e2e0c5 fc4d401 c73a6b4 6e2e0c5 fc4d401 c73a6b4 fc4d401 c73a6b4 |
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 |
import streamlit as st
import requests
import os
import base64
from PIL import Image
from io import BytesIO # Correctly import BytesIO from the io module
# Set page title
st.set_page_config(page_title="Image Caption Generator", layout="centered")
# API key from environment variable
API_KEY = os.environ.get("NEBIUS_API_KEY")
# UI for the app
st.title("Image Caption Generator")
st.write(
"Upload an image, and this app will generate a detailed caption for it using the Nebius AI API."
)
if not API_KEY:
st.error("API key not found. Please set the `NEBIUS_API_KEY` environment variable.")
# Function to call Nebius API
def generate_caption(image_base64, api_key):
api_url = "https://api.studio.nebius.ai/v1/chat/completions"
headers = {"Authorization": f"Bearer {api_key}"}
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": [
{"type": "text", "text": "Write a caption for this image"},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{image_base64}"}},
],
},
],
"temperature": 0,
}
response = requests.post(api_url, json=payload, headers=headers)
if response.status_code == 200:
return response.json()
else:
return {"error": response.text}
# File uploader for image
uploaded_image = st.file_uploader("Upload an image", type=["png", "jpg", "jpeg"])
if uploaded_image and API_KEY:
# Convert the image to base64
image = Image.open(uploaded_image)
buffered = BytesIO() # Use BytesIO from the io module
image.save(buffered, format="PNG")
image_base64 = base64.b64encode(buffered.getvalue()).decode()
# Show the uploaded image
st.image(image, caption="Uploaded Image", use_column_width=True)
# Add a button to trigger caption generation
if st.button("Generate Caption"):
st.write("Generating caption...")
result = generate_caption(image_base64, API_KEY)
# Display the result
if "error" in result:
st.error(f"Error: {result['error']}")
else:
caption = result.get("messages", [{}])[-1].get("content", [{}])[0].get("text", "No caption generated.")
st.subheader("Generated Caption")
st.write(caption)
else:
if not API_KEY:
st.warning("Please set the `NEBIUS_API_KEY` environment variable.")
else:
st.info("Please upload an image.")
st.sidebar.write("Built with ❤️ by OpenAI GPT-4") |