Spaces:
Sleeping
Sleeping
Update departure and arrival date input.
Browse files
app.py
CHANGED
|
@@ -7,6 +7,7 @@ from google import genai
|
|
| 7 |
import zipfile
|
| 8 |
import tempfile
|
| 9 |
os.system("apt-get install poppler-utils")
|
|
|
|
| 10 |
# Function to process a list of PDF files and convert them to images
|
| 11 |
def process_pdfs(pdf_files):
|
| 12 |
"""
|
|
@@ -23,8 +24,9 @@ def process_pdfs(pdf_files):
|
|
| 23 |
|
| 24 |
return all_images
|
| 25 |
|
|
|
|
| 26 |
# Function to analyze the extracted image using Google GenAI
|
| 27 |
-
def gemini_analysis(images):
|
| 28 |
"""
|
| 29 |
Analyze the extracted image using Google GenAI.
|
| 30 |
"""
|
|
@@ -33,76 +35,55 @@ def gemini_analysis(images):
|
|
| 33 |
client = genai.Client(api_key=os.getenv("GOOGLE_API_KEY"))
|
| 34 |
# Define your prompt
|
| 35 |
prompt = f'''Anda bertugas memvalidasi kesesuaian dan konsistensi dokumen individual berdasarkan syarat Visa di bawah. Cukup fokus pada syarat yang diberikan tanpa mengambil referensi lain.
|
| 36 |
-
Gunakan tanggal hari ini ({today}) sebagai tanggal pemeriksaan visa (bukan pengajuan).
|
| 37 |
---
|
| 38 |
-
|
| 39 |
DAFTAR SYARAT DOKUMEN YANG WAJIB DIPERIKSA:
|
| 40 |
-
|
| 41 |
1. Paspor
|
| 42 |
-
|
| 43 |
Asli, aktif min. 6 bulan setelah tanggal kepulangan
|
| 44 |
Ada tanda tangan pemilik
|
| 45 |
Lampirkan paspor lama jika ada visa perjalanan sebelumnya
|
| 46 |
Copy paspor sponsor jika disponsori
|
| 47 |
-
|
| 48 |
2. Fotokopi Paspor
|
| 49 |
-
|
| 50 |
Halaman depan & tanda tangan
|
| 51 |
Semua visa perjalanan sebelumnya jika ada (terutama 5 tahun terakhir)
|
| 52 |
-
|
| 53 |
3. Pas Foto
|
| 54 |
-
|
| 55 |
Ukuran kurang lebih 3.5 x 4.5 cm, background putih
|
| 56 |
Wajah terlihat 80%, alis tidak tertutup, tidak pakai softlens, tidak berbayang
|
| 57 |
-
|
| 58 |
4. Kartu Keluarga (KK)
|
| 59 |
-
|
| 60 |
Minimal versi 2019 atau berbarcode
|
| 61 |
Harus sesuai status (nikah/cerai/anak-anak β lampirkan dokumen pendukung)
|
| 62 |
Harus ditranslate untuk VFS Germany
|
| 63 |
-
|
| 64 |
5. Akte Nikah/Bukti nikah
|
| 65 |
-
|
| 66 |
Halaman biodata suami dan istri saja
|
| 67 |
Jika istri ikut β wajib surat izin suami
|
| 68 |
-
|
| 69 |
6. KTP
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
Jika beda β lampirkan surat beda nama
|
| 73 |
-
|
| 74 |
7. Akta Kelahiran / Surat Kelahiran / Ijazah
|
| 75 |
-
|
| 76 |
Wajib jika anak-anak atau peserta disponsori oranglain
|
| 77 |
-
|
| 78 |
8. Surat Sponsor (Guarantee Letter)
|
| 79 |
-
|
| 80 |
Dalam Bahasa Inggris
|
| 81 |
Tujuan negara, tanggal trip
|
| 82 |
Siapa yang menanggung biaya
|
| 83 |
-
|
| 84 |
9. Status Pekerjaan
|
| 85 |
-
|
| 86 |
Pegawai: Surat kerja + Slip gaji 3 bulan
|
| 87 |
Pemilik usaha: NIB/SIUP + Surat jaminan staf
|
| 88 |
Pelajar: Surat sekolah/universitas + kartu pelajar
|
| 89 |
Freelancer/onlineshop: Kontrak kerja & 5 bukti transaksi
|
| 90 |
Pensiun: Surat pensiun + guarantee dari keluarga
|
| 91 |
-
|
| 92 |
10. Rekening Koran (3 bulan)
|
| 93 |
-
|
| 94 |
Atas nama pribadi & sponsor
|
| 95 |
Cap & logo bank, nama, nomor rekening
|
| 96 |
Saldo stabil min. Rp 35 juta/orang
|
| 97 |
-
|
| 98 |
11. Slip Gaji
|
| 99 |
-
|
| 100 |
3 bulan terakhir
|
| 101 |
Jika suami lengkap β istri cukup lampirkan rekening koran suami
|
|
|
|
|
|
|
| 102 |
---
|
| 103 |
-
|
| 104 |
FORMAT JAWABAN UNTUK SETIAP DOKUMEN YANG DIUPLOAD:
|
| 105 |
-
|
| 106 |
- Jenis Dokumen : (jenis dokumen)
|
| 107 |
- Status : (Valid / Perlu cek ulang / Tidak diperlukan / Tidak ada)
|
| 108 |
- Catatan : (Catatan singkat atau kekurangan isi dokumen)
|
|
@@ -134,7 +115,7 @@ def extract_zip_and_collect_files(zip_file_path):
|
|
| 134 |
return collected_files
|
| 135 |
|
| 136 |
|
| 137 |
-
def main_process(files):
|
| 138 |
all_images = []
|
| 139 |
|
| 140 |
for file in files:
|
|
@@ -159,7 +140,7 @@ def main_process(files):
|
|
| 159 |
else:
|
| 160 |
raise ValueError(f"File {file_path} is not a valid image, PDF, or ZIP.")
|
| 161 |
|
| 162 |
-
summary = gemini_analysis(all_images)
|
| 163 |
return summary
|
| 164 |
|
| 165 |
|
|
@@ -172,8 +153,16 @@ with gr.Blocks() as demo:
|
|
| 172 |
file_types=[".pdf", ".jpg", ".jpeg", ".png", ".zip"],
|
| 173 |
file_count="multiple"
|
| 174 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 175 |
output = gr.Textbox(label="π Summary Result", lines=20)
|
| 176 |
run_btn = gr.Button("π Run Analysis")
|
| 177 |
-
run_btn.click(fn=main_process, inputs=[file_input], outputs=output)
|
| 178 |
|
| 179 |
-
demo.launch()
|
|
|
|
| 7 |
import zipfile
|
| 8 |
import tempfile
|
| 9 |
os.system("apt-get install poppler-utils")
|
| 10 |
+
|
| 11 |
# Function to process a list of PDF files and convert them to images
|
| 12 |
def process_pdfs(pdf_files):
|
| 13 |
"""
|
|
|
|
| 24 |
|
| 25 |
return all_images
|
| 26 |
|
| 27 |
+
|
| 28 |
# Function to analyze the extracted image using Google GenAI
|
| 29 |
+
def gemini_analysis(images, tanggal_berangkat, tanggal_pulang):
|
| 30 |
"""
|
| 31 |
Analyze the extracted image using Google GenAI.
|
| 32 |
"""
|
|
|
|
| 35 |
client = genai.Client(api_key=os.getenv("GOOGLE_API_KEY"))
|
| 36 |
# Define your prompt
|
| 37 |
prompt = f'''Anda bertugas memvalidasi kesesuaian dan konsistensi dokumen individual berdasarkan syarat Visa di bawah. Cukup fokus pada syarat yang diberikan tanpa mengambil referensi lain.
|
| 38 |
+
Gunakan tanggal hari ini ({today}) sebagai tanggal pemeriksaan visa (bukan pengajuan). Gunakan {tanggal_berangkat} sebagai tanggal berangkat, dan {tanggal_pulang} sebagai tanggal kepulangan.
|
| 39 |
---
|
|
|
|
| 40 |
DAFTAR SYARAT DOKUMEN YANG WAJIB DIPERIKSA:
|
|
|
|
| 41 |
1. Paspor
|
|
|
|
| 42 |
Asli, aktif min. 6 bulan setelah tanggal kepulangan
|
| 43 |
Ada tanda tangan pemilik
|
| 44 |
Lampirkan paspor lama jika ada visa perjalanan sebelumnya
|
| 45 |
Copy paspor sponsor jika disponsori
|
|
|
|
| 46 |
2. Fotokopi Paspor
|
|
|
|
| 47 |
Halaman depan & tanda tangan
|
| 48 |
Semua visa perjalanan sebelumnya jika ada (terutama 5 tahun terakhir)
|
| 49 |
+
Jika tidak dilampirkan, cukup beritahu bahwa Fotokopi Paspor belum ada.
|
| 50 |
3. Pas Foto
|
|
|
|
| 51 |
Ukuran kurang lebih 3.5 x 4.5 cm, background putih
|
| 52 |
Wajah terlihat 80%, alis tidak tertutup, tidak pakai softlens, tidak berbayang
|
|
|
|
| 53 |
4. Kartu Keluarga (KK)
|
|
|
|
| 54 |
Minimal versi 2019 atau berbarcode
|
| 55 |
Harus sesuai status (nikah/cerai/anak-anak β lampirkan dokumen pendukung)
|
| 56 |
Harus ditranslate untuk VFS Germany
|
|
|
|
| 57 |
5. Akte Nikah/Bukti nikah
|
|
|
|
| 58 |
Halaman biodata suami dan istri saja
|
| 59 |
Jika istri ikut β wajib surat izin suami
|
|
|
|
| 60 |
6. KTP
|
| 61 |
+
Nama harus sama dengan paspor dan tercantum pada Kartu Keluarga (KK)
|
| 62 |
+
Jika beda maka wajib lampirkan surat beda nama
|
|
|
|
|
|
|
| 63 |
7. Akta Kelahiran / Surat Kelahiran / Ijazah
|
|
|
|
| 64 |
Wajib jika anak-anak atau peserta disponsori oranglain
|
|
|
|
| 65 |
8. Surat Sponsor (Guarantee Letter)
|
|
|
|
| 66 |
Dalam Bahasa Inggris
|
| 67 |
Tujuan negara, tanggal trip
|
| 68 |
Siapa yang menanggung biaya
|
| 69 |
+
Wajib ada keterangan menjamin akan kembali ke Indonesia
|
| 70 |
9. Status Pekerjaan
|
|
|
|
| 71 |
Pegawai: Surat kerja + Slip gaji 3 bulan
|
| 72 |
Pemilik usaha: NIB/SIUP + Surat jaminan staf
|
| 73 |
Pelajar: Surat sekolah/universitas + kartu pelajar
|
| 74 |
Freelancer/onlineshop: Kontrak kerja & 5 bukti transaksi
|
| 75 |
Pensiun: Surat pensiun + guarantee dari keluarga
|
|
|
|
| 76 |
10. Rekening Koran (3 bulan)
|
|
|
|
| 77 |
Atas nama pribadi & sponsor
|
| 78 |
Cap & logo bank, nama, nomor rekening
|
| 79 |
Saldo stabil min. Rp 35 juta/orang
|
|
|
|
| 80 |
11. Slip Gaji
|
|
|
|
| 81 |
3 bulan terakhir
|
| 82 |
Jika suami lengkap β istri cukup lampirkan rekening koran suami
|
| 83 |
+
|
| 84 |
+
Patikan data seperti nama, tanggal, tujuan dan lainnya sama/konsisten antar dokumen.
|
| 85 |
---
|
|
|
|
| 86 |
FORMAT JAWABAN UNTUK SETIAP DOKUMEN YANG DIUPLOAD:
|
|
|
|
| 87 |
- Jenis Dokumen : (jenis dokumen)
|
| 88 |
- Status : (Valid / Perlu cek ulang / Tidak diperlukan / Tidak ada)
|
| 89 |
- Catatan : (Catatan singkat atau kekurangan isi dokumen)
|
|
|
|
| 115 |
return collected_files
|
| 116 |
|
| 117 |
|
| 118 |
+
def main_process(files, tanggal_berangkat, tanggal_pulang):
|
| 119 |
all_images = []
|
| 120 |
|
| 121 |
for file in files:
|
|
|
|
| 140 |
else:
|
| 141 |
raise ValueError(f"File {file_path} is not a valid image, PDF, or ZIP.")
|
| 142 |
|
| 143 |
+
summary = gemini_analysis(all_images, tanggal_berangkat, tanggal_pulang)
|
| 144 |
return summary
|
| 145 |
|
| 146 |
|
|
|
|
| 153 |
file_types=[".pdf", ".jpg", ".jpeg", ".png", ".zip"],
|
| 154 |
file_count="multiple"
|
| 155 |
)
|
| 156 |
+
tanggal_berangkat = gr.Textbox(
|
| 157 |
+
label="Tanggal Keberangkatan",
|
| 158 |
+
placeholder="Masukan Tanggal Keberangkatan",
|
| 159 |
+
type="date")
|
| 160 |
+
tanggal_pulang = gr.Textbox(
|
| 161 |
+
label="Tanggal Kepulangan",
|
| 162 |
+
placeholder="Masukan Tanggal Kepulangan",
|
| 163 |
+
type="date")
|
| 164 |
output = gr.Textbox(label="π Summary Result", lines=20)
|
| 165 |
run_btn = gr.Button("π Run Analysis")
|
| 166 |
+
run_btn.click(fn=main_process, inputs=[file_input, tanggal_berangkat, tanggal_pulang], outputs=output)
|
| 167 |
|
| 168 |
+
demo.launch()
|