import streamlit as st import os import sys import pandas as pd sys.path.append(os.path.join(os.path.dirname(__file__), 'src')) try: from analyzer import MedicalKnowledgeBase db_path = os.path.join("data", "medical_db.json") kb = MedicalKnowledgeBase(db_path) except Exception as e: st.error(f"خطا در لود دیتابیس: {e}") st.stop() st.set_page_config( page_title="سیستم هوشمند تحلیل آزمایش خون", page_icon="🩺", layout="wide" ) st.markdown(""" """, unsafe_allow_html=True) st.markdown('

🩺 سیستم هوشمند تحلیل آزمایش خون

', unsafe_allow_html=True) st.markdown("---") st.markdown('

لطفاً تصویر آزمایش خون خود را انتخاب کنید:

', unsafe_allow_html=True) uploaded_file = st.file_uploader("انتخاب عکس (JPG, PNG)", type=["jpg", "jpeg", "png"]) if uploaded_file is not None: st.image(uploaded_file, caption="پیش‌نمایش عکس", use_column_width=True) if st.button("🚀 شروع تحلیل هوشمند", type="primary"): temp_dir = "data/uploads" os.makedirs(temp_dir, exist_ok=True) temp_path = os.path.join(temp_dir, uploaded_file.name) with open(temp_path, "wb") as f: f.write(uploaded_file.getbuffer()) status_placeholder = st.empty() try: # لود مدل‌ها status_placeholder.info("⏳ در حال بارگذاری سیستم OCR...") from ocr_reader import OCRReader from lab_extractor import LabDataExtractor from analyzer import BloodAnalyzer from ai_doctor import AIDoctor ocr = OCRReader() extractor = LabDataExtractor() analyzer = BloodAnalyzer(kb) ai_doctor = AIDoctor() # پردازش status_placeholder.info("👁️ در حال خواندن متن از عکس...") raw_text = ocr.extract_text(temp_path) status_placeholder.info("🔍 در حال استخراج اعداد...") extracted_data = extractor.extract_all(raw_text) if not extracted_data: st.error("❌ سیستم نتوانست اعداد را پیدا کند.") else: status_placeholder.info("🧠 در حال تحلیل با هوش مصنوعی...") # دریافت سن از متن patient_age = extractor.get_patient_age(raw_text) # تحلیل جدولی با ارسال سن report = analyzer.generate_full_report(extracted_data, gender="male", age=patient_age) # دکتر هوشمند با ارسال سن doctor_note = ai_doctor.generate_explanation(report, patient_gender="male", patient_age=patient_age) status_placeholder.empty() st.success("✅ تحلیل کامل شد!") tab1, tab2 = st.tabs(["📊 جدول نتایج", "👨‍⚕️ توضیحات دکتر هوشمند"]) with tab1: df = pd.DataFrame(report) def get_status(status): return "✅ نرمال" if status == "NORMAL" else "⚠️ غیرنرمال" df['وضعیت'] = df['status'].apply(get_status) df_view = df[['name_fa', 'value', 'unit', 'وضعیت', 'message']] df_view.columns = ['نام آزمایش', 'مقدار', 'واحد', 'وضعیت', 'تشخیص'] st.dataframe(df_view, use_container_width=True) with tab2: st.markdown(f"
{doctor_note}
", unsafe_allow_html=True) except Exception as e: status_placeholder.error(f"❌ خطا در فرایند تحلیل: {str(e)}") st.exception(e) else: st.warning("⚠️ لطفاً ابتدا یک عکس آپلود کنید.")