Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from PIL import Image | |
| import google.generativeai as genai | |
| import io | |
| import os | |
| import base64 | |
| # Configure Google Gemini API (replace with your actual API key) | |
| GOOGLE_API_KEY = os.environ.get("GOOGLE_API_KEY") | |
| if not GOOGLE_API_KEY: | |
| st.error("Please set the GOOGLE_API_KEY environment variable.") | |
| st.stop() | |
| genai.configure(api_key=GOOGLE_API_KEY) | |
| # Function to generate the modified image | |
| def generate_modified_image(uploaded_image, background_description): | |
| try: | |
| model = genai.GenerativeModel('gemini-1.5-flash') | |
| img = Image.open(uploaded_image) | |
| prompt_parts = [ | |
| "You are an AI that can modify the background of an image based on a text description.", | |
| "Here is the image:", | |
| img, # Pass the PIL Image object directly | |
| f"Modify the background of this image to: '{background_description}'. Be creative and make the new background look realistic and integrated with the foreground.", | |
| "Output only the modified image. Ensure the output is a valid image format (like PNG or JPEG) encoded as bytes." | |
| ] | |
| response = model.generate_content(prompt_parts, stream=False) | |
| response.resolve() | |
| if response and hasattr(response, 'parts') and len(response.parts) > 0: | |
| for part in response.parts: | |
| try: | |
| # Try to get the image data directly if it's a blob | |
| if hasattr(part, 'blob'): | |
| image_bytes = part.blob.data | |
| return Image.open(io.BytesIO(image_bytes)) | |
| elif hasattr(part, 'text'): | |
| st.warning(f"Received text response instead of image: {part.text}") | |
| else: | |
| st.warning(f"Unexpected part type in response: {part}") | |
| except Exception as part_err: | |
| st.error(f"Error processing response part: {part_err}") | |
| st.error("No valid image data found in the response.") | |
| return None | |
| else: | |
| st.error("Failed to get a valid response from the model.") | |
| return None | |
| except Exception as e: | |
| st.error(f"An error occurred during generation: {e}") | |
| return None | |
| # Streamlit web app | |
| st.title("Image Background Modifier") | |
| uploaded_file = st.file_uploader("Upload an image...", type=["png", "jpg", "jpeg"]) | |
| background_text = st.text_area("Describe the desired background:", "") | |
| if uploaded_file is not None and background_text: | |
| if st.button("Modify Background"): | |
| with st.spinner("Generating modified image..."): | |
| modified_image = generate_modified_image(uploaded_file, background_text) | |
| if modified_image: | |
| st.image(modified_image, caption="Modified Image", use_column_width=True) | |
| else: | |
| st.info("Please upload an image and describe the desired background.") |