Venusaur / app.py
Alphar3d's picture
Update app.py
c570a53 verified
import google.generativeai as genai
from pathlib import Path
import gradio as gr
from dotenv import load_dotenv
import os
# Load environment variables from a .env file
load_dotenv()
# Configure the GenerativeAI API key using the loaded environment variable
genai.configure(api_key=os.getenv("AIzaSyDGsO9HM1KDZ0BdZ1RGWP8lC2XR4A_Oz5w"))
# Set up the model configuration for text generation
generation_config = {
"temperature": 0.4,
"top_p": 1,
"top_k": 32,
"max_output_tokens": 4096,
}
# Define safety settings for content generation
safety_settings = [
{"category": f"HARM_CATEGORY_{category}",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"}
for category in ["HARASSMENT", "HATE_SPEECH", "SEXUALLY_EXPLICIT", "DANGEROUS_CONTENT"]
]
# Initialize the GenerativeModel with the specified model name, configuration, and safety settings
model = genai.GenerativeModel(
model_name="gemini-pro-vision",
generation_config=generation_config,
safety_settings=safety_settings,
)
# Function to read image data from a file path
def read_image_data(file_path):
image_path = Path(file_path)
if not image_path.exists():
raise FileNotFoundError(f"Could not find image: {image_path}")
return {"mime_type": "image/jpeg", "data": image_path.read_bytes()}
# Function to generate a response based on a prompt and an image path
def generate_gemini_response(prompt, image_path):
image_data = read_image_data(image_path)
response = model.generate_content([prompt, image_data])
return response.text
# Initial input prompt for the plant pathologist
input_prompt = """
You are an expertised doctor. The user will upload an image of the injury. Analyse the image and provide a complete analysis to assess for insurance claim estimation.
Additionally, provide any relevant details such as:
1. Type and severity of the injury (e.g., broken bone, laceration, burn).
2. Location of the injury on the body.
3. Total cost that the user can claim from the insurance company.
Based on the provided image and information, the model will analyze the injury and estimate the amount that can be claimed from the insurance."
**Disclaimer:**
*"Please note that the information provided is based on the image analysis and should not replace professionals."*
"""
# Function to process uploaded files and generate a response
def process_uploaded_files(files):
file_path = files[0].name if files else None
response = generate_gemini_response(
input_prompt, file_path) if file_path else None
return file_path, response
# Gradio interface setup
with gr.Blocks() as demo:
file_output = gr.Textbox()
image_output = gr.Image()
combined_output = [image_output, file_output]
# Upload button for user to provide images
upload_button = gr.UploadButton(
"Click to Upload an Image",
file_types=["image"],
file_count="multiple",
)
# Set up the upload button to trigger the processing function
upload_button.upload(process_uploaded_files,
upload_button, combined_output)
# Launch the Gradio interface with debug mode enabled
demo.launch(debug=True)