Spaces:
Running
Running
File size: 3,946 Bytes
8ffbf51 c73a6b4 6e2e0c5 03e23d5 7c56b7b 2e0de3d da44c3d c73a6b4 c32572d c73a6b4 3b73913 c73a6b4 a93e14b 120448f a93e14b 8ffbf51 120448f c73a6b4 a93e14b e17b907 c73a6b4 7c56b7b 99dbe33 6e2e0c5 c73a6b4 a93e14b c32572d c73a6b4 03e23d5 8ffbf51 c73a6b4 6e2e0c5 fc4d401 2e0de3d 6e2e0c5 fc4d401 9304e0e 60a9d6a fc4d401 d6030a5 fc4d401 99dbe33 d6030a5 ecfb0cd 60a9d6a 2e0de3d 99dbe33 c73a6b4 fc4d401 c73a6b4 8b45070 2e0de3d 8b45070 0510f64 2e0de3d |
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 |
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 and layout
st.set_page_config(page_title="Image Caption Generator", layout="wide")
# API key from environment variable
API_KEY = os.environ.get("NEBIUS_API_KEY")
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-7B-Instruct",
"messages": [
{
"role": "system",
"content": """You are an image to text prompt converter for AI image generation""",
},
{
"role": "user",
"content": [
{"type": "text", "text": "Describe This Image In Detail under 100 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]."},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{image_base64}"}},
],
},
],
"temperature": 0.6,
}
try:
response = requests.post(api_url, json=payload, headers=headers)
if response.status_code == 200:
return response.json()
else:
st.error(f"API Error: {response.status_code}, {response.text}")
return {"error": response.text}
except Exception as e:
st.error(f"An exception occurred: {e}")
return {"error": str(e)}
# 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_container_width=True)
# Add a button to trigger caption generation
if st.button("Generate Prompt", use_container_width=True):
st.write("Generating Prompt...")
result = generate_caption(image_base64, API_KEY)
# Extract and display the generated caption
if "error" in result:
st.error(f"Error: {result['error']}")
else:
try:
# Extract the caption from the response
caption = (
result.get("choices", [{}])[0]
.get("message", {})
.get("content", "No caption generated.")
)
st.text_area("Prompt Generated", caption, height=200, key="caption_output")
except Exception as e:
st.error(f"Error processing the response: {e}")
else:
if not API_KEY:
st.warning("Please set the `NEBIUS_API_KEY` environment variable.")
else:
st.info("Please upload an image.")
# Remove the sidebar and center the content
st.markdown(
"""
<style>
.css-1d391kg {text-align: center;}
.css-1v3fvcr {justify-content: center; display: flex;}
.css-1y4ccs5 {margin: 0 auto;}
.css-1aumxhk {display: flex; justify-content: center;}
.css-1k6kn8p {justify-content: center; align-items: center; display: flex;}
.css-ffhzg6 {text-align: center;}
textarea {
color: white !important;
background-color: #262626 !important;
}
</style>
""", unsafe_allow_html=True
)
|