Spaces:
				
			
			
	
			
			
		Sleeping
		
	
	
	
			
			
	
	
	
	
		
		
		Sleeping
		
	File size: 2,664 Bytes
			
			| add57fc | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | import gradio as gr
from transformers import pipeline
from PIL import Image
import pytesseract
from PyPDF2 import PdfReader
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
import os
# Load the medical analysis model (e.g., BioGPT or PubMedBERT)
medical_analyzer = pipeline("text-classification", model="microsoft/biogpt")
# Function to extract text from images or PDFs
def extract_text(file_path):
    if file_path.endswith(".pdf"):
        # Extract text from PDF
        reader = PdfReader(file_path)
        text = ""
        for page in reader.pages:
            text += page.extract_text()
        return text.strip()
    else:
        # Extract text from image
        return pytesseract.image_to_string(Image.open(file_path))
# Function to generate a PDF report
def create_pdf_report(analysis, output_path):
    c = canvas.Canvas(output_path, pagesize=letter)
    c.drawString(100, 750, "Blood Test Report Analysis")
    c.drawString(100, 730, "---------------------------")
    
    y_position = 700
    for line in analysis.split("\n"):
        c.drawString(100, y_position, line)
        y_position -= 20  # Move down for the next line
    
    c.save()
    return output_path
# Function to analyze blood test reports
def analyze_blood_test(file):
    # Step 1: Extract text
    extracted_text = extract_text(file)
    if not extracted_text:
        return "Could not extract text. Please upload a valid file.", None
    # Step 2: Use medical model to analyze extracted text
    analysis_results = medical_analyzer(extracted_text)
    analysis_report = "π Analysis Results:\n"
    for item in analysis_results[:5]:  # Limit results for simplicity
        analysis_report += f"- {item['label']}: {item['score']:.2f}\n"
    # Step 3: Generate downloadable PDF report
    output_pdf = "analysis_report.pdf"
    create_pdf_report(f"Extracted Text:\n{extracted_text}\n\n{analysis_report}", output_pdf)
    
    return analysis_report, output_pdf
# Gradio interface setup
interface = gr.Interface(
    fn=analyze_blood_test,
    inputs=gr.File(label="Upload your blood test report (PNG, JPG, JPEG, or PDF)"),
    outputs=[
        gr.Textbox(label="Analysis Results"),
        gr.File(label="Download PDF Report")
    ],
    title="MedAI Analyzer",
    description=(
        "Upload your blood test report in image (PNG, JPG, JPEG) or PDF format. "
        "The app will extract and analyze the values, flag abnormalities, and provide health recommendations. "
        "You can also download a detailed PDF report of the analysis."
    ),
    allow_flagging="never"
)
if __name__ == "__main__":
    interface.launch()
 |