|
|
|
|
|
import gradio as gr |
|
import pandas as pd |
|
import easyocr |
|
from paddleocr import PaddleOCR |
|
from file_processing import read_file |
|
from entity_recognition import process_text |
|
from utils import safe_dataframe |
|
|
|
|
|
|
|
reader = PaddleOCR(use_angle_cls=True, lang="en") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown("# π₯ Medical Lab Test Report Extracter") |
|
|
|
with gr.Row(): |
|
file_input = gr.File(label="π Upload Report") |
|
submit_btn = gr.Button("Extract",visible=False) |
|
|
|
welcome_msg=gr.Markdown("# Please Upload any lab report file π and the processing will start automatically ") |
|
|
|
def invisible(): |
|
return gr.update(visible=False) |
|
file_input.upload(invisible,outputs=welcome_msg,api_name=False) |
|
|
|
|
|
|
|
|
|
@gr.render(inputs=file_input,triggers=[file_input.upload]) |
|
def extract(file): |
|
"""Processes the uploaded file and extracts medical data.""" |
|
|
|
|
|
|
|
text = read_file(file.name, reader) |
|
print("Performing NER...") |
|
output = process_text(text) |
|
|
|
|
|
metadata = output["metadata"] |
|
|
|
|
|
metadata_str = f"**Patient Name:** {metadata['patient_name']}\n\n" \ |
|
f"**Age:** {metadata['age']} \n\n" \ |
|
f"**Gender:** {metadata['gender']}\n\n" \ |
|
f"**Lab Name:** {metadata['lab_name']}\n\n" \ |
|
f"**Report Date:** {metadata['report_date']}" |
|
|
|
print(f"Processed report for {metadata['patient_name']}") |
|
metadata_md = gr.Markdown(metadata_str) |
|
|
|
|
|
for test in output["report"]: |
|
test_type = test["test_type"] |
|
lab_tests = safe_dataframe(test,"lab_tests") |
|
|
|
gr.Markdown(f"### π Test : {test_type}") |
|
gr.Dataframe(lab_tests) |
|
|
|
gr.JSON(output,label="π Extracted Report") |
|
return output |
|
output_JSON=gr.JSON(visible=False) |
|
submit_btn.click(extract,inputs=file_input,outputs=output_JSON,api_name="extract_report") |
|
|
|
demo.launch(debug=True, share=True) |