upills / app.py
muhammadsalmanalfaridzi's picture
Create app.py
4c4c1e1 verified
raw
history blame
2.6 kB
import os
import numpy as np
import cv2
import gradio as gr
import webbrowser
import threading
from typing import Dict, Any
from vision_agent.tools import (
load_image,
save_image,
overlay_bounding_boxes,
ocr
)
def analyze_pills(image_path: str) -> Dict[str, Any]:
# Load the image
image = load_image(image_path)
# Perform OCR to detect text
detections = ocr(image)
detected_texts = [d['label'] for d in detections]
# Initialize drug description
drug_description = "No description found."
if detected_texts:
drug_description = f"Click the button below to search for: {''.join(detected_texts)}"
# Prepare bounding boxes for visualization
boxes_for_overlay = [
{
'label': f"{d['label']}",
'score': d['score'],
'bbox': d['bbox'] # Already normalized coordinates
}
for d in detections
]
# Create and save annotated image
annotated_image = overlay_bounding_boxes(image, boxes_for_overlay)
save_image(annotated_image, "annotated_pills.jpg")
return detected_texts, annotated_image, drug_description
def open_split_window(url):
"""Opens the Drugs.com search in a new window."""
threading.Thread(target=lambda: webbrowser.open(url, new=1)).start()
def search_drug_online(imprint_text: list):
"""Opens a web search for the given pill imprint in a window."""
if imprint_text:
combined_query = ''.join(imprint_text)
search_url = f"https://www.drugs.com/search.php?searchterm={combined_query}"
open_split_window(search_url)
return f"Searching online for: {combined_query}"
return "No imprint text available."
# Gradio Interface
with gr.Blocks() as app:
gr.Markdown("## πŸ₯ **Pill Analysis Tool**")
gr.Markdown("Upload an image of a pill to detect imprint text.")
with gr.Row():
image_input = gr.Image(type="filepath", label="Upload Pill Image")
output_text = gr.Textbox(label="Detected Imprint Text")
output_description = gr.Textbox(label="Drug Identifiers")
image_output = gr.Image(label="Annotated Image with Text Detection")
analyze_button = gr.Button("Analyze Pill")
search_button = gr.Button("Search Drug Info - New Browser Tab will Open")
analyze_button.click(
fn=analyze_pills,
inputs=image_input,
outputs=[output_text, image_output, output_description]
)
search_button.click(
fn=search_drug_online,
inputs=[output_text],
outputs=output_description
)
app.launch()