BELAJAR ANALISIS DAN BAHASA PEMROGRAMAN

Finger Gesture Menggunakan OpenCV-Pyhton


Library OpenCV tidak cukup untuk memulai proyek Anda. library ini memberi Anda sisi perangkat lunak, tetapi Anda juga membutuhkan komponen perangkat keras. Di kategori perangkat keras memasuki platform yang dikembangkan mampu menjalankan perpustakaan OpenCV, webcam, dan sensor 3D seperti Kinect 3D.

OpenCV adalah library open source dan gratis yang fokus pada pemrosesan gambar real-time. Ia dapat mendeteksi dan mengenali berbagai macam objek, tetapi fokus kami sekarang adalah menerapkan teknik dan metode untuk mendeteksi dan mengenali gerakan tangan manusia.

Sekarang kita akan bahas basic dari gesture recognition menggunakan opencv. Pertama kita panggil terlebih dahulu library yang akan kita gunakan diantaranya cv2, numpy, dan math.


Setelah itu kita akan membuat perulangan, dimana didalamnya terdapat fungsi membaca gambar (line 9), membuat dan menentukan ukuran window untuk memasukkan gesture yang di inginkan (line 12-13). Kemudian pada line 16 meng konvert gesture yang kita input (RGB) menjadi grayscale, dan untuk menghilangkan noise pada gesture inputan maka digunakan gaussian blur untuk mengatasinya (line 19-20). Sebelum itu kita harus menentukan standar deviasi arah X dan Y nya. dibawah merupakan gambar perbandingan standar deviasi 105, 35 dan 5.

Gambar diatas menunjukkan perbandingan dari ketiga standar deviasi yang telah kita cobakan. Semakin besar, standar deviasi terlihat noise semakin tidak ada, terlihat perbedaan yang besar antar standar deviasi 105 dan 5. Standar deviasi yang besar juga tidak baik karena akan membuat gambar inputan sangat blur sehingga sulit terlihat seperti objek aslinya. Masalah ini dikarenakan noise yang terlalu banyak dihilangkan.


Pada line 2-3 kita melihat ada proses thresholding yaitu menggunakan metode otsu's binarization, dimana proses ini digunakan untuk membedakan antara background gambar dan objek gambar dengan mengubah gambar grey menjadi gambar biner atau hitam putih. Dibawah ini merupakan perbandingan antara menggunakan otsu's binarization dan global thresholding.
Dari gambar diatas dapat dilihat bahwa menggunakan otsu's thresholding memiliki daya untuk mengurangi noise lebih baik dibandingkan dengan global thresholding. Kemudian menggunakan gaussian blur di kombinasikan dengan otsu's thresholding memiliki daya yang lebih baik daripada menggunakan otsu's thresholding tetapi tidak terdapat filter gaussian blur.

Selanjutnya line 6 menampilkan frame thresholded. Kemudian untuk line 9-16 merupakan function untuk mnemukan countour, dimana kontur dapat dijelaskan hanya sebagai kurva yang menggabungkan semua titik kontinyu (sepanjang batas), memiliki warna atau intensitas yang sama. Oleh karena itu untuk mendapat akurasi yang baik, kita membutuhkan gambar biner. Dalam OpenCV, menemukan kontur seperti menemukan objek putih dari latar belakang hitam. Jadi ingat, objek yang ditemukan harus putih dan latar belakang harus berwarna hitam.

Ada tiga argumen dalam fungsi cv2.findContours (), yang pertama adalah sumber gambar(image), kedua adalah mode pengambilan kontur(contour), ketiga adalah metode perkiraan kontur(hierarchy). Dan ouputnya akan menghasilkan contour dan hierarchycontour adalah daftar Python dari semua contour dalam gambar. Setiap contour individu adalah array Numpy (x, y) koordinat titik-titik batas objek.

Line 2, digunakan untuk menentukan contour menggunakan max area. Line 5-6 digunakan untuk membuat bounding rectangle di sekitar kontur. Bounding rectangle mempunyai 2 jenis yaitu Straight bounding rectangle dan rotated rectangle. Perbedaan dari keduanya ditunjukkan pada gambar dibawah ini dimana box wana hijau merupakan bounding rectangle dan merah rotated rectangle.
Fungsi cv2.convexHull() memeriksa kurva untuk cacat konveksitas dan mengoreksinya. Secara umum, kurva cembung adalah kurva yang selalu menonjol keluar, atau paling tidak datar. Dan jika itu menonjol di dalam, itu disebut convexity defect. Misalnya, periksa gambar tangan di bawah ini. Garis merah menunjukkan convex hull dari tangan. Tanda panah dua sisi menunjukkan convexity defect, yang merupakan penyimpangan hull maksimum dari kontur.


Kemudian line 12-14 digunakan untuk membuat contour, dimana contour berwarna hijau untuk contour dasar(area input) dan warna merah untuk convex hull seperti gambar diatas. Kemudian line 17, kita ingin mencari convexity defects. Kita harus mengubah returnPoints = False yang dimana defaultnya adalah true. Untuk memahaminya, anda bisa buka documentasi opencv. Kemudian di line 20-22 kita akan mencari convexity defects.

Selanjutnya kita akan menerapkan Aturan Kosinus untuk menemukan sudut untuk semua defect (di antara jari-jari) dengan sudut > 90 derajat akan akan diabaikan kemudian diberi titik titik merah. line 4-8 digunakan untuk menampung sebuah nilai,(line 6-8) dimana nilai tersebut merupakan koordinat untuk titik tertinggi, terendah, titik terkanan dan terkiri untuk di jalan kan di line berikutnya.  Line 11-13 merupakan panjang dari setiap sisi dari segitiga yang di bentuk oleh jari tangan dimana nilai yang digunakan merupakan nilai dari koordinat yang didapatkan. Kemudian line 16 merupakan penerapan dari konsep cosinus yaitu arc cos. Kemudian untuk line 19-26 yaitu menggambar garis dari start(kordinat awal) hingga end(kordinat akhir) menggunakan convext point.


Pada kode diatas sudah masuk dalam tahap prediksi, dimana line 2-14 merupakan pemberian label dan define aksi yang akan diberikan. Saya ambil contoh untuk line 2-3, apabila defectnya =1 maka akan menampilkan "Aku sayang ayah"). Defect disini merupakan sudut diantara jari. Kemudian 16-22 digunakan untuk menampilkan frame contour dan gesture.

Untuk full codenya bisa download disini. Untuk merunning fileny cukup menggunakan dengan python gesture01.py

Mungkin sekian untuk post kali ini, kalo ada salah silahkan komen karena saya juga masih baru belajar thank you
Finger Gesture Menggunakan OpenCV-Pyhton Finger Gesture Menggunakan OpenCV-Pyhton Reviewed by Jimmy Pujoseno on July 15, 2018 Rating: 5

1 comment:

  1. Permisi ka, mau nanya.. kalau name 'contours' is not defined, itu salah dimana ya?

    ReplyDelete

Recent Post

Powered by Blogger.