Spaces:
Sleeping
Sleeping
import gradio as gr | |
from openai import OpenAI | |
import base64 | |
from io import BytesIO | |
from PIL import Image # Import PIL for image conversion | |
def analyze_plant_image(image, api_key): | |
try: | |
client = OpenAI( | |
base_url="https://openrouter.ai/api/v1", | |
api_key=api_key, | |
) | |
# Convert NumPy array to PIL Image and ensure RGB mode for JPEG compatibility | |
image = Image.fromarray(image).convert("RGB") | |
# Save the image to a BytesIO buffer as JPEG | |
buffered = BytesIO() | |
image.save(buffered, format="JPEG") | |
# Encode the image to base64 | |
encoded_image = base64.b64encode(buffered.getvalue()).decode('utf-8') | |
# Create the data URL for the image | |
image_url = f"data:image/jpeg;base64,{encoded_image}" | |
# Call the InternVL3 14B model with the image and prompt | |
completion = client.chat.completions.create( | |
model="opengvlab/internvl3-14b:free", | |
messages=[ | |
{ | |
"role": "user", | |
"content": [ | |
{ | |
"type": "text", | |
"text": "Identify this plant, provide care instructions, and diagnose any health issues visible in the image." | |
}, | |
{ | |
"type": "image_url", | |
"image_url": { | |
"url": image_url | |
} | |
} | |
] | |
} | |
] | |
) | |
# Return the model's response | |
return completion.choices[0].message.content | |
except Exception as e: | |
# Return error message if something goes wrong | |
return f"An error occurred: {str(e)}" | |
# Create the Gradio interface | |
interface = gr.Interface( | |
fn=analyze_plant_image, | |
inputs=[ | |
gr.Image(label="Upload Plant Image"), # Expects a NumPy array | |
gr.Textbox(type="password", label="OpenRouter API Key") # Secure input for API key | |
], | |
outputs=gr.Textbox(label="Analysis Result"), # Displays the result or error | |
title="PlantPal: Your AI-Powered Plant Care Assistant", | |
description=""" | |
Upload an image of your plant and enter your OpenRouter API key to get started. | |
If you don't have an API key, you can get one from [OpenRouter](https://openrouter.ai/). | |
""" | |
) | |
# Launch the app | |
interface.launch() |