Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import os | |
| from reportlab.lib.pagesizes import letter | |
| from reportlab.pdfgen import canvas | |
| # Logic to process the uploaded report and extract tumor details | |
| def process_report(file): | |
| # Replace this with actual logic to analyze the uploaded file | |
| # Example output | |
| tumor_details = { | |
| "has_tumor": True, | |
| "tumor_type": "Glioma", | |
| "size": "1.2 cm", | |
| "location": "Right occipital lobe", | |
| "confidence": 0.9, | |
| "analysis_details": { | |
| "anomalous_regions": 2, | |
| "edge_complexity": 151, | |
| "tumor_score": 1, | |
| "region_intensities": [ | |
| 220.39, | |
| 158.87, | |
| 210.12, | |
| 176.93, | |
| 134.04, | |
| 160.1, | |
| 176.74, | |
| 124.37, | |
| 171.66 | |
| ] | |
| } | |
| } | |
| return tumor_details | |
| def generate_pdf_report(tumor_details): | |
| # Path to save the tumor analysis PDF report | |
| pdf_path = "tumor_analysis_report.pdf" | |
| # Create a PDF canvas | |
| c = canvas.Canvas(pdf_path, pagesize=letter) | |
| width, height = letter | |
| # Title | |
| c.setFont("Helvetica-Bold", 16) | |
| c.drawCentredString(width / 2, height - 50, "MRI BRAIN REPORT") | |
| # Patient and scan details | |
| c.setFont("Helvetica", 12) | |
| c.drawString(50, height - 100, "Patient Name: ______________________") | |
| c.drawString(50, height - 120, "Scan Type: MRI Brain") | |
| c.drawString(50, height - 140, "Date: _____________________________") | |
| # Findings | |
| c.setFont("Helvetica-Bold", 12) | |
| c.drawString(50, height - 180, "FINDINGS:") | |
| c.setFont("Helvetica", 12) | |
| c.drawString(70, height - 200, f"- Tumor Presence: {tumor_details['has_tumor']}") | |
| c.drawString(70, height - 220, f"- Tumor Type: {tumor_details['tumor_type']}") | |
| c.drawString(70, height - 240, f"- Location: {tumor_details['location']}") | |
| c.drawString(70, height - 260, f"- Size: {tumor_details['size']}") | |
| c.drawString(70, height - 280, f"- Confidence: {tumor_details['confidence']}") | |
| # Radiological Description | |
| c.setFont("Helvetica-Bold", 12) | |
| c.drawString(50, height - 320, "Radiological Description:") | |
| c.setFont("Helvetica", 12) | |
| description = [] | |
| if tumor_details['has_tumor']: | |
| description.append("The tumor appears well-defined with irregular margins.") | |
| description.append(f"The lesion measures approximately {tumor_details['size']} and is located in the {tumor_details['location']}.") | |
| if tumor_details['analysis_details']['anomalous_regions'] > 0: | |
| description.append("There are areas of abnormal signal intensity, suggestive of hyperintense regions.") | |
| if tumor_details['analysis_details']['edge_complexity'] > 100: | |
| description.append("The lesion demonstrates heterogeneous signal patterns with irregular margins.") | |
| description.append("Region intensities indicate varying levels of hyperintensity, consistent with the observed tumor characteristics.") | |
| else: | |
| description.append("No evidence of tumor detected.") | |
| y_position = height - 340 | |
| for line in description: | |
| c.drawString(70, y_position, f"• {line}") | |
| y_position -= 20 | |
| # Impression | |
| c.setFont("Helvetica-Bold", 12) | |
| c.drawString(50, y_position - 20, "IMPRESSION:") | |
| c.setFont("Helvetica", 12) | |
| impression = "Features are suggestive of a low-grade glioma in the right occipital lobe. Follow-up MRI or biopsy is recommended." | |
| c.drawString(70, y_position - 40, impression) | |
| # Note | |
| c.setFont("Times-Italic", 10) | |
| c.drawString(50, y_position - 80, "NOTE:") | |
| c.drawString(70, y_position - 100, "This is an AI-assisted preliminary report. Final confirmation should be made by a licensed radiologist.") | |
| # Save the PDF | |
| c.save() | |
| return pdf_path | |
| def generate_prescription_form(): | |
| # Path to save the prescription form PDF | |
| pdf_path = "prescription_form.pdf" | |
| # Create a PDF canvas | |
| c = canvas.Canvas(pdf_path, pagesize=letter) | |
| width, height = letter | |
| # Prescription Form Title | |
| c.setFont("Helvetica-Bold", 16) | |
| c.drawCentredString(width / 2, height - 50, "PRESCRIPTION FORM") | |
| # Prescription Details | |
| c.setFont("Helvetica", 12) | |
| c.drawString(50, height - 100, "Patient Name: ______________________") | |
| c.drawString(50, height - 120, "Date: _____________________________") | |
| c.drawString(50, height - 140, "Prescribed By: _____________________") | |
| c.drawString(50, height - 180, "Medications:") | |
| c.drawString(70, height - 200, "1. ______________________________") | |
| c.drawString(70, height - 220, "2. ______________________________") | |
| c.drawString(70, height - 240, "3. ______________________________") | |
| c.drawString(50, height - 280, "Instructions:") | |
| c.drawString(70, height - 300, "• ______________________________") | |
| c.drawString(70, height - 320, "• ______________________________") | |
| c.drawString(50, height - 360, "Follow-up Appointment:") | |
| c.drawString(70, height - 380, "Date: _____________________________") | |
| # Save the PDF | |
| c.save() | |
| return pdf_path | |
| # Gradio interface | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# Tumor Report Scanner") | |
| gr.Markdown("Upload a scan report to extract detailed tumor analysis and generate separate PDF reports.") | |
| with gr.Row(): | |
| file_input = gr.File(label="Upload Scan Report") | |
| analysis_output = gr.JSON(label="Tumor Analysis Results") | |
| report_download = gr.File(label="Download Tumor Analysis Report") | |
| prescription_download = gr.File(label="Download Prescription Form") | |
| submit_btn = gr.Button("Analyze Report") | |
| def analyze_and_generate(file): | |
| tumor_details = process_report(file) | |
| analysis_pdf = generate_pdf_report(tumor_details) | |
| prescription_pdf = generate_prescription_form() | |
| return tumor_details, analysis_pdf, prescription_pdf | |
| submit_btn.click(analyze_and_generate, inputs=file_input, outputs=[analysis_output, report_download, prescription_download]) | |
| if __name__ == "__main__": | |
| demo.launch() |