# app.py import streamlit as st from PIL import Image import io import os import fitz # PyMuPDF from core import analyze_or_save # ⚠️ اینجا اصلاح شده: از core import می‌شود، نه ilia4 # ---------- تنظیمات فارسی و راست‌چین ---------- st.set_page_config( page_title="تحلیل‌گر جلد کتاب", layout="centered", initial_sidebar_state="auto" ) st.markdown(""" """, unsafe_allow_html=True) st.title("📚 تحلیل‌گر جلد کتاب‌های چندجلدی") threshold = st.sidebar.slider("آستانه تشابه (٪)", 50, 99, 90) / 100.0 st.sidebar.markdown("هرچه آستانه بالاتر باشد، تشابه سخت‌گیرانه‌تر است.") uploaded_files = st.file_uploader( "📤 PDFهای کتاب را انتخاب کنید (چندانتخابی فعال است)", type=["pdf"], accept_multiple_files=True ) if uploaded_files: st.markdown("### نام‌گذاری کتاب‌ها (اختیاری)") names = [] for idx, file in enumerate(uploaded_files): name = st.text_input(f"نام کتاب {idx+1} (اگر خالی بماند، نام فایل استفاده می‌شود)", key=f"name_{idx}") names.append(name.strip() if name.strip() else None) if st.button("🚀 تحلیل جلدها"): for idx, (uploaded_file, custom_name) in enumerate(zip(uploaded_files, names)): with st.spinner(f"در حال تحلیل {uploaded_file.name}..."): temp_path = f"temp_{idx}.pdf" with open(temp_path, "wb") as f: f.write(uploaded_file.getbuffer()) # تبدیل صفحه اول به تصویر doc = fitz.open(temp_path) page = doc.load_page(0) pix = page.get_pixmap() img_data = pix.tobytes("ppm") img = Image.open(io.BytesIO(img_data)).convert("RGB") doc.close() # تحلیل result = analyze_or_save(temp_path, img, custom_name) # نمایش نتیجه col1, col2 = st.columns([1, 2]) with col1: st.image(img, caption="جلد کتاب", use_column_width=True) with col2: if result["status"] == "new": st.success(f"✅ جلد جدید ذخیره شد.") st.info(f"📁 نام ذخیره‌شده: {result['saved_path']}") st.write(f"میزان تشابه با نزدیک‌ترین مورد: {result['similarity']:.2f}%") else: st.warning(f"⚠️ جلد تکراری شناسایی شد.") st.write(f"میزان تشابه: {result['similarity']:.2f}%") st.info(f"📁 نام فایل مشابه: {result['similar_path']}") similar_path = result["similar_path"] if os.path.exists(similar_path + ".png"): st.image(similar_path + ".png", caption="جلد مشابه", use_column_width=True) # حذف فایل موقت if os.path.exists(temp_path): os.remove(temp_path) st.markdown("---")