Spaces:
Sleeping
Sleeping
import streamlit as st | |
from transformers import pipeline | |
from PIL import Image | |
import pytesseract | |
import PyPDF2 | |
import pdfplumber | |
import torch | |
# Load the BART model for summarization and NLI | |
def load_model(): | |
return pipeline("zero-shot-classification", model="facebook/bart-large-mnli", device=0 if torch.cuda.is_available() else -1) | |
classifier = load_model() | |
# OCR for Image using Tesseract | |
def extract_text_from_image(image): | |
return pytesseract.image_to_string(image) | |
# Extract text from PDF using pdfplumber | |
def extract_text_from_pdf(pdf_file): | |
text = "" | |
with pdfplumber.open(pdf_file) as pdf: | |
for page in pdf.pages: | |
text += page.extract_text() | |
return text | |
# Summarize, interpret and give actionable insights | |
def analyze_report(text): | |
# Provide a summary | |
summary = classifier(text, candidate_labels=["summary"], multi_label=False)['labels'][0] | |
# Interpretation of results | |
interpretation = classifier(text, candidate_labels=["interpretation", "normal", "abnormal"], multi_label=True) | |
# Recommendations | |
recommendations = classifier(text, candidate_labels=["follow-up", "Holistic/OTC treatment", "dietary change", "medication"], multi_label=True) | |
return { | |
"summary": summary, | |
"interpretation": interpretation['labels'], | |
"recommendations": recommendations['labels'] | |
} | |
# Streamlit UI | |
st.title("Medical Lab Report Analyzer") | |
st.write("Upload your medical lab report (PDF/Image) for insights.") | |
uploaded_file = st.file_uploader("Choose a PDF/Image file", type=["pdf", "png", "jpg", "jpeg"]) | |
if uploaded_file: | |
file_type = uploaded_file.type | |
# Extract text based on file type | |
if file_type == "application/pdf": | |
with st.spinner("Extracting text from PDF..."): | |
extracted_text = extract_text_from_pdf(uploaded_file) | |
else: | |
with st.spinner("Extracting text from Image..."): | |
image = Image.open(uploaded_file) | |
extracted_text = extract_text_from_image(image) | |
# Analyze the extracted text | |
if extracted_text: | |
with st.spinner("Analyzing report..."): | |
result = analyze_report(extracted_text) | |
# Display the results | |
st.subheader("Summary") | |
st.write(result['summary']) | |
st.subheader("Interpretation of Results") | |
for label in result['interpretation']: | |
st.write(f"- {label.capitalize()}") | |
st.subheader("Actionable Recommendations") | |
for rec in result['recommendations']: | |
st.write(f"- {rec.capitalize()}") | |
else: | |
st.error("No text could be extracted. Please try with a different file.") | |