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)