Spaces:
Runtime error
Runtime error
| # 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(""" | |
| <style> | |
| body, .css-1d391kg, .css-1v3fvcr, .css-1lcbmhc, .css-qbe2hs, .css-1kyxreq { | |
| direction: rtl; | |
| text-align: right; | |
| } | |
| </style> | |
| """, 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("---") |