frendyrachman commited on
Commit
1afb483
·
verified ·
1 Parent(s): adc70f7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +86 -46
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.5)
54
- img = ImageEnhance.Sharpness(img).enhance(2.0)
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 bertugas memvalidasi kelengkapan, kesesuaian dan konsistensi data dari dokumen individual berdasarkan syarat Visa di bawah. Cukup fokus pada syarat yang diberikan tanpa mengambil referensi lain.
67
- Pastikan data seperti nama, tanggal, tujuan dan lainnya konsisten antar dokumen.
68
- ---
69
- DAFTAR SYARAT DOKUMEN YANG WAJIB DIPERIKSA:
70
- 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.
71
- 2. **PASPOR LAMA**. Opsional. Halaman depan & tanda tangan, semua visa sebelumnya (terutama 5 tahun terakhir).
72
- 3. **FOTOKOPI PASPOR**. Wajib. Halaman depan & tanda tangan, semua visa sebelumnya (terutama 5 tahun terakhir).
73
- 4. **PAS FOTO**. Background putih, wajah terlihat 80%, alis terlihat, tidak berbayang.
74
- 5. **KARTU KELUARGA**. Wajib. Versi 2019 atau ada barcode, sesuai status, translate jika untuk VFS Germany.
75
- 6. **BUKTI NIKAH/CERAI**. Wajib jika sudah menikah/bercerai, sertakan halaman biodata suami/istri & surat izin suami jika istri ikut.
76
- 7. **KTP**: Wajib. Nama harus sama dengan paspor & dokumen lain. Jika beda nama, wajib ada surat keterangan beda nama.
77
- 8. **KTP SPONSOR**: Wajib jika disponsori.
78
- 9. **BUKTI KELAHIRAN/IJAZAH**: Optional. Wajib untuk anak-anak atau disponsori orang lain.
79
- 10. **SURAT SPONSOR**: Berbahasa Inggris, berisi tujuan, tanggal trip, penanggung biaya, jaminan kembali ke Indonesia.
80
- 11. **Status Pekerjaan (hanya salah satu)**:
81
-  - Pegawai: SURAT KERJA + SLIP GAJI 3 bulan
82
-  - Pemilik usaha: NIB/SIUP + SURAT JAMINAN STAF
83
-  - Pelajar: SURAT SEKOLAH/UNIVERSITAS + KARTU PELAJAR
84
-  - Freelancer/Online shop: KONTRAK FREELANCE + 5 BUKTI TRANSAKSI
85
-  - Pensiun: SURAT PENSIUN + GUARANTEE LETTER dari keluarga
86
- 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.
87
- 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.
88
- 14. **SURAT REFERENSI BANK**: Wajib ada. Harus berupa surat resmi dari bank, menjelaskan bahwa peserta adalah nasabah bank tersebut. Bukan rekening koran dan tidak bisa digantikan dengan rekening koran.
89
- 15. **SURAT REFERENSI BANK SPONSOR**: Wajib ada jika disponsori. Harus berupa surat resmi dari bank, menjelaskan bahwa peserta adalah nasabah bank tersebut. Bukan rekening koran dan tidak bisa digantikan dengan rekening koran.
90
- ---
91
- TEMPLATE OUTPUT JAWABAN DALAM FORMAT JSON:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- "nama_dokumen_3": {"status": "VALID / INVALID / Tidak Perlu",
100
- "description": "penjelasan detail"}
101
  },
102
- "summary": "...", # Analisa keseluruhan dokumen yang diperiksa
103
  "invalid_item": ["nama_dokumen_1", "nama_dokumen_2"],
104
  "notice_msg": "...",
105
- "form_filling": {"Surname":"...",
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 alasan invalidnya yang diambil dari "description" analysis dokumen terkait.
145
- ---
146
  TEMPLATE SUMMARY:
147
  List Dokumen yang sudah valid: .... \n
148
- List Dokumen yang invalid : ... \n
149
- List Dokumen tidak perlu: ... \n
150
- Analisis detail keseluruhan dari masing-masing dokumen: ... # sebutkan detail analisa masing-masing dokumen, apa yang menyebabkan dokumen-dokumen tersebut invalid
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=300)",
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