File size: 3,498 Bytes
ea175a7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# 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("---")