TCETMILI/PassportExtractor
🛂 Global Passport Extractor V2.6
Pasaport görsellerinden otomatik veri çıkarma ve yüz eşleştirme sistemi
   
📋 İçindekiler
- Genel Bakış
- V2 Yenilikleri
- Özellikler
- Sistem Gereksinimleri
- Kurulum
- Kullanım
- Klasör Yapısı
- API Referansı
- Konfigürasyon
- Excel Çıktı Şeması
- Önbellek Sistemi
- Web Deployment (Hugging Face)
- Sorun Giderme
- Katkıda Bulunma
🎯 Genel Bakış
Global Passport Extractor, PDF, PNG veya JPG formatındaki pasaport görsellerinden yapılandırılmış verileri otomatik olarak çıkaran ve yüklenen fotoğrafları pasaport sahipleriyle eşleştiren kapsamlı bir sistemdir.
Temel İş Akışı
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Belge Yükleme │ ──▶ │ Sınıflandırma │ ──▶ │ Veri Çıkarma │
│ (PDF/PNG/JPG) │ │ (PASSPORT/PHOTO)│ │ (LLM + Regula) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Excel Export │ ◀── │ TCFOTO Kayıt │ ◀── │ Yüz Eşleştirme │
│ (Türkçe UTF-8) │ │ (TC No ile) │ │ (128D Embedding)│
└─────────────────┘ └──────────────────┘ └─────────────────┘🆕 V2 Yenilikleri
V2.6 (2025-01) - Yayına Hazır Sürüm 🚀
- ✅ Native Dosya Seçici: Masaüstü kullanımında işletim sisteminin kendi dosya seçicisi (Tkinter) entegre edildi.
- ✅ Web Modu: Mobil ve Tablet erişimi için
DEPLOYMENT_MODE="WEB"desteği eklendi. - ✅ Akıllı PDF Kurtarma: Bozuk veya hatalı uzantılı PDF'ler otomatik olarak görsel olarak kurtarılır.
- ✅ Geniş Açı Biyometrik (200x200): Omuz ve başörtüsünü içeren 200x200 piksel hassas kırpma.
- ✅ Çift Kayıt (Dual Save): Çıktılar hem ana çıktı klasörüne hem de kaynak klasörün içine (yedekli) kaydedilir.
- ✅ Regula SSL Fix: Kurumsal ağlarda SSL sertifika hataları için çözüm eklendi.
V1 → V2 Karşılaştırması
backend/services/
├── classifier.py # Belge sınıflandırma (YENİ)
├── face_encoder.py # 128D yüz kodlama (YENİ)
├── face_matcher.py # Yüz eşleştirme (YENİ)
├── photo_processor.py # Fotoğraf işleme (YENİ)
├── cache_manager.py # Önbellek yönetimi (YENİ)
└── ...✨ Özellikler
🧠 Akıllı Veri Çıkarma
- OpenAI GPT-4o entegrasyonu ile yüksek doğrulukta OCR
- Regula SDK ile profesyonel belge işleme
- MRZ (Machine Readable Zone) otomatik parse etme
- Çoklu pasaport desteği (tek görselde birden fazla pasaport)
👤 Yüz Eşleştirme Sistemi
- face_recognition kütüphanesi ile 128 boyutlu yüz kodlama
- Pasaport fotoğrafı ↔ Yüklenen fotoğraf otomatik eşleştirme
- Benzerlik skoru hesaplama (%60+ eşleşme)
- TCFOTO klasörüne TC kimlik numarası ile kayıt
📊 Belge Sınıflandırma
- Hybrid yaklaşım: Heuristic analiz + LLM fallback
- Otomatik belge tipi tespiti:
PASSPORT- Pasaport sayfasıPHOTO- Vesikalık/portre fotoğrafıUNKNOWN- Belirsiz (yüz varsa eşleştirmeye dahil)UNREADABLE- Okunamayan belge
📁 Dosya Format Desteği
- PDF - Çok sayfalı PDF'ler otomatik ayrıştırılır
- PNG - Yüksek kaliteli görsel desteği
- JPG/JPEG - Standart fotoğraf formatı
- WebP, BMP, TIFF - Ek format desteği
💾 Önbellek Sistemi
- İşlenmiş pasaportlar JSON olarak saklanır
- Yüz kodlamaları PKL formatında önbelleklenir
- Tekrar işleme gerektirmez, hızlı sonuç
📈 Excel Çıktı
- Türkçe karakter desteği (UTF-8)
- Özelleştirilebilir Excel şablonu
- Otomatik kolon eşleştirme
💻 Sistem Gereksinimleri
Minimum Gereksinimler
- İşletim Sistemi: macOS 10.15+, Ubuntu 20.04+, Windows 10+
- Python: 3.9 veya üzeri
- RAM: 8 GB (16 GB önerilir)
- Disk: 2 GB boş alan
Python Bağımlılıkları
# Temel
fastapi>=0.100.0
uvicorn>=0.23.0
streamlit>=1.28.0
python-dotenv>=1.0.0
# Görsel İşleme
pillow>=10.0.0
opencv-python>=4.8.0
numpy>=1.24.0
# PDF İşleme
pdf2image>=1.16.0
PyMuPDF>=1.23.0
# Yüz Tanıma
face_recognition>=1.3.0
dlib>=19.24.0
# AI/LLM
openai>=1.0.0
# Excel
openpyxl>=3.1.0
# HTTP
httpx>=0.25.0
python-multipart>=0.0.6Sistem Bağımlılıkları
macOS:
brew install cmake
brew install popplerUbuntu/Debian:
sudo apt-get update
sudo apt-get install -y cmake libopenblas-dev liblapack-dev
sudo apt-get install -y poppler-utilsWindows:
🚀 Kurulum
1. Projeyi İndirin
# ZIP dosyasını çıkartın veya
unzip V2_FINAL_STABLE.zip
cd V22. Sanal Ortam Oluşturun (Önerilir)
python3 -m venv venv
source venv/bin/activate # macOS/Linux
# veya
.\venv\Scripts\activate # Windows3. Bağımlılıkları Yükleyin
pip install --upgrade pip
pip install -r requirements.txt4. Ortam Değişkenlerini Ayarlayın
# .env dosyası oluşturun
echo "OPENAI_API_KEY=sk-your-api-key-here" > .env
# Opsiyonel ayarlar
echo "LLM_MODEL=gpt-4o" >> .env
echo "MAX_WORKERS=10" >> .env5. Uygulamayı Başlatın
Tek Komutla (Önerilir):
python3 run_panel.pyveya Manuel:
# Terminal 1 - Backend
uvicorn backend.main:app --reload --port 8000
# Terminal 2 - Frontend
streamlit run frontend/app.py --server.port 85016. Tarayıcıda Açın
http://localhost:8501📖 Kullanım
Web Arayüzü
- Belge Yükleme
- Sol panelden dosyalarınızı sürükleyip bırakın
- PDF, PNG, JPG formatları desteklenir
- Birden fazla dosya aynı anda yüklenebilir
- İşleme
- "İşle" butonuna tıklayın
- İşlem durumu progress bar ile gösterilir
- Loglar gerçek zamanlı güncellenir
- Sonuçları İnceleme
- Ortada: Çıkarılan pasaport verileri tablosu
- Sağda: Yüz eşleştirme sonuçları (kartlar halinde)
- Dışa Aktarma
- "Excel İndir" butonu ile sonuçları indirin
- TCFOTO klasöründen eşleşen fotoğrafları alın
Komut Satırı Kullanımı
from backend.main_pipeline import process_uploaded_files
# Dosyaları yükle
with open("passport.pdf", "rb") as f:
file_bytes = f.read()
# İşle
records, matches = process_uploaded_files(
file_datas=[(file_bytes, "passport.pdf")],
model="gpt-4o",
use_cache=True
)
# Sonuçları yazdır
for record in records:
print(f"{record.given_names} {record.surname} - TC: {record.tc_kimlik_no}")API Kullanımı
# Dosya yükleme
curl -X POST "http://localhost:8000/extract" \
-H "Content-Type: multipart/form-data" \
-F "files=@passport.pdf"
# Sağlık kontrolü
curl "http://localhost:8000/health"📂 Klasör Yapısı
V2/
├── 📄 run_panel.py # Ana başlatıcı script
├── 📄 requirements.txt # Python bağımlılıkları
├── 📄 .env # Ortam değişkenleri (oluşturulacak)
├── 📄 README.md # Bu dosya
│
├── 📁 backend/ # Backend servisleri
│ ├── 📄 __init__.py
│ ├── 📄 main.py # FastAPI uygulaması
│ ├── 📄 main_pipeline.py # Ana işleme pipeline'ı
│ ├── 📄 config.py # Konfigürasyon ayarları
│ ├── 📄 models.py # Veri modelleri
│ │
│ └── 📁 services/ # Servis modülleri
│ ├── 📄 classifier.py # Belge sınıflandırma
│ ├── 📄 extractor.py # Pasaport veri çıkarma
│ ├── 📄 face_encoder.py # Yüz kodlama (128D)
│ ├── 📄 face_matcher.py # Yüz eşleştirme
│ ├── 📄 photo_processor.py# Fotoğraf işleme
│ ├── 📄 excel_exporter.py # Excel dışa aktarma
│ ├── 📄 pdf_utils.py # PDF işleme
│ ├── 📄 cache_manager.py # Önbellek yönetimi
│ ├── 📄 naming.py # İsimlendirme yardımcıları
│ └── 📄 scanner.py # Regula SDK entegrasyonu
│
├── 📁 frontend/ # Frontend uygulaması
│ └── 📄 app.py # Streamlit arayüzü
│
├── 📁 templates/ # Şablonlar
│ └── 📄 EXCEL_TASLAK.xlsx # Excel çıktı şablonu
│
├── 📁 workspace/ # Çalışma klasörleri (otomatik oluşur)
│ ├── 📁 BELGELER/ # Yüklenen belgeler
│ ├── 📁 PASAPORTLAR/ # Kırpılmış pasaport görselleri
│ ├── 📁 FOTO/ # Çıkarılan vesikalık fotoğraflar
│ ├── 📁 TCFOTO/ # TC No ile adlandırılmış fotoğraflar
│ ├── 📁 OKUNAMADI/ # İşlenemeyen belgeler
│ └── 📁 EXCEL/ # Excel çıktıları
│
├── 📁 output/ # Çıktı klasörü
│ └── 📁 cache/ # Önbellek
│ ├── 📁 passports/ # Pasaport JSON önbelleği
│ └── 📁 face_encodings/ # Yüz kodlama önbelleği
│
└── 📁 docker/ # Docker dosyaları
├── 📄 Dockerfile.backend
├── 📄 Dockerfile.frontend
└── 📄 docker-compose.yml🔌 API Referansı
Endpoints
POST /extract
Pasaport belgelerini işler ve veri çıkarır.
Request:
POST /extract HTTP/1.1
Content-Type: multipart/form-data
files: [binary]Response:
{
"success": true,
"records": [
{
"given_names": "MEHMET",
"surname": "ÖRNEK",
"tc_kimlik_no": "12345678901",
"date_of_birth": "1990-01-15",
"passport_number": "U12345678",
"date_of_issue": "2020-01-01",
"date_of_expiry": "2030-01-01",
"issuing_authority": "ANKARA"
}
],
"photo_matches": [
{
"photo_filename": "foto1.jpg",
"matched_tc": "12345678901",
"matched_name": "MEHMET ORNEK",
"similarity": 0.87
}
],
"excel_path": "/workspace/EXCEL/passports_extracted.xlsx"
}GET /health
Sistem sağlık kontrolü.
Response:
{
"status": "healthy",
"version": "2.0.0",
"openai_configured": true,
"face_recognition_available": true
}POST /classify
Tek bir görseli sınıflandırır.
Response:
{
"document_type": "PASSPORT",
"confidence": 0.95,
"method": "hybrid",
"details": "aspect=1.42, faces=1, face_ratio=0.045"
}⚙️ Konfigürasyon
Ortam Değişkenleri (.env)
Konfigürasyon Dosyası (config.py)
# Yüz eşleştirme hassasiyeti
FACE_MATCH_THRESHOLD = 0.6 # Düşük = daha katı, Yüksek = daha toleranslı
# Minimum yüz boyutu (piksel)
MIN_FACE_SIZE = 60
# Sınıflandırma güven eşiği
CLASSIFICATION_CONFIDENCE_THRESHOLD = 0.7
# Görsel işleme
VISION_MAX_DIMENSION = 1200
JPEG_QUALITY = 95
# Vesikalık boyutu
PHOTO_OUTPUT_SIZE = 200 # 200x200 kare piksel📊 Excel Çıktı Şeması
Kolon Yapısı
Şablon Kullanımı
templates/EXCEL_TASLAK.xlsx dosyasını düzenleyerek özel şablon oluşturabilirsiniz.
💾 Önbellek Sistemi
Nasıl Çalışır?
- Pasaport Önbelleği (
output/cache/passports/) - İşlenen her pasaport MD5 hash ile saklanır
- JSON formatında veri depolanır
- Aynı dosya tekrar yüklendiğinde önbellekten okunur
- Yüz Kodlama Önbelleği (
output/cache/face_encodings/) - 128 boyutlu yüz vektörleri PKL formatında saklanır
- Eşleştirme işlemleri hızlanır
Önbelleği Temizleme
# Tüm önbelleği temizle
rm -rf output/cache/*
# Sadece pasaport önbelleğini temizle
rm -rf output/cache/passports/*
# Sadece yüz kodlamalarını temizle
rm -rf output/cache/face_encodings/*🐳 Docker ile Çalıştırma
Docker Compose
# Servisleri başlat
docker compose up -d
# Logları izle
docker compose logs -f
# Servisleri durdur
docker compose downManuel Docker Build
# Backend
docker build -f Dockerfile.backend -t passport-extractor-backend .
# Frontend
docker build -f Dockerfile.frontend -t passport-extractor-frontend .
# Çalıştır
docker run -d -p 8000:8000 --env-file .env passport-extractor-backend
docker run -d -p 8501:8501 passport-extractor-frontend☁️ Web Deployment (Hugging Face / Cloud)
Bu projeyi Hugging Face Spaces veya herhangi bir Docker tabanlı cloud servisinde çalıştırarak Tablet ve Telefondan erişilebilir hale getirebilirsiniz.
Hugging Face Spaces Kurulumu
- Space Oluşturun: Hugging Face üzerinde yeni bir Space açın.
- SDK Seçimi: "Docker" seçeneğini işaretleyin.
- Dockerfile Ayarı:
- Projedeki
Dockerfile.hf_spacedosyasının adınıDockerfileolarak değiştirin (veya içeriğini kopyalayın). - Bu Dockerfile, hem Backend hem Frontend'i tek bir container'da çalıştırır.
- Ortam Değişkenleri (Secrets):
- Space ayarlarından "Variables/Secrets" kısmına şunları ekleyin: | Anahtar | Değer | Açıklama | |---------|-------|----------| |
OPENAI_API_KEY|sk-...| OpenAI anahtarınız | |DEPLOYMENT_MODE|WEB| Önemli: Web arayüzünü (Upload) aktif eder. | |LLM_MODEL|gpt-4o| (Opsiyonel) Model seçimi |
Nasıl Çalışır?
- Web Modunda (`DEPLOYMENT_MODE=WEB`): Masaüstü (native) dosya seçici devre dışı kalır. Yerine standart "Sürükle Bırak" alanı gelir.
- Bu sayede iPhone, iPad veya Android cihazlardan tarayıcı üzerinden fotoğraf çekip yükleyebilirsiniz.
🔧 Sorun Giderme
Sık Karşılaşılan Sorunlar
1. "face_recognition yüklenemedi" hatası
macOS:
brew install cmake
pip install dlib
pip install face_recognitionLinux:
sudo apt-get install cmake libopenblas-dev liblapack-dev
pip install dlib
pip install face_recognition2. "PDF dönüştürme hatası"
# macOS
brew install poppler
# Linux
sudo apt-get install poppler-utils3. "OpenAI API hatası"
.envdosyasındaOPENAI_API_KEYdeğerini kontrol edin- API anahtarınızın geçerli ve bakiyeli olduğundan emin olun
4. "Yüz eşleşmiyor" sorunu
FACE_MATCH_THRESHOLDdeğerini artırın (örn: 0.6 → 0.7)- Fotoğraf kalitesini kontrol edin
- Yüzün net görünür olduğundan emin olun
5. "Türkçe karakterler bozuk"
- Excel dosyasını UTF-8 encoding ile açın
- LibreOffice kullanıyorsanız import sırasında UTF-8 seçin
Log Seviyesi Ayarlama
# backend/main_pipeline.py içinde
import logging
logging.basicConfig(level=logging.DEBUG) # Detaylı loglar için📝 Versiyon Geçmişi
V2.1.0 (2024-12)
- ✅ Excel'den fotoğraf kolonları kaldırıldı
- ✅ Boş kayıtlara "OKUNAMAYANLAR klasöründe" notu eklendi
- ✅ FOTO/TCFOTO boyutu 200x200 kare yapıldı
- ✅ Yatay görsel desteği eklendi (sağ/sol kırpma fallback)
- ✅ Vesikalıktan yüz kırpma ile TCFOTO kaydetme
V2.0.0 (2024-12)
- ✅ Yüz eşleştirme sistemi eklendi
- ✅ TCFOTO otomatik kayıt
- ✅ Hybrid belge sınıflandırma
- ✅ Önbellek sistemi
- ✅ 3 kolonlu modern UI
- ✅ Gevşetilmiş eşleştirme threshold'ları
V1.1.0 (2024-11)
- ✅ Cache sistemi
- ✅ PDF desteği
- ✅ Excel şablon desteği
V1.0.0 (2024-10)
- 🎉 İlk sürüm
- ✅ Temel pasaport veri çıkarma
- ✅ OpenAI GPT-4o entegrasyonu
🤝 Katkıda Bulunma
- Bu repoyu fork edin
- Feature branch oluşturun (
git checkout -b feature/YeniOzellik) - Değişikliklerinizi commit edin (
git commit -m 'Yeni özellik eklendi') - Branch'inizi push edin (
git push origin feature/YeniOzellik) - Pull Request açın
📄 Lisans
Bu proje MIT lisansı altında lisanslanmıştır. Detaylar için LICENSE dosyasına bakın.
📞 İletişim
Sorularınız veya geri bildirimleriniz için:
- 📧 Email: taha.cetmili@piramit.ai
<div align="center">
Global Passport Extractor V2 ile pasaport işleme hiç bu kadar kolay olmamıştı! 🚀
Made with ❤️ by Piramit AI
</div>
