From 1b577819808b0dca7dc90dc068efccad2b2c094c Mon Sep 17 00:00:00 2001 From: Raihan Surya Date: Wed, 13 Dec 2023 16:58:12 +0700 Subject: [PATCH] Memperbaiki OCR --- .../Controllers/Login/LoginController.php | 185 ++++++++---------- .../2014_10_12_000000_create_users_table.php | 2 +- .../views/Admin/users/detail-user.blade.php | 19 +- resources/views/login/index.blade.php | 12 +- 4 files changed, 99 insertions(+), 119 deletions(-) diff --git a/app/Http/Controllers/Login/LoginController.php b/app/Http/Controllers/Login/LoginController.php index c1b81ee..974bdc8 100644 --- a/app/Http/Controllers/Login/LoginController.php +++ b/app/Http/Controllers/Login/LoginController.php @@ -12,6 +12,7 @@ use App\Models\User; use Barryvdh\DomPDF\Facade\Pdf; use Carbon\Carbon; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Mail; use Illuminate\Support\Str; @@ -25,6 +26,7 @@ use Laravolt\Indonesia\Models\Province; use Laravolt\Indonesia\Models\Village; use Pusher\Pusher; use Ramsey\Uuid\Uuid; +use GuzzleHttp\Client; class LoginController extends Controller { @@ -62,7 +64,7 @@ class LoginController extends Controller return redirect()->intended('user'); } } elseif (Auth::user()->status == 'Rejected') { - Session::flash('message', 'Akun ditolak. Alasan: '.Auth::user()->keterangan); + Session::flash('message', 'Akun ditolak. Alasan: ' . Auth::user()->keterangan); return redirect()->back(); } else { Session::flash('message', 'Akun tidak ditemukan atau sedang dalam pengajuan'); @@ -94,7 +96,6 @@ class LoginController extends Controller public function register(Request $request) { - // return response()->json($request->all()); $request->validate( [ 'nama_depan' => ['required'], @@ -181,64 +182,74 @@ class LoginController extends Controller $ktpBase64 = $request->request->get('ktp'); $wajahBase64 = $request->request->get('wajah'); - $validatedData['email_verified_at'] = now(); + // $validatedData['email_verified_at'] = now(); if ($ktpBase64 && $wajahBase64) { // Konversi string Base64 ke file gambar $ktpFile = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $ktpBase64)); $wajahFile = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $wajahBase64)); - $foto_ktp = 'Foto-KTP-' . $nama_depan . '-' . $nama_belakang . '.jpg'; - $foto_wajah = 'Foto-Wajah-' . $nama_depan . '-' . $nama_belakang . '.jpg'; + $foto_ktp = 'Foto-KTP-' . $email . '.jpg'; + $foto_wajah = 'Foto-Wajah-' . $email . '.jpg'; file_put_contents(public_path('storage/foto-ktp/' . $foto_ktp), $ktpFile); file_put_contents(public_path('storage/foto-wajah/' . $foto_wajah), $wajahFile); } - //OCR try { - // $fotoKTP = public_path('storage/foto-ktp/' . $foto_ktp); + // OCR + $client = new Client(); + $response = $client->request('POST', 'http://localhost:8888/process-image', [ + 'multipart' => [ + [ + 'name' => 'image', + 'contents' => fopen(public_path('storage/foto-ktp/'.$foto_ktp), 'r'), + 'filename' => $foto_ktp, + ], + ], + ]); - // $image = Image::make($fotoKTP); + $result = $response->getBody()->getContents(); - // $image->greyscale(); // Convert to grayscale - // $image->contrast(10); // Increase contrast, adjust the value as needed + $lines = json_decode($result,true); - // $preprocessedfotoKTP = public_path('storage/preprocessed/preprocessed_image.jpg'); - // $image->save($preprocessedfotoKTP); + $namaKTP = str_replace(' ','',strtolower($nama_depan.$nama_belakang)); + $nikKTP = $nik; + $persentaseNama = 0; + $persentaseNik = 0; - // $result = (new TesseractOCR($preprocessedfotoKTP))->run(); + foreach($lines['result'] as $line){ + $teks = str_replace(' ','',strtolower($line)); + $persentaseNamaSementara = 0; + $persentaseNikSementara = 0; + similar_text($teks,$namaKTP,$persentaseNamaSementara); + similar_text($teks,$nikKTP,$persentaseNikSementara); - // (5) Normalize + if($persentaseNamaSementara > 0){ + if($persentaseNamaSementara > $persentaseNama){ + $persentaseNama = $persentaseNamaSementara; + } + } - // $lines = explode("\n", $result); - // $namaOCR = ''; - // $nikOCR = ''; - // $nikInputan = $nik; - // $namaInputan = $nama_depan . ' ' . $nama_belakang; + if($persentaseNikSementara > 0){ + if($persentaseNikSementara > $persentaseNik){ + $persentaseNik = $persentaseNikSementara; + } + } + } - // foreach ($lines as $line) { - // // Mencari NIK - // if (strpos($line, $nikInputan) !== false) { - // $nikOCR = preg_replace('/[^0-9]/', '', $line); - // } + $persentase_kemiripan = ($persentaseNama + $persentaseNik)/2; - // // Mencari nama - // if (strpos($line, $namaInputan) !== false) { - // $namaOCR = trim(substr($line, strpos($line, ':') + 1)); - // } - // } + $status = 'Progress'; - //Selesai - - // $persentase_kemiripan = (similar_text($nikInputan, $nikOCR, $percent) + similar_text($namaOCR, $namaOCR, $percent)) / 2; - // $status = 'Progress'; - - // if (similar_text($nikInputan, $nikOCR, $percent) >= 70 && similar_text($namaOCR, $namaOCR, $percent) >= 70) { - // $status = 'Progress'; - // } else { - // $status = 'Progress'; - // } + if($status >= 50){ + $status = 'Finished'; + }else if($status <= 35){ + return response()->json([ + 'status' => false, + 'message' => 'Sistem tidak dapat mendeteksi foto KTP. Kemungkinan foto tidak jelas atau buram, silahkan upload foto KTP yang jelas. Persentase kemiripan inputan : '.$persentase_kemiripan.'%' + ]); + } DB::beginTransaction(); @@ -261,6 +272,7 @@ class LoginController extends Controller 'gender' => $gender, 'kode_kelurahan' => $kode_kelurahan, 'remember_token' => Str::random(10), + 'status' => $status ]); DB::commit(); @@ -273,15 +285,22 @@ class LoginController extends Controller $pusher = new Pusher('3e5bdc20dddd7fbc655e', 'f2274c37c616d29ff590', '1659859', $options); $payload = [ - 'service' => 'User' + 'service' => 'User', ]; $pusher->trigger('chanel-update-notifikasi-untuk-admin', 'event-update-notifikasi-untuk-admin', $payload); - return response()->json([ - 'status' => true, - 'message' => 'Akun anda sudah terdaftar dan butuh verifikasi hingga maksimal 1 hari kerja', - ]); + if($status == 'Finished'){ + return response()->json([ + 'status' => true, + 'message' => 'Akun anda sudah terdaftar dan dapat digunakan', + ]); + }else{ + return response()->json([ + 'status' => true, + 'message' => 'Akun anda sudah terdaftar dan butuh verifikasi hingga maksimal 1 hari kerja', + ]); + } } catch (\Exception $e) { DB::rollBack(); @@ -305,7 +324,7 @@ class LoginController extends Controller } else { return response()->json([ 'status' => false, - 'message' => 'Akun dengan email '.$request->email.' tidak tersedia', + 'message' => 'Akun dengan email ' . $request->email . ' tidak tersedia', ]); } } @@ -369,73 +388,35 @@ class LoginController extends Controller public function getOcr() { - //OCR - // dd(phpinfo()); - try { - $fotoKTP = public_path('storage/foto-ktp/ktp.jpg'); + $client = new Client(); + $response = $client->request('POST', 'http://localhost:8888/process-image', [ + 'multipart' => [ + [ + 'name' => 'image', + 'contents' => fopen(public_path('storage/foto-ktp/foto_ktp.jpg'), 'r'), + 'filename' => 'foto_ktp.jpg', + ], + ], + ]); - $image = Image::make($fotoKTP); - - $image->greyscale(); // Convert to grayscale - $image->contrast(10); // Increase contrast, adjust the value as needed - - $preprocessedfotoKTP = public_path('storage/preprocessed/preprocessed_image.jpg'); - $image->save($preprocessedfotoKTP); - - $result = (new TesseractOCR($preprocessedfotoKTP))->run(); - - // (5) Normalize - - $lines = explode("\n", $result); - $nikOCR = ''; - $namaOCR = ''; - $nikInputan = '3471140209790001'; - $namaInputan = 'RIYANTO. SE'; - - foreach ($lines as $line) { - // Mencari NIK - if (strpos($line, $nikInputan) !== false) { - $nikOCR = preg_replace('/[^0-9]/', '', $line); - } - - // Mencari nama - if (strpos($line, $namaInputan) !== false) { - $namaOCR = trim(substr($line, strpos($line, ':') + 1)); - } - } - - //Selesai - - $persentase_kemiripan = (similar_text($nikInputan, $nikOCR, $percent) + similar_text($namaOCR, $namaOCR, $percent)) / 2; - // $status = 'Progress'; - - dd([$persentase_kemiripan, $lines]); - - // if (similar_text($nikInputan, $nikOCR, $percent) >= 70 && similar_text($namaOCR, $namaOCR, $percent) >= 70) { - // $status = 'Progress'; - // } else { - // $status = 'Progress'; - // } - } catch (\Exception $e) { - // $status = 'Progress'; - dd($e); - } - //OCR + dd($response->getBody()->getContents()); } - public function email(){ + public function email() + { $verificationEmail = [ 'email' => 'Halo', - 'code' => 'kode' + 'code' => 'kode', ]; - return view('email.verification-email',compact('verificationEmail')); + return view('email.verification-email', compact('verificationEmail')); } - public function invoice(){ + public function invoice() + { // return view('invoice.export-invoice'); // $transaction = Transaction::findOrFail('80d9b19b-ba17-4aea-8cad-c3b4661d33bc'); - $pdf = Pdf::loadView('invoice.export-invoice')->setPaper('A4','portrait'); - return $pdf->download("invoice-".uniqid().".pdf"); + $pdf = Pdf::loadView('invoice.export-invoice')->setPaper('A4', 'portrait'); + return $pdf->download('invoice-' . uniqid() . '.pdf'); } } diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index e991e8c..6c0f961 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -27,7 +27,7 @@ return new class extends Migration $table->string('foto_ktp')->nullable(); $table->string('foto_wajah')->nullable(); $table->string('foto_profile')->nullable(); - $table->integer('persentase_kemiripan')->nullable(); + $table->float('persentase_kemiripan')->nullable(); $table->enum('status',['Finished','Progress','Rejected'])->default('Progress'); $table->string('gender',15); $table->char('kode_kelurahan',10); diff --git a/resources/views/Admin/users/detail-user.blade.php b/resources/views/Admin/users/detail-user.blade.php index 4f3505d..46c63ab 100644 --- a/resources/views/Admin/users/detail-user.blade.php +++ b/resources/views/Admin/users/detail-user.blade.php @@ -136,17 +136,16 @@ Persentase Kemiripan {{ $user->persentase_kemiripan }} - @if ($user->status == 'Progress') -
-
-

Setujui pembuatan akun ini?

-
+ {{-- @if ($user->status == 'Progress') --}} +
+
+

Setujui pembuatan akun ini?

- Setujui - Tolak - @endif +
+ Setujui + Tolak + {{-- @endif --}}
diff --git a/resources/views/login/index.blade.php b/resources/views/login/index.blade.php index 3308e2c..1012662 100644 --- a/resources/views/login/index.blade.php +++ b/resources/views/login/index.blade.php @@ -629,13 +629,13 @@ return; } - if (verificationCode == kode && waktuSekarangDetik > 0) { - verificationStatus = true; - } + // if (verificationCode == kode && waktuSekarangDetik > 0) { + // verificationStatus = true; + // } let formData = new FormData(this); - formData.append('kode_verifikasi', verificationCode); - formData.append('verification_status', verificationStatus ? 'true' : 'false'); + // formData.append('kode_verifikasi', verificationCode); + // formData.append('verification_status', verificationStatus ? 'true' : 'false'); Swal.fire({ html: '

Form Anda sedang diproses!

Mohon tunggu...

', @@ -666,9 +666,9 @@ confirmButtonText: 'OK', }).then(function() { if (response.status) { - console.log(response); location.reload(); } + console.log(response); }); }, error: function(error) {