Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -50,59 +50,100 @@ def process_pdfs(pdf_files, dpi):
|
|
| 50 |
|
| 51 |
def preprocess_image(img):
|
| 52 |
# Enhance contrast and sharpness
|
| 53 |
-
img = ImageEnhance.Contrast(img).enhance(1.
|
| 54 |
-
img = ImageEnhance.Sharpness(img).enhance(2.
|
| 55 |
-
|
| 56 |
# Resize for optimal resolution (maintain aspect ratio)
|
| 57 |
max_size = (1600, 1600)
|
| 58 |
img.thumbnail(max_size, Image.LANCZOS)
|
| 59 |
-
|
| 60 |
return img
|
| 61 |
|
| 62 |
# Function to analyze the extracted image using Google GenAI
|
| 63 |
def gemini_analysis(images, tanggal_berangkat, tanggal_pulang, tanggal_biometrik):
|
| 64 |
client = genai.Client(api_key='AIzaSyBpviFHkaEF-GAjMMl28dIS1poikhBqq_w')
|
| 65 |
# Define your prompt
|
| 66 |
-
prompt = '''Anda
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 92 |
{
|
| 93 |
"analysis":
|
| 94 |
{
|
| 95 |
"nama_dokumen_1": {"status": "VALID / INVALID / Tidak Perlu",
|
| 96 |
-
"description": "penjelasan detail"
|
| 97 |
"nama_dokumen_2": {"status": "VALID / INVALID / Tidak Perlu",
|
| 98 |
-
"description": "penjelasan detail"
|
| 99 |
-
"
|
| 100 |
-
"description": "penjelasan detail"
|
| 101 |
},
|
| 102 |
-
"summary": "...",
|
| 103 |
"invalid_item": ["nama_dokumen_1", "nama_dokumen_2"],
|
| 104 |
"notice_msg": "...",
|
| 105 |
-
|
| 106 |
"First Name":"...",
|
| 107 |
"Date of Birth":"...",
|
| 108 |
"Place of Birth":"...",
|
|
@@ -131,8 +172,8 @@ def gemini_analysis(images, tanggal_berangkat, tanggal_pulang, tanggal_biometrik
|
|
| 131 |
"inviting person email address":"...",
|
| 132 |
"Traveling and living cost covered by":"..."
|
| 133 |
} # Hanya isi yang ada di dokumen saja. Jika tidak ada, tidak usah diisi atau dimunculkan. Anda juga bisa menambahkan data penting lain yang mungkin belum ditulis di atas.
|
| 134 |
-
|
| 135 |
-
|
| 136 |
TEMPLATE PESAN PEMBERITAHUAN (notice_msg):
|
| 137 |
Berikut kami informasikan kekurangan dokumen yang *WAJIB* dibawa saat biometric visa schengen nanti ya :
|
| 138 |
1. Pas Foto (Wajib berukuran 3,5 x 4,5 cm dan diserahkan di lokasi biometrik)
|
|
@@ -140,15 +181,14 @@ def gemini_analysis(images, tanggal_berangkat, tanggal_pulang, tanggal_biometrik
|
|
| 140 |
3. ...
|
| 141 |
4. ...
|
| 142 |
5. ...
|
| 143 |
-
|
| 144 |
-
## cantumkan dokumen lain yang masih Invalid beserta
|
| 145 |
-
|
| 146 |
TEMPLATE SUMMARY:
|
| 147 |
List Dokumen yang sudah valid: .... \n
|
| 148 |
-
List Dokumen yang invalid : ... \n
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
---
|
| 152 |
'''
|
| 153 |
# Perform document analysis
|
| 154 |
prompt_with_date = f'Tanggal Berangkat={tanggal_berangkat}. Tanggal pulang={tanggal_pulang}. Tanggal Biometrik={tanggal_biometrik}\n\n{prompt}'
|
|
@@ -336,7 +376,7 @@ with gr.Blocks() as demo:
|
|
| 336 |
minimum=100,
|
| 337 |
maximum=400,
|
| 338 |
step=25,
|
| 339 |
-
label="Adjust DPI (100 - 400, Δ=25, default=
|
| 340 |
value=350
|
| 341 |
)
|
| 342 |
|
|
|
|
| 50 |
|
| 51 |
def preprocess_image(img):
|
| 52 |
# Enhance contrast and sharpness
|
| 53 |
+
img = ImageEnhance.Contrast(img).enhance(1.75)
|
| 54 |
+
img = ImageEnhance.Sharpness(img).enhance(2.25)
|
| 55 |
+
|
| 56 |
# Resize for optimal resolution (maintain aspect ratio)
|
| 57 |
max_size = (1600, 1600)
|
| 58 |
img.thumbnail(max_size, Image.LANCZOS)
|
| 59 |
+
|
| 60 |
return img
|
| 61 |
|
| 62 |
# Function to analyze the extracted image using Google GenAI
|
| 63 |
def gemini_analysis(images, tanggal_berangkat, tanggal_pulang, tanggal_biometrik):
|
| 64 |
client = genai.Client(api_key='AIzaSyBpviFHkaEF-GAjMMl28dIS1poikhBqq_w')
|
| 65 |
# Define your prompt
|
| 66 |
+
prompt = '''Anda adalah petugas pemeriksaan kelengkapan dan kesesuaian dokumen untuk pengajuan Visa. Berikut ini adalah alur kerja anda:
|
| 67 |
+
1. Ekstrak metadata dari setiap file/gambar yang diberikan berdasarkan data yang dibutuhkan masing-masing dokumen.
|
| 68 |
+
2. Dari setiap data yang anda dapat, bandingkan dengan persyaratan per dokumen dan periksa konsistensi data kunci antar dokumen.
|
| 69 |
+
3. Berikan analisis per dokumen termasuk kelengkapan dan konsistensi data antar dokumen.
|
| 70 |
+
4. Output pemrosesan berupa JSON dengan template di bawah.
|
| 71 |
+
---
|
| 72 |
+
List Dokumen wajib diserahkan seluruh peserta:
|
| 73 |
+
KTP:
|
| 74 |
+
Wajib ada untuk setiap peserta. Nama harus sama dengan paspor & dokumen lain. Jika beda nama, wajib ada surat keterangan beda nama.
|
| 75 |
+
|
| 76 |
+
Paspor
|
| 77 |
+
Wajib ada untuk setiap peserta. Aktif min. 6 bulan setelah tanggal pulang, ada tanda tangan.
|
| 78 |
+
|
| 79 |
+
Kartu Keluarga (KK)
|
| 80 |
+
Wajib ada untuk setiap peserta. Versi 2019 atau ada barcode.
|
| 81 |
+
|
| 82 |
+
REKENING KORAN PESERTA
|
| 83 |
+
Wajib ada untuk setiap peserta. 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
|
| 84 |
+
|
| 85 |
+
SURAT REFERENSI BANK
|
| 86 |
+
Wajib ada untuk setiap peserta. Harus berupa surat resmi dari bank, menjelaskan bahwa peserta adalah nasabah bank tersebut. Bukan rekening koran dan tidak bisa digantikan dengan rekening koran
|
| 87 |
+
|
| 88 |
+
PAS FOTO
|
| 89 |
+
Background putih, wajah terlihat 80%, alis terlihat, tidak berbayang.
|
| 90 |
+
|
| 91 |
+
BUKTI KELAHIRAN
|
| 92 |
+
Wajib ada untuk setiap peserta. Nama yang tertulis harus sama dengan KTP, PASPOR dan terdapat di Kartu Keluarga (KK).
|
| 93 |
+
Dapat digantikan dengan ijazah. Nama yang tertulis harus sama dengan KTP, PASPOR dan terdapat di Kartu Keluarga (KK).
|
| 94 |
+
---
|
| 95 |
+
Dokumen lain yang sifatnya kondisional
|
| 96 |
+
BUKTI NIKAH/CERAI
|
| 97 |
+
Jika di status perkawinan di KTP tertulis "Kawin" maka wajib ada Bukti Nikah (misal buku nikah/akta nikah).
|
| 98 |
+
Jika di status perkawinan di KTP tertulis "Cerai" maka wajib ada bukti cerai yang menyatakan cerai mati atau cerai hidup.
|
| 99 |
+
|
| 100 |
+
SURAT SPONSOR / GUARANTEE LETTER
|
| 101 |
+
Jika terdapat surat sponsor atau GUARANTEE LETTER maka peserta tersebut merupakan peserta disponsori.
|
| 102 |
+
Bisa berupa surat sponsor/guarantee letter dari perusahaan tempat peserta bekerja atau sekolah/universitas. Jika surat sponsor/guarantee letter dari sekolah/universitas,
|
| 103 |
+
maka wajib ada KARTU PELAJAR/MAHASISWA
|
| 104 |
+
Surat harus mencantumkan nama peserta yang sama dengan KTP, dalam bahasa Inggris, berisi tujuan, tanggal trip, siapa penanggung biaya, dan jaminan kembali ke Indonesia.
|
| 105 |
+
|
| 106 |
+
SLIP GAJI
|
| 107 |
+
Jika peserta merupakan pekerja maka wajib menyertakan SLIP GAJI, bersamaan dengan SURAT SPONSOR / GUARANTEE LETTER dari perusahaan tempat peserta bekerja.
|
| 108 |
+
|
| 109 |
+
NIB/SIUP
|
| 110 |
+
Jika terdapat NIB maka peserta merupakan pemilik usaha. Wajib tertera nama pemilik usaha, nama usaha, alamat usaha, dan nomor NIB.
|
| 111 |
+
|
| 112 |
+
KONTRAK FREELANCE
|
| 113 |
+
Jika peserta merupakan freelancer, maka wajib mencantumkan surat yang menunjukan bukti kontrak freelance. Harus tertera nama peserta yang sama dengan KTP dan dilengkapi bukti transaksi.
|
| 114 |
+
|
| 115 |
+
BUKTI TRANSAKSI
|
| 116 |
+
Jika peserta merupakan pekerja freelance, selain wajib menyertakan bukti KONTRAK FREELANCE, wajib menyertakan BUKTI TRANSAKSI. Bisa berupa invoice project atau dokumen terkait.
|
| 117 |
+
|
| 118 |
+
SURAT PENSIUN
|
| 119 |
+
Merupakan surat yang menyatakan sudah pensiun. Jika peserta menyertakan surat pensiun,
|
| 120 |
+
maka wajib menyertakan surat pensiun yang berisi nama peserta, dan menyatakan sudah pensiun.
|
| 121 |
+
|
| 122 |
+
REKENING KORAN SPONSOR
|
| 123 |
+
Jika peserta disponsori, maka wajib menyertakan SURAT SPONSOR/GUARANTEE LETTER dan rekening koran dari pemberi sponsor.
|
| 124 |
+
Pastikan nama sponsor sama dengan yang tertulis di surat sponsor/guarantee letter,
|
| 125 |
+
tertera cap & logo bank, nama & nomor rekening, saldo minimal Rp 40 juta, wajib terupdate hingga. 7 hari sebelum tanggal
|
| 126 |
+
|
| 127 |
+
SURAT REFERENSI BANK SPONSOR
|
| 128 |
+
Jika peserta disponsori, maka wajib menyertakan SURAT SPONSOR/GUARANTEE LETTER, rekening koran dari pemberi sponsor dan surat bank reference.
|
| 129 |
+
Surat Bank Reference/Referensi Bank, merupakan surat yang menyatakan orang tersebut (pemberi sponsor) merupakan nasabah bank terkait.
|
| 130 |
+
|
| 131 |
+
---
|
| 132 |
+
TEMPLATE OUTPUT JAWABAN DALAM FORMAT JSON:
|
| 133 |
{
|
| 134 |
"analysis":
|
| 135 |
{
|
| 136 |
"nama_dokumen_1": {"status": "VALID / INVALID / Tidak Perlu",
|
| 137 |
+
"description": "penjelasan detail",
|
| 138 |
"nama_dokumen_2": {"status": "VALID / INVALID / Tidak Perlu",
|
| 139 |
+
"description": "penjelasan detail",
|
| 140 |
+
"nama_dokumen_1": {"status": "VALID / INVALID / Tidak Perlu",
|
| 141 |
+
"description": "penjelasan detail",
|
| 142 |
},
|
| 143 |
+
"summary": "...",
|
| 144 |
"invalid_item": ["nama_dokumen_1", "nama_dokumen_2"],
|
| 145 |
"notice_msg": "...",
|
| 146 |
+
"form_filling": {"Surname":"...",
|
| 147 |
"First Name":"...",
|
| 148 |
"Date of Birth":"...",
|
| 149 |
"Place of Birth":"...",
|
|
|
|
| 172 |
"inviting person email address":"...",
|
| 173 |
"Traveling and living cost covered by":"..."
|
| 174 |
} # Hanya isi yang ada di dokumen saja. Jika tidak ada, tidak usah diisi atau dimunculkan. Anda juga bisa menambahkan data penting lain yang mungkin belum ditulis di atas.
|
| 175 |
+
}
|
| 176 |
+
---
|
| 177 |
TEMPLATE PESAN PEMBERITAHUAN (notice_msg):
|
| 178 |
Berikut kami informasikan kekurangan dokumen yang *WAJIB* dibawa saat biometric visa schengen nanti ya :
|
| 179 |
1. Pas Foto (Wajib berukuran 3,5 x 4,5 cm dan diserahkan di lokasi biometrik)
|
|
|
|
| 181 |
3. ...
|
| 182 |
4. ...
|
| 183 |
5. ...
|
| 184 |
+
---
|
| 185 |
+
## cantumkan dokumen lain yang masih Invalid beserta perbaikan yang diperlukan.
|
| 186 |
+
---
|
| 187 |
TEMPLATE SUMMARY:
|
| 188 |
List Dokumen yang sudah valid: .... \n
|
| 189 |
+
List Dokumen yang invalid : ... \n
|
| 190 |
+
Analisis detail keseluruhan: ... \n # sebutkan detail analisa masing-masing dokumen, apa yang menyebabkan dokumen-dokumen tersebut invalid
|
| 191 |
+
Rangkuman data peserta: ... # jelaskan rangkuman data peserta yang ada di dokumen seperti nama peserta, apakah disponsori, siapa yang mensponsori, tujuan, tanggal berangkat dan pulang dan data penting lainnya.
|
|
|
|
| 192 |
'''
|
| 193 |
# Perform document analysis
|
| 194 |
prompt_with_date = f'Tanggal Berangkat={tanggal_berangkat}. Tanggal pulang={tanggal_pulang}. Tanggal Biometrik={tanggal_biometrik}\n\n{prompt}'
|
|
|
|
| 376 |
minimum=100,
|
| 377 |
maximum=400,
|
| 378 |
step=25,
|
| 379 |
+
label="Adjust DPI (100 - 400, Δ=25, default=350)",
|
| 380 |
value=350
|
| 381 |
)
|
| 382 |
|