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 @st.cache_resource 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.")