BookCover / app.py
F-allahmoradi's picture
Upload app.py
ea175a7 verified
# 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("---")