Sebelum membahas identifikasi perlu diketahui ada dua jenis pengecekan suatu citra yaitu identitikasi (identification) dan pencocokan (verification). Pada sistem pencocokan prinsipnya sama dengan mengecek password, misalnya mengecek tanda tangan, sistem akan membandingkan identitas orang yang malakukan tanda tangan dengan citra tanda tangannya. Mirip ketika mau log-in, kita memasukan user id dan kemudian password, tetapi di sini passwordnya diganti dengan sidik jari, tanda tangan, retina, dll. Tetapi sistem identifikasi sedikit lebih rumit karena sistem tidak diberitahu identitas yang melakukan biometrik. Sistem harus mengetahui siapa pemilik citra yang ditangkap sistem. Jadi ketika kita ingin memasuki gedung yang diberi pengaman sistem identifikasi, pengguna hanya memberikan sidik jari, retina, tanda tangan, dan biometrik lainnya yang biasanya non-destruktif (kalo kesetrum mungkin sedang sial aja .. he he).
Untuk identifikasi tanda tangan dibutuhkan pengolahan citra sebelum masuk ke sistem identifikasi. Untuk belajar sebaiknya kita coba sistem yang sederhana misalnya membedakan angka 1,2, dan 3 saja dan tanpa pengolahan citra, alias kita beri tahu langsung vektornya. Gambar berikut ini menunjukan angka 1, 2, dan 3 di pixel berukuran 5×3.
Angka satu di sini menunjukan adanya pola sementara nol tidak. Data tersebut data utama yang akan ditraining dengan Jaringan Syaraf Tiruan (JST). Tentu saja jika hanya data itu yang diberikan, hasilnya kurang bagus karena sistem membutuhkan data lain untuk menjaga masukan yang agak menyimpang misalnya gambar di bawah untuk angka 1.
Untuk angka-angka yang lain, coba buat sendiri deviasinya. Kalo tanda tangan, untuk training user diminta melakukan beberapa tanda tangan, karena kebetulan hampir tidak mungkin melakukan tanda tangan beberapa kali hasilnya sama persis.
Langkah pertama adalah membuat vektor tanda tangan, caranya adalah mengkonversi matriks tanda tangan menjadi vektor dengan fungsi reshape di Matlab. Buka command window, kita coba untuk angka satu terlebih dahulu.
-
>> satu=[0 1 0;0 1 0;0 1 0;0 1 0;0 1 0]
-
satu =
-
0 1 0
-
0 1 0
-
0 1 0
-
0 1 0
-
0 1 0
-
>> satu=reshape(satu,1,15)
-
satu =
-
Columns 1 through 12
-
0 0 0 0 0 1 1 1 1 1 0 0
-
Columns 13 through 15
-
0 0 0
Perhatikan fungsi reshape di atas, matriks 5×3 diubah menjadi 1×15 dimana 15 dari perkalian 3×5 (masukan angka 3, kali dan angka 5 di calculator iphone 6 Anda, nanti keluar deh angka 15 .. he he). Lakukan untuk tiga deviasi dari angka satu di gambar atas. Lakukan juga hal yang sama untuk angka 2 dan angka 3. Bagaimana jika tanpa deviasi? Ya bisa saja, tapi yang namanya belajar/training membedakan monyet dengan bukan monyet aja ga bisa kan trainingnya dengan gambar monyet saja, harus dengan gambar yang lain, bisa dengan foto teman anda, atau foto anda juga boleh. Ok, kita beri label saja monyet, eh angka satu, dua, dan tiga berturut-turut 1,2,3 walau boleh saja 0, 10, 20. Tetapi supaya gampang mengenali yang pertama saja. Supaya cepat, ok 2 dan 3 untuk training tidak perlu deviasi. Angka satu dengan tiga deviasi. Secara prinsipnya adalah gambar berikut:
Kolom terakhir merupakan label/target, sementara vector1 sampai 3 berukuran 1×15. Buka lagi command window, lakukan cara yang sama dengan variabel satu di atas, beri nama saja berikutnya dengan satua, satub, satuc, dua, dan tiga.
-
>> satua=reshape(satua,1,15);
-
>> satub=reshape(satub,1,15);
-
>> satuc=[0 0 1;0 0 1;0 1 0;0 1 0;0 1 0];
-
>> dua=[1 1 1;0 0 1;1 1 1;1 0 0;1 1 1];
-
>> tiga=[1 1 1;0 0 1;0 1 1;0 0 1;1 1 1];
-
>> satua=reshape(satua,1,15);
-
>> satub=reshape(satub,1,15);
-
>> satuc=reshape(satuc,1,15);
-
>> dua=reshape(dua,1,15);
-
>> tiga=reshape(tiga,1,15);
-
>> datalatih=[satu;satua;satub;satuc;dua;tiga];
-
>> target=[1;1;1;1;2;3];
Latih dengan toolbox JST di Matlab dimana data pelatihannya datalatih dan targetnya target. Format di nntool sedikit berbeda dengan data di atas dimana kolom jadi baris dan baris jadi kolom. Gunakan newdatalatih dan newtarget di toolboxnya.
-
>> newdatalatih=transpose(datalatih);
-
>> newtarget=transpose(target);
Oke, kita cek hasilnya yuukk. O iya, kalo masih bingung utak-atik toolbox JST (nntool) bisa dibuka di link sebelumnya, gampang kok. Kita uji dengan angka satu, dua dan tiga.
-
>> tessatu=transpose(satu);
-
>> sim(network1,tessatu)
-
ans =
-
1.0000
-
>> tesdua=transpose(dua);
-
>> sim(network1,tesdua)
-
ans =
-
2.0000
-
>> testiga=transpose(tiga);
-
>> sim(network1,testiga)
-
ans =
-
1.5786
-
>> tessatua=transpose(satua);
-
>> sim(network1,tessatua)
-
ans =
-
1.0000
Gimana .. ada yang ngaco ga? … ternyata, A D A. Angka tiga dites kok keluarnya 1,58 (saya beri warna merah). Makanya ngajarin bedain monyet atau bukan jangan hanya data monyet saja yang dilatih. Ok, selamat berpusing-pusing ria yang dapat skripsi atau tesis tentang identifikasi tanda tangan ya (jadi inget kerjaan saya dulu) ..
Jika Anda bisa membuat pengolahan citra di bawah ini berarti sudah siap nih untuk sistem identifikasi pola .. Gambar di bawah ini hasil keluaran angka dua (lihat bagian putihnya, karena angka 1 berwarna putih dan angka nol berwarna hitam).
Oiya, kalo bisa gunakan Matlab 7 sepertinya lebih ampuh. Bukan Cuma tanda tangan, bisa juga mengenali grafik lho, lihat di sini.
Assalamuaikum maaf kanda untuk Jaringan Syaraf Tiruan untuk Identifikasi Wajah ada tidak refrensinya ?
Sepertinya masih banyak di jurnal, buku agak ketinggalan
Permisi Pak,
Pak mau tanya, bisa ndak mendeteksi objek pada video dengan metode jst lvq?
Terimakasih.
biasanya emang untuk tanda tangan, sepertinya bisa: https://rahmadya.com/2014/10/06/learning-vector-quantization-lvq/
Pak, fungsi data latih itu untuk apa? saya masih kurang paham.
untuk memberi pengetahuan ke JST. Anda tahu 5×5=25 karena pernah menghafalnya kan? begitu juga dengan JST, kalo ga dilatih ya seperti bayi baru lahir, masih kosong kebanyakan neuron2nya.
baik pak, tapi kenapa dalam mengenali angka 1 diatas itu harus punya tiga datalatih yg masing-masing datalatih mempunyai (noise)?
robust dan sesuai dengan kondisi real. coba anda tanda tangan dua kali, apakah bisa sama persis?
Mau bertanya lagi pak, dalam mengenali citra angka 1 itu kan targetnya 1 ya pak, sehingga output pun akan menghasilkan angka 1.
Yg ingin saya tanyakan adalah, dalam kasus saya (untuk identifikasi citra barcode) untuk memproses dari citra barcode sehingga menghasilkan output kode barcode, yg dijadikan target itu apa ya pak? soalnya kalo targetnya kode barcode tersebut tdk bisa.
kalau targetnya barcode juga biasanya utk pencocokan pola. kalau utk identifikasi pola targetnya angka.