edmbdk/crew
0
1import streamlit as st2import pandas as pd3from PIL import Image4import google.generativeai as genai5import io6import json7 8# Sayfa Ayarları (Mobil ve Performans Odaklı)9st.set_page_config(page_title="Hızlı Belge Okuyucu AI", layout="centered")10 11# Görsel yükleme motorunu HTML üzerinden tamamen özgür bırakıyoruz (403 hatasını engeller)12st.markdown(13 """14 <style>15 .stFileUploader { max-width: 100%; }16 section[data-testid="stSidebar"] { display: none; }17 </style>18 """, 19 unsafe_allow_html=True20)21 22st.title("📄 Akıllı Belge Okuyucu (AI)")23st.write("Fotoğraf çekin veya yükleyin. Boyut ne olursa olsun otomatik işlenecektir.")24 25# Şifre Tanımlaması26GOOGLE_API_KEY = "AQ.Ab8RN6KTwx-oAvwkJrfB0zHcZliFTXUDvVVZeOmLCO_pvmZpcA"27genai.configure(api_key=GOOGLE_API_KEY)28 29# Telefon kameraları için tür kısıtlamasını tamamen kaldırıyoruz30uploaded_file = st.file_uploader("Belge Fotoğrafı Yükle veya Çek...", type=None, accept_multiple_files=False)31 32if uploaded_file is not None:33 try:34 # 403 hatasını aşmak için dosyayı diske yazmadan direkt binary (bytes) olarak RAM'e alıyoruz35 file_bytes = uploaded_file.getvalue()36 image = Image.open(io.BytesIO(file_bytes))37 38 # Ekranda resmi güvenli modda gösteriyoruz39 st.image(image, caption="Yüklendi", use_container_width=True)40 41 if st.button("🚀 Belgeyi Çözümle ve Excel Yap"):42 with st.spinner("Yapay zeka tabloyu inceliyor..."):43 model = genai.GenerativeModel('gemini-2.5-flash')44 45 prompt = """46 Bu belgedeki tüm kişi listesini/tablosunu bul. 47 Her kişinin 'Soyisim (Surname)' ve 'İsim (Name)' bilgilerini ayıkla.48 Sonucu sadece ve sadece şu JSON formatında döndür, başka hiçbir açıklama yazma:49 [50 {"Soyisim": "YILMAZ", "İsim": "AHMET"},51 {"Soyisim": "DEMIR", "İsim": "MEHMET ENES"}52 ]53 """54 55 response = model.generate_content([prompt, image])56 57 cleaned_text = response.text.replace("```json", "").replace("```", "").strip()58 data = json.loads(cleaned_text)59 60 if data:61 df = pd.DataFrame(data)62 st.success(f"Başarılı! {len(df)} kişi bulundu.")63 st.dataframe(df, use_container_width=True)64 65 output = io.BytesIO()66 with pd.ExcelWriter(output, engine='xlsxwriter') as writer:67 df.to_excel(writer, index=False, sheet_name='İsim Listesi')68 processed_data = output.getvalue()69 70 st.download_button(71 label="📥 Excel Dosyasını Telefonuna İndir",72 data=processed_data,73 file_name="belgeden_gelen_isimler.xlsx",74 mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"75 )76 else:77 st.warning("Belgede isim listesi tespit edilemedi.")78 79 except Exception as e:80 st.error(f"Sistemsel bir sınır aşımı oldu. Lütfen fotoğrafı telefonunuzdan kırparak (sadece tablo kalacak şekilde) yüklemeyi deneyin.")81 