Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -13,6 +13,7 @@ import time
|
|
| 13 |
import random
|
| 14 |
from google.genai.types import GenerateContentConfig
|
| 15 |
import json
|
|
|
|
| 16 |
|
| 17 |
|
| 18 |
def extract_zip_and_collect_files(zip_file_path):
|
|
@@ -47,6 +48,19 @@ def process_pdfs(pdf_files, dpi):
|
|
| 47 |
|
| 48 |
return all_images
|
| 49 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 50 |
|
| 51 |
# Function to analyze the extracted image using Google GenAI
|
| 52 |
def gemini_analysis(images, tanggal_berangkat, tanggal_pulang, tanggal_biometrik):
|
|
@@ -56,27 +70,26 @@ def gemini_analysis(images, tanggal_berangkat, tanggal_pulang, tanggal_biometrik
|
|
| 56 |
Pastikan data seperti nama, tanggal, tujuan dan lainnya konsisten antar dokumen.
|
| 57 |
---
|
| 58 |
DAFTAR SYARAT DOKUMEN YANG WAJIB DIPERIKSA:
|
| 59 |
-
1. **Paspor**
|
| 60 |
-
2. **Paspor Lama**
|
| 61 |
-
3. **Fotokopi Paspor**
|
| 62 |
-
4. **Pas Foto**
|
| 63 |
-
5. **Kartu Keluarga**
|
| 64 |
-
6. **Bukti Nikah/Cerai**
|
| 65 |
7. **KTP**: Wajib. Nama harus sama dengan paspor & dokumen lain. Jika beda nama, wajib ada surat keterangan beda nama.
|
| 66 |
8. **KTP Sponsor**: Wajib jika disponsori.
|
| 67 |
-
9. **Bukti Kelahiran/Ijazah**: Optional. Wajib
|
| 68 |
10. **Surat Sponsor**: Berbahasa Inggris, berisi tujuan, tanggal trip, penanggung biaya, jaminan kembali ke Indonesia.
|
| 69 |
-
11. **Status Pekerjaan (
|
| 70 |
β- Pegawai: Surat kerja + slip gaji 3 bulan
|
| 71 |
β- Pemilik usaha: NIB/SIUP + surat jaminan staf
|
| 72 |
β- Pelajar: Surat sekolah/universitas + kartu pelajar
|
| 73 |
β- Freelancer/Online shop: Kontrak + 5 bukti transaksi
|
| 74 |
β- Pensiun: Surat pensiun + guarantee keluarga
|
| 75 |
-
12. **Rekening Koran Peserta**
|
| 76 |
-
13. **Rekening Koran Sponsor**
|
| 77 |
-
14. **
|
| 78 |
-
15. **Surat Referensi Bank**: Wajib
|
| 79 |
-
16. **Surat Referensi Bank Sponsor**: Wajib jika disponsori. Harus berupa surat resmi dari bank, bukan rekening koran saja. Tidak bisa digantikan dengan rekening koran.
|
| 80 |
---
|
| 81 |
TEMPLATE OUTPUT JAWABAN DALAM FORMAT JSON:
|
| 82 |
{
|
|
@@ -125,13 +138,13 @@ def gemini_analysis(images, tanggal_berangkat, tanggal_pulang, tanggal_biometrik
|
|
| 125 |
---
|
| 126 |
TEMPLATE PESAN PEMBERITAHUAN (notice_msg):
|
| 127 |
Berikut kami informasikan kekurangan dokumen yang *WAJIB* dibawa saat biometric visa schengen nanti ya :
|
| 128 |
-
1. Pas Foto (Wajib berukuran 3,5 x 4,5 cm dan diserahkan di lokasi biometrik)
|
| 129 |
2. ...
|
| 130 |
3. ...
|
| 131 |
4. ...
|
| 132 |
5. ...
|
| 133 |
---
|
| 134 |
-
# cantumkan dokumen lain yang masih Invalid
|
| 135 |
---
|
| 136 |
TEMPLATE SUMMARY:
|
| 137 |
List Dokumen yang sudah valid: .... \n
|
|
@@ -266,7 +279,8 @@ def main_process(files, tanggal_berangkat, tanggal_pulang, tanggal_biometrik, dp
|
|
| 266 |
raise ValueError(f"File {file_path} is not a valid image, PDF, or ZIP.")
|
| 267 |
|
| 268 |
# Generate summary from images
|
| 269 |
-
|
|
|
|
| 270 |
rdf = random.randint(5, 10)
|
| 271 |
time.sleep(rdf)
|
| 272 |
|
|
|
|
| 13 |
import random
|
| 14 |
from google.genai.types import GenerateContentConfig
|
| 15 |
import json
|
| 16 |
+
from PIL import ImageEnhance, ImageFilter
|
| 17 |
|
| 18 |
|
| 19 |
def extract_zip_and_collect_files(zip_file_path):
|
|
|
|
| 48 |
|
| 49 |
return all_images
|
| 50 |
|
| 51 |
+
def preprocess_image(img):
|
| 52 |
+
# Enhance contrast and sharpness
|
| 53 |
+
img = ImageEnhance.Contrast(img).enhance(1.5)
|
| 54 |
+
img = ImageEnhance.Sharpness(img).enhance(2.0)
|
| 55 |
+
|
| 56 |
+
# Convert to grayscale for better OCR performance
|
| 57 |
+
img = img.convert('L')
|
| 58 |
+
|
| 59 |
+
# Resize for optimal resolution (maintain aspect ratio)
|
| 60 |
+
max_size = (1600, 1600)
|
| 61 |
+
img.thumbnail(max_size, Image.LANCZOS)
|
| 62 |
+
|
| 63 |
+
return img
|
| 64 |
|
| 65 |
# Function to analyze the extracted image using Google GenAI
|
| 66 |
def gemini_analysis(images, tanggal_berangkat, tanggal_pulang, tanggal_biometrik):
|
|
|
|
| 70 |
Pastikan data seperti nama, tanggal, tujuan dan lainnya konsisten antar dokumen.
|
| 71 |
---
|
| 72 |
DAFTAR SYARAT DOKUMEN YANG WAJIB DIPERIKSA:
|
| 73 |
+
1. **Paspor**. Wajib. Aktif min. 6 bulan setelah tanggal pulang, ada tanda tangan, lampirkan paspor lama jika ada, lampirkan fotocopy / scan paspor sponsor jika disponsori.
|
| 74 |
+
2. **Paspor Lama**. Opsional. Halaman depan & tanda tangan, semua visa sebelumnya (terutama 5 tahun terakhir).
|
| 75 |
+
3. **Fotokopi Paspor**. Wajib. Halaman depan & tanda tangan, semua visa sebelumnya (terutama 5 tahun terakhir).
|
| 76 |
+
4. **Pas Foto**. Background putih, wajah terlihat 80%, alis terlihat, tidak berbayang.
|
| 77 |
+
5. **Kartu Keluarga**. Wajib. Versi 2019 atau ada barcode, sesuai status, translate jika untuk VFS Germany.
|
| 78 |
+
6. **Bukti Nikah/Cerai**. Wajib jika sudah menikah/bercerai, sertakan halaman biodata suami/istri & surat izin suami jika istri ikut.
|
| 79 |
7. **KTP**: Wajib. Nama harus sama dengan paspor & dokumen lain. Jika beda nama, wajib ada surat keterangan beda nama.
|
| 80 |
8. **KTP Sponsor**: Wajib jika disponsori.
|
| 81 |
+
9. **Bukti Kelahiran/Ijazah**: Optional. Wajib untuk anak-anak atau disponsori orang lain.
|
| 82 |
10. **Surat Sponsor**: Berbahasa Inggris, berisi tujuan, tanggal trip, penanggung biaya, jaminan kembali ke Indonesia.
|
| 83 |
+
11. **Status Pekerjaan (hanya salah satu)**:
|
| 84 |
β- Pegawai: Surat kerja + slip gaji 3 bulan
|
| 85 |
β- Pemilik usaha: NIB/SIUP + surat jaminan staf
|
| 86 |
β- Pelajar: Surat sekolah/universitas + kartu pelajar
|
| 87 |
β- Freelancer/Online shop: Kontrak + 5 bukti transaksi
|
| 88 |
β- Pensiun: Surat pensiun + guarantee keluarga
|
| 89 |
+
12. **Rekening Koran Peserta**. Wajib. Atas nama pribadi, tertera cap & logo bank, nama & nomor rekening, saldo minimal Rp 40 juta/orang, wajib terupdate hingga. 7 hari sebelum tanggal biometrik. Laporkan hingga hasil analisis.
|
| 90 |
+
13. **Rekening Koran Sponsor**. Optional. Wajib ada jika disponsori. tertera cap & logo bank, nama & nomor rekening, saldo minimal Rp 40 juta/orang, wajib terupdate hingga. 7 hari sebelum tanggal biometrik. Laporkan hingga hasil analisis.
|
| 91 |
+
14. **Surat Referensi Bank**: Wajib ada. Surat resmi dari bank yang menyatakan peserta adalah nasabah. Berbeda dengan rekening koran dan tidak bisa digantikan dengan rekening koran.
|
| 92 |
+
15. **Surat Referensi Bank Sponsor**: Wajib jika disponsori. Harus berupa surat resmi dari bank, bukan rekening koran saja. Tidak bisa digantikan dengan rekening koran.
|
|
|
|
| 93 |
---
|
| 94 |
TEMPLATE OUTPUT JAWABAN DALAM FORMAT JSON:
|
| 95 |
{
|
|
|
|
| 138 |
---
|
| 139 |
TEMPLATE PESAN PEMBERITAHUAN (notice_msg):
|
| 140 |
Berikut kami informasikan kekurangan dokumen yang *WAJIB* dibawa saat biometric visa schengen nanti ya :
|
| 141 |
+
1. Pas Foto (Wajib berukuran 3,5 x 4,5 cm dan diserahkan di lokasi biometrik) ## ini wajib dicantumkan dan dibawa
|
| 142 |
2. ...
|
| 143 |
3. ...
|
| 144 |
4. ...
|
| 145 |
5. ...
|
| 146 |
---
|
| 147 |
+
# cantumkan dokumen lain yang masih Invalid beserta alasan invalidnya.
|
| 148 |
---
|
| 149 |
TEMPLATE SUMMARY:
|
| 150 |
List Dokumen yang sudah valid: .... \n
|
|
|
|
| 279 |
raise ValueError(f"File {file_path} is not a valid image, PDF, or ZIP.")
|
| 280 |
|
| 281 |
# Generate summary from images
|
| 282 |
+
preprocessed_images = [preprocess_image(img) for img in all_images]
|
| 283 |
+
raw_output, analysis_str, summary, invalid_list_str, notice_msg, form_filling_str, token_usage = gemini_analysis(preprocessed_images, tanggal_berangkat, tanggal_pulang, tanggal_biometrik)
|
| 284 |
rdf = random.randint(5, 10)
|
| 285 |
time.sleep(rdf)
|
| 286 |
|