| import gradio as gr |
| from segmentation import segment_image |
| import os |
| import requests |
| import base64 |
|
|
| |
| HUGGINGFACE_API_TOKEN = os.getenv("HUGGINGFACE_TOKEN") |
| API_URL = "https://api-inference.huggingface.co/models/google/medgemma-4b-it" |
| HEADERS = {"Authorization": f"Bearer {HUGGINGFACE_API_TOKEN}"} |
|
|
| def query_medgemma(image_path, question): |
| with open(image_path, "rb") as f: |
| image_bytes = f.read() |
| encoded_image = base64.b64encode(image_bytes).decode("utf-8") |
| encoded_image = f"data:image/png;base64,{encoded_image}" |
|
|
| payload = { |
| "inputs": [ |
| { |
| "role": "user", |
| "content": [ |
| {"type": "text", "text": question}, |
| {"type": "image", "image": encoded_image} |
| ] |
| } |
| ] |
| } |
|
|
| response = requests.post(API_URL, headers=HEADERS, json=payload) |
| if response.ok: |
| try: |
| return response.json()[0]["generated_text"][-1]["content"] |
| except Exception as e: |
| return f"Parse Error: {str(e)}\nFull Response: {response.json()}" |
| else: |
| return f"Error: {response.status_code} - {response.text}" |
|
|
| |
| default_image_path = "./image.png" |
|
|
| def segment_only(image_path): |
| _, segmented_image = segment_image(image_path) |
| return segmented_image |
|
|
| def analyze_with_medgemma(image, question): |
| return query_medgemma(image, question) |
|
|
| with gr.Blocks() as demo: |
| with gr.Row(): |
| with gr.Column(scale=1): |
| image_input = gr.Image(type="filepath", label="Upload Image") |
| segmented_output = gr.Image(type="numpy", label="Segmented Image") |
|
|
| image_input.change(fn=segment_only, inputs=image_input, outputs=segmented_output) |
|
|
| with gr.Column(scale=2): |
| chatbot = gr.Textbox(label="Ask MedGemma", placeholder="Enter your medical question...") |
| image_for_analysis = gr.Image(type="filepath", label="Upload image for analysis") |
| analyze_button = gr.Button("Analyze") |
| response_output = gr.Textbox(label="Response") |
|
|
| analyze_button.click(fn=analyze_with_medgemma, inputs=[image_for_analysis, chatbot], outputs=response_output) |
|
|
| demo.launch() |
|
|