Spaces:
Runtime error
Runtime error
import urllib.request | |
import fitz | |
import re | |
import numpy as np | |
import openai | |
import gradio as gr | |
import os | |
from sklearn.neighbors import NearestNeighbors | |
title = 'MediDiagnostix AI' | |
description = """MediDiagnostix AI allows you to upload medical reports for analysis. Just click a picture of your medical report or upload a pdf report, it will | |
extract, analyze and provide you the medical interpretations of the report, potential diagnoses, and recommended follow-up actions. Furthermore, you can save diagnosis for future reference""" | |
import pytesseract # Assuming Tesseract OCR is used for image processing | |
def analyze_reports(files, num_reports): | |
""" | |
Process and analyze the uploaded reports. | |
Args: | |
files (list): List of uploaded files (PDFs and images). | |
num_reports (int): Number of reports to analyze. | |
Returns: | |
str: Analysis results in a formatted text. | |
""" | |
# Check if the number of files matches num_reports | |
if len(files) != num_reports: | |
return "Number of uploaded files does not match the specified number of reports." | |
# Initialize a list to hold text from each report | |
report_texts = [] | |
for file in files: | |
# Check file type and process accordingly | |
if file.name.endswith('.pdf'): | |
# Process PDF file | |
pdf_text = pdf_to_text(file.name) | |
report_texts.extend(pdf_text) | |
else: | |
# Process Image file | |
image_text = image_to_text(file) | |
report_texts.append(image_text) | |
# Combine texts from all reports | |
combined_text = ' '.join(report_texts) | |
# Analyze the combined text (Placeholder for actual analysis logic) | |
analysis_results = analyze_text(combined_text) # This function needs to be implemented | |
return analysis_results | |
def image_to_text(image_file): | |
""" | |
Extract text from an image file using OCR. | |
Args: | |
image_file (file): An image file. | |
Returns: | |
str: Extracted text from the image. | |
""" | |
try: | |
# Read the image file | |
image = Image.open(image_file) | |
# Extract text using OCR | |
extracted_text = pytesseract.image_to_string(image) | |
return extracted_text | |
except Exception as e: | |
return f"Error in text extraction from image: {e}" | |
def analyze_text(text): | |
""" | |
Analyze the extracted text and generate insights. | |
Args: | |
text (str): Combined text from all reports. | |
Returns: | |
str: Analysis results based on the text. | |
""" | |
# Placeholder for text analysis logic | |
# This could involve calling an AI model, processing the text, etc. | |
# Returning a dummy response for demonstration purposes | |
return "Analysis results based on the processed text." | |
with gr.Blocks(css="""#chatbot { font-size: 14px; min-height: 1200; }""") as demo: | |
gr.Markdown(f'<center><h3>{title}</h3></center>') | |
gr.Markdown(description) | |
with gr.Row(): | |
with gr.Group(): | |
gr.Markdown(f'<p style="text-align:center">Enter the number of reports to analyze</p>') | |
num_reports = gr.Number(label='Number of Reports', value=1) | |
with gr.Accordion("Upload Reports"): | |
file_upload = gr.File(label='Upload Reports (PDF/Image)', file_types=['.pdf', '.jpg', '.png'], interactive=True, type="file", allow_multiple=True) | |
analyze_button = gr.Button(value='Analyze Reports') | |
with gr.Group(): | |
analysis_results = gr.Textbox(label='Analysis Results', placeholder="Results will appear here after analysis", lines=20) | |
analyze_button.click( | |
#func=analyze_reports, # This function needs to be defined to handle the report analysis. | |
inputs=[file_upload, num_reports], | |
outputs=[analysis_results], | |
) | |
demo.launch() | |