![]() |
Face dan Edge Detector OpenCV Python |
Sebelum kita membuat program kita untuk Face dan Edge Detector kita memerlukan bantuan modul yaitu modul yang telah saya sebutkan diatas yaitu OpenCV. Untuk menginstall OpenCV kalian bisa menggunakan PIP. Caranya cukup ketikkan pip install opencv-python
Untuk mencek apakah modul sudah terinstall kedalam Python kalian. Kalian bisa buka Python, kemudian ketikkan import cv2 Nah jika kalian tidak menjumpai error apapun kalian bisa lanjut untuk mulai mengikuti tutorial Membuat Program Face, Eye dan Edge Detector Menggunakan OpenCV Python berikut.
PROGRAM EDGE DETECTOR DENGAN OPENCV PYTHON
Pada pembukaan acara saya akan memberikan tutorial Program untuk membuat Edge Detector terlebih dahulu. Cara pembuatan Edge Detector ini begitu mudah. Kita telah disediakan fitur built-in dari dalam modul OpenCV itu sendiri.
Kita dapat menggunakannya cukup dengan memanggil Canny method yang merupakan nama dari fitur built-in OpenCV Python untuk dengan mudah mendeteksi Edge. Tapi sebelum itu pastikan kalian memiliki Camera atau web cam untuk mengikuti tutorial yang live menggunakan camera.
Tapi sebelum memulai Pemrograman yang menggunakan video live dari kamera, kita akan belajar bagaimana untuk membuat edge detector menggunakan gambar yang sudah ada terlebih dahulu. Langsung saja kita mulai coding nya.
import cv2
img = cv2.imread('foto-kamu.jpg')
Nah silahkan kalian sesuaikan file foto kamu agar dapat terimport dengan benar. Agar lebih mudah dalam hal importing resource seperti ini saya selalu anjurkan agar menaruh file yang akan dipanggil kedalam scipt python kedalam satu directory atau folder yang sama dengan script Python kita.
Jika quest pertama telah kalian lewati, maka selanjutnya kita akan menggunakan Canny method milik OpenCV untuk diterapkan kedalam gambar kita, langsung saja kalian buat baris code seperti ini edge = cv2.Canny(img, 70, 70)
Maksud dari baris code diatas adalah kita mendklarasikan Canny method milik OpenCV tersebut kedalam sebuah variabel. Disana tertera memiliki 3 parameter. Parameter pertama yaitu img adalah variabel untuk gambar kita, kemudian 2 parameter selanjutya adalah semacam tingkat kedetailan dari sudut atau edge yang akan di deteksi oleh OpenCV.
Kalian bebas gunakan angka berapa saja untuk 2 parameter terakhir ini, tetapi perlu diingat jika semakin kecil angkanya maka tingkat kedetailan dan kesensitifannya terhadap edge akan semakin besar, yang tentunya juga memberikan noise berlebih kedalah gambar kita.
Langkah terakhir adalah memunculkan gambar kita yang telah diubah wujudnya menjadi gambar sudut - sudut, dan mendeskripsikan cara untuk exit dari program kita. Ini sangatlah mudah, silahkan kalian salin terlebih dahulu code ini.
cv2.imshow('Edge Detector', edge)
cv2.waitKey(0)
cv2.destroyAllWindows()
Penjelasan dari code diatas adalah kita menampilkan gambar kita dengan imshow() method. Didalamnya tertera 2 parameter, parameter pertama mendefinisikan nama window untuk menampilkan foto kita. Silahkan isi dengan string apa saja terserah kalian, tetapi saya disni menggunakan string 'Edge Detector'.
Adapun kita dapat mengisinya dengan angka 1 untuk mendeskripsikan dengan lebih spesifik tombol apa yang akan mengeksekusi code dibawahnya. Dengan membuat method waitKey() maka kita akan membuat method untuk keluar dari program dibawahnya. Itu terselesaikan hanya dengan menggunakan destroyAllWindows() method, yang fungsinya akan menutup dan exit dari semua windows OpenCV yang terbuka.
Langsung saja kita akan run code kita, tapi sebelumnya pastikan code kalian sudah tampak kira - kira seperti ini
import cv2
img = cv2.imread('foto-kamu.jpg')
edge = cv2.Canny(img, 70, 70)
cv2.imshow('Edge Detector', edge)
cv2.waitKey(0)
cv2.destroyAllWindows()
Dan jika code tersebut kalian run maka akan terlihat hasil kurang lebih seperti ini, karena sejatinya ini juga terpengaruh oleh seberapa rumit foto kalian.
Kalau kalian lihat Foto diatas memiliki code yang lebih complex di sisi kiri, itu telah ditambahkan code untuk Face Detection. tetapi saya close window nya untuk meng screenshot khusus edge detecion saja. Oleh karena itu ikuti terus Tutorial Membuat Program Face, Eye dan Edge Detector Menggunakan OpenCV Python ini sampai habis agar kalian ngerti code yang saya tuliskan tersebut.
Kalian bisa gunakan HandPhone kalian dan hubungkan ke PC kalian, atau menggunakan WebCam baik internal ataupun external. Jika kalian sudah siap dari sisi kamera, maka siapkanlah diri kalian menerima barisan code berikut.
Sebenarnya hanya terdapat sedikit perbedaan dari menerapkan OpenCV kedalam foto dan kedalam video. Perbedaan pertama dari hal import. Yap karena ini merupakan Live Video maka tidak ada file yang harus diimport, tetapi di tangkap. Oleh karena itu kita menggunakan videoCam = cv2.VideoCapture(0)
Nah, code diatas berguna sebagi penangkan video dari kamera kita. Pendefinisian kameranya terletak pada parameter didalamnya. Untuk menggunakan kamera pada PC kamu, maka gunakanlah 0 (Nol) sebagai parameternya. Tetapi jika kalian menggunakan kamera kedua, maka masukkan 1 sebagai parameternya. Begitu seterusnya.
Kemudian agar video kita dapat terus - menerus di detect edge nya, maka kita perlu menggunakan while loop selamanya. Berikut adalah codenya.
while True:
cond, frame = videoCam.read()
edge = cv2.Canny(frame, 70, 70)
cv2.imshow('Edge Detect', edge)
exit = cv2.waitKey(1) & 0xff
if exit == ord('q'):
break
videoCam.release()
cv2.destroyAllWindows()
Penjelasan code diatas adalah pertama adalah kita loop selamanya dengan condition True. kemudian kita mendeskripsikan 2 variabel kedalam videoCam.read() Maksud penggunaan 2 variabel adalah, variabel pertama yaitu cond berarti subuah kondisi apakah True atau False, jika True maka akan menampilkan video yaitu yang ada pada variabel frame dan jika kondisinya nanti berubah False saat di break maka video pada frame akan selesai.
Kemudian di show sama seperti saat menggunakan gambar. Nah seperti yang saya bilang diawal untuk mendeskripsikan tombol apa untuk exit dari program kita gunakan parameter 1 pada waitKey() method kemudian diikuti 0xff sebagai penjelas kalau tombol ini khusus dan bukan tombol sembarangan yang akan membreak loop kita.
2 baris terakhir akan tereksekusi ketika loop berhenti, yaitu release() method untuk megatakan pada camera 'eh udah, kita udh exit berhenti ngerekam yah !' kemudian close semua windows dengan destroyAllWindows() method.
Jika sudah maka code kalian seharusnya akan terlihat seperti ini
import cv2
videoCam = cv2.VideoCapture(0)
while True:
cond, frame = videoCam.read()
edge = cv2.Canny(frame, 70, 70)
cv2.imshow('Edge Detect', edge)
exit = cv2.waitKey(1) & 0xff
if exit == ord('q'):
break
videoCam.release()
cv2.destroyAllWindows()
Dan jika kalian Run code kalian akan terlihat seperti ini
Semua quest kita untuk edge detector telah selesai sampai disini, sekarang kita akan memasuki quest baru untuk membuat Face Detector menggunakan OpenCV Python.
Tapi sebelum memulai Pemrograman yang menggunakan video live dari kamera, kita akan belajar bagaimana untuk membuat edge detector menggunakan gambar yang sudah ada terlebih dahulu. Langsung saja kita mulai coding nya.
Program Edge Detector OpenCV Python pada Gambar
Hal pertama yang harus kita lakukan adalah import ! Yap, kita akan import modul OpenCV kita dan juga gambar yang akan kita deteksi edge nya. Langsung saja berikut codenya.import cv2
img = cv2.imread('foto-kamu.jpg')
Nah silahkan kalian sesuaikan file foto kamu agar dapat terimport dengan benar. Agar lebih mudah dalam hal importing resource seperti ini saya selalu anjurkan agar menaruh file yang akan dipanggil kedalam scipt python kedalam satu directory atau folder yang sama dengan script Python kita.
Jika quest pertama telah kalian lewati, maka selanjutnya kita akan menggunakan Canny method milik OpenCV untuk diterapkan kedalam gambar kita, langsung saja kalian buat baris code seperti ini edge = cv2.Canny(img, 70, 70)
Maksud dari baris code diatas adalah kita mendklarasikan Canny method milik OpenCV tersebut kedalam sebuah variabel. Disana tertera memiliki 3 parameter. Parameter pertama yaitu img adalah variabel untuk gambar kita, kemudian 2 parameter selanjutya adalah semacam tingkat kedetailan dari sudut atau edge yang akan di deteksi oleh OpenCV.
Kalian bebas gunakan angka berapa saja untuk 2 parameter terakhir ini, tetapi perlu diingat jika semakin kecil angkanya maka tingkat kedetailan dan kesensitifannya terhadap edge akan semakin besar, yang tentunya juga memberikan noise berlebih kedalah gambar kita.
Langkah terakhir adalah memunculkan gambar kita yang telah diubah wujudnya menjadi gambar sudut - sudut, dan mendeskripsikan cara untuk exit dari program kita. Ini sangatlah mudah, silahkan kalian salin terlebih dahulu code ini.
cv2.imshow('Edge Detector', edge)
cv2.waitKey(0)
cv2.destroyAllWindows()
Penjelasan dari code diatas adalah kita menampilkan gambar kita dengan imshow() method. Didalamnya tertera 2 parameter, parameter pertama mendefinisikan nama window untuk menampilkan foto kita. Silahkan isi dengan string apa saja terserah kalian, tetapi saya disni menggunakan string 'Edge Detector'.
Baca Juga: Tutorial Membuat GUI ChatBot AI Menggunakan Python dan AIMLKemudian isi parameter kedua adalah nama variabel kita yang digunakan untuk menerapkan Canny method kedalam gambar kita. Kemudian ada waitKey() method yang berfungsi untuk menunggu key atau tombol untuk ditekan. Disini kita isi menggunakan parameter 0. Parameter 0 (Nol) berarti kita membolehkan tombol apa saja untuk mengeksekusi kode dibawahnya.
Adapun kita dapat mengisinya dengan angka 1 untuk mendeskripsikan dengan lebih spesifik tombol apa yang akan mengeksekusi code dibawahnya. Dengan membuat method waitKey() maka kita akan membuat method untuk keluar dari program dibawahnya. Itu terselesaikan hanya dengan menggunakan destroyAllWindows() method, yang fungsinya akan menutup dan exit dari semua windows OpenCV yang terbuka.
Langsung saja kita akan run code kita, tapi sebelumnya pastikan code kalian sudah tampak kira - kira seperti ini
import cv2
img = cv2.imread('foto-kamu.jpg')
edge = cv2.Canny(img, 70, 70)
cv2.imshow('Edge Detector', edge)
cv2.waitKey(0)
cv2.destroyAllWindows()
Dan jika code tersebut kalian run maka akan terlihat hasil kurang lebih seperti ini, karena sejatinya ini juga terpengaruh oleh seberapa rumit foto kalian.
![]() |
Edge Detection OpenCV Python |
Program Edge Detector OpenCV Python pada Live Video
Kemudian jika kalian sudah mengerti basic edge detector yang diterapkan kedalam foto. Maka kita akan mencoba menerapkannya kembali kedalam sebuah Live Video dari kamera yang kalian miliki. Kamera ini tentunya harus terhubung dan terbaca oleh OS kita.Kalian bisa gunakan HandPhone kalian dan hubungkan ke PC kalian, atau menggunakan WebCam baik internal ataupun external. Jika kalian sudah siap dari sisi kamera, maka siapkanlah diri kalian menerima barisan code berikut.
Sebenarnya hanya terdapat sedikit perbedaan dari menerapkan OpenCV kedalam foto dan kedalam video. Perbedaan pertama dari hal import. Yap karena ini merupakan Live Video maka tidak ada file yang harus diimport, tetapi di tangkap. Oleh karena itu kita menggunakan videoCam = cv2.VideoCapture(0)
Nah, code diatas berguna sebagi penangkan video dari kamera kita. Pendefinisian kameranya terletak pada parameter didalamnya. Untuk menggunakan kamera pada PC kamu, maka gunakanlah 0 (Nol) sebagai parameternya. Tetapi jika kalian menggunakan kamera kedua, maka masukkan 1 sebagai parameternya. Begitu seterusnya.
Kemudian agar video kita dapat terus - menerus di detect edge nya, maka kita perlu menggunakan while loop selamanya. Berikut adalah codenya.
while True:
cond, frame = videoCam.read()
edge = cv2.Canny(frame, 70, 70)
cv2.imshow('Edge Detect', edge)
exit = cv2.waitKey(1) & 0xff
if exit == ord('q'):
break
videoCam.release()
cv2.destroyAllWindows()
Penjelasan code diatas adalah pertama adalah kita loop selamanya dengan condition True. kemudian kita mendeskripsikan 2 variabel kedalam videoCam.read() Maksud penggunaan 2 variabel adalah, variabel pertama yaitu cond berarti subuah kondisi apakah True atau False, jika True maka akan menampilkan video yaitu yang ada pada variabel frame dan jika kondisinya nanti berubah False saat di break maka video pada frame akan selesai.
Kemudian di show sama seperti saat menggunakan gambar. Nah seperti yang saya bilang diawal untuk mendeskripsikan tombol apa untuk exit dari program kita gunakan parameter 1 pada waitKey() method kemudian diikuti 0xff sebagai penjelas kalau tombol ini khusus dan bukan tombol sembarangan yang akan membreak loop kita.
Baca Juga: Menebak Gender Seseorang Berdasarkan Nama Menggunakan Python Machine LearningSelanjutnya kita gunakan conditional untuk menentukan jenis tombol yang akan kita tekan. Disana kita menggunakan ord() function untuk menempatkan jenis tombol kita didalamnya sebagai parameter. Di contoh diatas saya membuat tombol 'q' menjadi tombol exit program Edge Detector kita.
2 baris terakhir akan tereksekusi ketika loop berhenti, yaitu release() method untuk megatakan pada camera 'eh udah, kita udh exit berhenti ngerekam yah !' kemudian close semua windows dengan destroyAllWindows() method.
Jika sudah maka code kalian seharusnya akan terlihat seperti ini
import cv2
videoCam = cv2.VideoCapture(0)
while True:
cond, frame = videoCam.read()
edge = cv2.Canny(frame, 70, 70)
cv2.imshow('Edge Detect', edge)
exit = cv2.waitKey(1) & 0xff
if exit == ord('q'):
break
videoCam.release()
cv2.destroyAllWindows()
Dan jika kalian Run code kalian akan terlihat seperti ini
![]() |
Edge Detector OpenCV Python |
PROGRAM FACE DAN EYE DETECTOR DENGAN OPENCV PYTHON
Nah, beberapa fungsi yang kita pakai dalam quest kedua ini tidak lah jauh berbeda dengan saat kita membuat Edge Detector. Hal ini tentunya dikarenakan kita menggunakan modul yang sama yaitu OpenCV Python. Seperti biasa kita akan mulai menerapkan Face dan Eye Detector kepada Gambar terlebih dahulu, baru kemudian kita terapkan kedalam Live Video.
Tapi sebelum kalian memulai untuk membuat Face dan Eye Detector menggunakan OpenCV Python ini. Perlu kalian ketahui kita perlu menggunakan file external yang berisi barisan algoritma untuk mencari wajah dan mata pada gambar dan juga video kita nantinya.
File external ini berbasis XML layaknya AIML tetapi memiliki pendefinisian fungsinya sendiri. File ini dinamakan HaarCascade. Membuat HaarCascade akan begitu lama untuk menemukan racikan yang pas. Hal ini dikarenakan kita perlu melakukan train kepada banyak image untuk mengasah keakuratan file tersebut.
Oleh karena itu kita gunakan saja HaarCascade yang sudah tersedia di pasaran Open Source. Kita bisa menemukannya di GitHub. Kita dalam Tutorial ini menggunakan File HaarCascade untuk Wajah, dan juga File HaarCascade untuk Mata.
Untuk dapat menggunakannya kalian cukup buka link diatas kemudian klik raw, pada halaman raw dari file tersebut kalian klik kanan kemudian pilih Save As, kemudian simpan pada folder yang sama dengan script Python kalian agar mudah. Ubah juga namanya dengan yang mudah agar tidak repot saat menulisnya nanti ke dalam script Python.
![]() |
Save File HaarCascade OpenCV Python |
Program Face dan Eye Detector OpenCV Python pada Gambar
Nah, untuk gambar maupun video, kita masukkan terlebih dahulu kedua file yang telah kalian download tadi kedalam script Python kalian. Perlu diketahui disini saya sudah rename file saya menjadi face-detect.xml dan juga eye-detect.xml. Untuk mengimportnya kita gunakan CascadeClassifier() method. Berikut adalah code untuk importnya.
import cv2
img = cv2.imread('foto-kamu.jpg')
face = cv2.CascadeClassifier('face-detect.xml')
eye = cv2.CascadeClassifier('eye-detect.xml')
Maksud dari code diatas adalah kita memasukkan gambar kita dan juga file kita yang sebagai detector atau pendeteksi kedalam variabel. Hal ini untuk mempermudah lagi proses pemanggilan file ini nantinya. Selanjutnya kita akan terapkan codenya pada gambar kita.
Untuk membuat gambar kita hitam putih kita gunakan gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY). Code ini akan mengubah gambar kita menjadi hitam putih yang terletak dalam variabel gray Selanjutnya kita buat Code untuk Face Detector nya dengan menggunakan file yang telah didownload tadi.
Untuk menggunakannya kita cukup tuliskan seperti ini muka = face.detectMultiScale(gray, 1.3, 5) Nah code ini menerapkan algoritma dari face kedalam gray, yang merupakan versi hitam putih dari gambar kita. Kemudian 2 parameter terakhir berfungsi sebagai angka keakuratan dari algoritma kita. Sama seperti nilai keakuratan dari Edge Detector.
Kita dapat mengubahnya dan menyesuaikan dengan sesuka hati. Tetapi umumnya digunakan angka 1.3 dan juga 5. Nah, variabel muka tersebut akan menghasilkan titik X muka, titik Y muka, lebar muka dan juga tinggi muka.
Untuk menggambar sebuah kotak di muka yang terdeteksi maka kita gunakan for loop untuk setiap variabel dalam muka. Contoh codenya seperti ini.
for (x,y,w,h) in muka:
cv2.rectangle(img, (x,y), (x+w, y+h), (0,255,0), 2)
Nah setelah setiap variabel muka terambil kita akan gambar kotak pada wilayah muka tersebut. OpenCV memiliki banyak fitur Built-In untuk menggambar diatas gambar dan juga video. Tapi kali ini kita gunakan salah satu saja, yaitu rectangle method untuk menggambar kotak pada area wajah kita.
Terlihat pada code diatas kita deklarasikan 5 parameter. Parameter pertama adalah letak dimana kita akan menggambar yaitu pada img bukan gray karena kita gunakan gray untuk mendeteksi muka, tetapi kita gambar kedalam gambar yang berwarna atau gambar asli kita.
Kemudian parameter kedua yaitu tuple (x, y) yang merupakan titik kiri atas dari kotak persegi kita. Parameter ketiga yaitu tuple (x+w, y+h) untuk mendefinisikan titik kanan bawah persegi kita sehingga akan terbentuklah persegi dengan 2 titik tersebut.
Paraeter keempat adalah tuple untuk warna. Warna yang dianut OpenCV adalah BGR, yaitu Blue Green Red, kebalikan dari RGB. Valuenya masih sama, warna terkuat adalah value 255, nah karena saya ingin warna hijau maka saya gunakan (0, 255, 0) Kemudian parameter kelima dan terakhir adalah tebal garis kita, disini saya gunakan angka 2 saja.
Code kalian sekarang akan kurang lebih terlihat seperti ini
import cv2
img = cv2.imread('foto-kamu.jpg')
face = cv2.CascadeClassifier('face-detect.xml')
eye = cv2.CascadeClassifier('eye-detect.xml')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
muka = face.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in muka:
cv2.rectangle(img, (x,y), (x+w, y+h), (0,255,0), 2)
Nah untuk sekarang kita beres untuk face detector, sebelum kita run kita akan membuat untuk eye detector terlebih dahulu. Untuk membuat eye detector kita akan lakukan didalam for loop yang telah kita buat diatas.
Hal pertama yang harus kita pahami konsepnya adalah jika mata merupakan komponen dari wajah. Jadi tidak mungkin ada mata diluar wajah. Jadi tidak mungkin mesin akan mendeteksi mata melayang diluar wajah. Tentunya akan menjadi hal yang tidak wajar dan justru menakutkan.
Oleh karena itu kita membutuhkan Region of Image atau yang biasa disingkat RoI. Kita akan gunakan RoI ini untuk menandai bahwa wilayah untuk eye detection hanyalah didalam daerah wajah yang telah terdeteksi sebelumnya.
Maka untuk itu kita buat code seperti ini
roi_warna = frame[y:y+h, x:x+w]
roi_gray = gray[y:y+h, x:x+w]
RoI didefinisikan dengan bentuk mirip list pada Python. Didalamnya terdapat 2 parameter yang berupa range. Disini urutan untuk menandai wilayahnya adalah Y, X bukannya X, Y seperti standart pada umumnya. Variabel x, y, w, h yang tertulis diatas adalah milik muka yang sudah diambil menggunakan for loop.
Disini juga kita harus mendefinisikan RoI untuk versi berwarna dan juga versi hitam putih. Kita definisikan dalam 2 variabel berbeda yaitu roi_warna untuk versi yang berwarna dan juga roi_gray untuk versi hitam putihnya. Urusan isi parameternya sama saja.
Selanjutnya kita terapkan juga Eye Detector pada script kita. Kita cukup tuliskan seperti ini mata = eye.detectMultiScale(roi_gray) Masih sama prinsipnya kita terapkan algoritma kita kedalam versi hitam putihnya. Bedanya disini kita tidak perlu deskripsikan lagi nilai keakuratannya.
Hal ini karena kita inherit saja dari variabel muka diatas. Tetapi jika kalian menemukan ketidak akuratan deteksi, kalian bisa deskripsikan lagi nilainya. Disini percobaan run pertama ada sedikit miss dimana mulut juga terdeteksi sebagai mata. Oleh karena itu saya tambahkan codenya hingga seperti ini mata = eye.detectMultiScale(roi_gray, 1.5, 3) dan miss pun terselesaikan.
import cv2
img = cv2.imread('lat-cv.jpg')
face = cv2.CascadeClassifier('face-detect.xml')
eye = cv2.CascadeClassifier('eye-detect.xml')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
muka = face.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in muka:
cv2.rectangle(img, (x,y), (x+w, y+h), (0,255,0), 2)
roi_warna = img[y:y+h, x:x+w]
roi_gray = gray[y:y+h, x:x+w]
mata = eye.detectMultiScale(roi_gray, 1.5, 3)
for (mx,my,mw,mh) in mata:
cv2.rectangle(roi_warna, (mx,my), (mx+mw, my+mh), (255, 255, 0), 1)
cv2.imshow('Foto Normal', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Dan silahkan kalian run code kalian dan hasilnya akan kurang lebih seperti ini
Jika code kalian belum tepat, silahkan saja otak - atik dibagian nilai keakuratan. Jika sudah akurat. Kalian dapat melanjutkan untuk menerapkan Face dan Eye Detector ini kedalam Live Video dari Kamera kalian.
import cv2
img = cv2.imread('foto-kamu.jpg')
face = cv2.CascadeClassifier('face-detect.xml')
eye = cv2.CascadeClassifier('eye-detect.xml')
Maksud dari code diatas adalah kita memasukkan gambar kita dan juga file kita yang sebagai detector atau pendeteksi kedalam variabel. Hal ini untuk mempermudah lagi proses pemanggilan file ini nantinya. Selanjutnya kita akan terapkan codenya pada gambar kita.
Baca Juga: Megenal Algoritma K Nearest Neighbors dan Penerapannya pada Python Machine LearningTapi sebelumnya kita harus ubah terlebih dahulu gambar awal kita menjadi hitam putih. Hal ini dilakukan karena sebuah foto dan juga video lebih mudah diproses menggunakan algoritma dalam keadaan hitam putih.
Untuk membuat gambar kita hitam putih kita gunakan gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY). Code ini akan mengubah gambar kita menjadi hitam putih yang terletak dalam variabel gray Selanjutnya kita buat Code untuk Face Detector nya dengan menggunakan file yang telah didownload tadi.
Untuk menggunakannya kita cukup tuliskan seperti ini muka = face.detectMultiScale(gray, 1.3, 5) Nah code ini menerapkan algoritma dari face kedalam gray, yang merupakan versi hitam putih dari gambar kita. Kemudian 2 parameter terakhir berfungsi sebagai angka keakuratan dari algoritma kita. Sama seperti nilai keakuratan dari Edge Detector.
Kita dapat mengubahnya dan menyesuaikan dengan sesuka hati. Tetapi umumnya digunakan angka 1.3 dan juga 5. Nah, variabel muka tersebut akan menghasilkan titik X muka, titik Y muka, lebar muka dan juga tinggi muka.
Untuk menggambar sebuah kotak di muka yang terdeteksi maka kita gunakan for loop untuk setiap variabel dalam muka. Contoh codenya seperti ini.
for (x,y,w,h) in muka:
cv2.rectangle(img, (x,y), (x+w, y+h), (0,255,0), 2)
Nah setelah setiap variabel muka terambil kita akan gambar kotak pada wilayah muka tersebut. OpenCV memiliki banyak fitur Built-In untuk menggambar diatas gambar dan juga video. Tapi kali ini kita gunakan salah satu saja, yaitu rectangle method untuk menggambar kotak pada area wajah kita.
Terlihat pada code diatas kita deklarasikan 5 parameter. Parameter pertama adalah letak dimana kita akan menggambar yaitu pada img bukan gray karena kita gunakan gray untuk mendeteksi muka, tetapi kita gambar kedalam gambar yang berwarna atau gambar asli kita.
Kemudian parameter kedua yaitu tuple (x, y) yang merupakan titik kiri atas dari kotak persegi kita. Parameter ketiga yaitu tuple (x+w, y+h) untuk mendefinisikan titik kanan bawah persegi kita sehingga akan terbentuklah persegi dengan 2 titik tersebut.
Paraeter keempat adalah tuple untuk warna. Warna yang dianut OpenCV adalah BGR, yaitu Blue Green Red, kebalikan dari RGB. Valuenya masih sama, warna terkuat adalah value 255, nah karena saya ingin warna hijau maka saya gunakan (0, 255, 0) Kemudian parameter kelima dan terakhir adalah tebal garis kita, disini saya gunakan angka 2 saja.
Code kalian sekarang akan kurang lebih terlihat seperti ini
import cv2
img = cv2.imread('foto-kamu.jpg')
face = cv2.CascadeClassifier('face-detect.xml')
eye = cv2.CascadeClassifier('eye-detect.xml')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
muka = face.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in muka:
cv2.rectangle(img, (x,y), (x+w, y+h), (0,255,0), 2)
Nah untuk sekarang kita beres untuk face detector, sebelum kita run kita akan membuat untuk eye detector terlebih dahulu. Untuk membuat eye detector kita akan lakukan didalam for loop yang telah kita buat diatas.
Hal pertama yang harus kita pahami konsepnya adalah jika mata merupakan komponen dari wajah. Jadi tidak mungkin ada mata diluar wajah. Jadi tidak mungkin mesin akan mendeteksi mata melayang diluar wajah. Tentunya akan menjadi hal yang tidak wajar dan justru menakutkan.
Oleh karena itu kita membutuhkan Region of Image atau yang biasa disingkat RoI. Kita akan gunakan RoI ini untuk menandai bahwa wilayah untuk eye detection hanyalah didalam daerah wajah yang telah terdeteksi sebelumnya.
Maka untuk itu kita buat code seperti ini
roi_warna = frame[y:y+h, x:x+w]
roi_gray = gray[y:y+h, x:x+w]
RoI didefinisikan dengan bentuk mirip list pada Python. Didalamnya terdapat 2 parameter yang berupa range. Disini urutan untuk menandai wilayahnya adalah Y, X bukannya X, Y seperti standart pada umumnya. Variabel x, y, w, h yang tertulis diatas adalah milik muka yang sudah diambil menggunakan for loop.
Disini juga kita harus mendefinisikan RoI untuk versi berwarna dan juga versi hitam putih. Kita definisikan dalam 2 variabel berbeda yaitu roi_warna untuk versi yang berwarna dan juga roi_gray untuk versi hitam putihnya. Urusan isi parameternya sama saja.
Selanjutnya kita terapkan juga Eye Detector pada script kita. Kita cukup tuliskan seperti ini mata = eye.detectMultiScale(roi_gray) Masih sama prinsipnya kita terapkan algoritma kita kedalam versi hitam putihnya. Bedanya disini kita tidak perlu deskripsikan lagi nilai keakuratannya.
Hal ini karena kita inherit saja dari variabel muka diatas. Tetapi jika kalian menemukan ketidak akuratan deteksi, kalian bisa deskripsikan lagi nilainya. Disini percobaan run pertama ada sedikit miss dimana mulut juga terdeteksi sebagai mata. Oleh karena itu saya tambahkan codenya hingga seperti ini mata = eye.detectMultiScale(roi_gray, 1.5, 3) dan miss pun terselesaikan.
Baca Juga: Program GUI Mencari Mean, Median dan Modus Data Tunggal dengan PythonKemudian kita masukkan lagi code untuk for loop. Code kali ini untuk menggambar kotak pada mata. Usahakan agar variabelnya berbeda dengan for loop yang pertama agar tidak terjadi error. Untuk sisanya dan urusan show masih sama saja seperti sebelumnya. Sehingga code kalian akan terlihat seperti ini
import cv2
img = cv2.imread('lat-cv.jpg')
face = cv2.CascadeClassifier('face-detect.xml')
eye = cv2.CascadeClassifier('eye-detect.xml')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
muka = face.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in muka:
cv2.rectangle(img, (x,y), (x+w, y+h), (0,255,0), 2)
roi_warna = img[y:y+h, x:x+w]
roi_gray = gray[y:y+h, x:x+w]
mata = eye.detectMultiScale(roi_gray, 1.5, 3)
for (mx,my,mw,mh) in mata:
cv2.rectangle(roi_warna, (mx,my), (mx+mw, my+mh), (255, 255, 0), 1)
cv2.imshow('Foto Normal', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Dan silahkan kalian run code kalian dan hasilnya akan kurang lebih seperti ini
![]() |
Face dan Eye Detector OpenCV Python |
Program Face dan Eye Detector OpenCV Python pada Live Video
Misi terakhir kita sudah didepan mata. Kita hanyalah perlu memodifikasi sedikit dan dan hanyalah menambahkan beberapa baris code untuk for loop dalam code kita. Langsung saja, hanyalah seperti ini codenya.
import cv2
videoCam = cv2.VideoCapture(0)
face = cv2.CascadeClassifier('face-detect.xml')
eye = cv2.CascadeClassifier('eye-detect.xml')
while True:
cond, frame = videoCam.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
muka = face.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in muka:
cv2.rectangle(frame, (x,y), (x+w, y+h), (0, 255, 0), 5)
roi_warna = frame[y:y+h, x:x+w]
roi_gray = gray[y:y+h, x:x+w]
mata = eye.detectMultiScale(roi_gray)
for (mx,my,mw,mh)in mata:
cv2.rectangle(roi_warna, (mx,my), (mx+mw, my+mh), (255,255,0), 2)
cv2.imshow('Face dan Eye detection', frame)
k = cv2.waitKey(1) & 0xff
if k == ord('q'):
break
videoCam.release()
cv2.destroyAllWindows()
Code diatas akan mudah kalian pahami, karena seluruh keterangannya sudah saya rincikan diatas. Dan jika dijalankan akan terlihat seperti ini
Tutorial diatas adalah versi penjelasan yang detail. Untuk lebih jelas dan mengerti alur ceritanya, silahkan tonton versi video dari Tutorial Membuat Program Face, Eye dan Edge Detector Menggunakan OpenCV Python ini.
import cv2
videoCam = cv2.VideoCapture(0)
face = cv2.CascadeClassifier('face-detect.xml')
eye = cv2.CascadeClassifier('eye-detect.xml')
while True:
cond, frame = videoCam.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
muka = face.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in muka:
cv2.rectangle(frame, (x,y), (x+w, y+h), (0, 255, 0), 5)
roi_warna = frame[y:y+h, x:x+w]
roi_gray = gray[y:y+h, x:x+w]
mata = eye.detectMultiScale(roi_gray)
for (mx,my,mw,mh)in mata:
cv2.rectangle(roi_warna, (mx,my), (mx+mw, my+mh), (255,255,0), 2)
cv2.imshow('Face dan Eye detection', frame)
k = cv2.waitKey(1) & 0xff
if k == ord('q'):
break
videoCam.release()
cv2.destroyAllWindows()
Code diatas akan mudah kalian pahami, karena seluruh keterangannya sudah saya rincikan diatas. Dan jika dijalankan akan terlihat seperti ini
![]() |
Face dan Eye Detector OpenCV Python |
Tutorial diatas adalah versi penjelasan yang detail. Untuk lebih jelas dan mengerti alur ceritanya, silahkan tonton versi video dari Tutorial Membuat Program Face, Eye dan Edge Detector Menggunakan OpenCV Python ini.
PENUTUP TUTORIAL OPENCV PYTHON
Nah dengan basic skill yang sudah kita mainkan diatas kita bisa mengembangkannya untuk menjadi pengenal wajah seperti milik Facebook dengan mengawinkannya dengan Machine Learning. Tapi untuk itu mungkin diperlukan langkah yang lebih advance lagi.
Cukup sekian Tutorial Membuat Program Face, Eye dan Edge Detector Menggunakan OpenCV Python, Jika kalian merasa ada yang bigung dan ada yang perlu ditanyakan kalian bisa tanyakan di kolom komentar bawah.
Dan sedikit ada pengumuman kalau saya akan memvideokan seluruh Tutorial Programming yang ada pada blog ini, jadi saya ingin tahu bagaimana pendapat kalian di kolom komentar bawah.
25 komentar
komentarNgebuat beginian Pake C# kgk jadi jadi sampe sekarang BTW bagus hasilnya
ReplyKeep on Searching :)
Replykeren mas ..
ReplyMakasih mas :) Stay terus ya untuk tutor lainnya (y)
ReplyMakasih banget mas, berguna banget untuk research saya :))
ReplyNice lah kalau bisa bermanfaat :)
Replymas, saya coba pip install opencv-python kok error ya
Replyposisi pakai python 3.5 dari anaconda
Bisa disebutkan atau copas errornya kesini atau ke Fanspage lewat pesan, biar saya tahu error di versi python, atau error versi pip nya :)
ReplyOpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /build/opencv-ISmtkH/o pencv-2.4.9.1+dfsg/modules/highgui/src/window.cpp, line 269
ReplyTraceback (most recent call last):
File "coba2.py", line 9, in
cv2.imshow('Edge Detect', edge)
cv2.error: /build/opencv-ISmtkH/opencv-2.4.9.1+dfsg/modules/highgui/src/window.cpp:269: error: (-215) size.width>0 && size.height>0 in function imshow
itu error kenapa ya mas?
Boleh saya lihat script sobat ??
Replysaya ko ga bisa "invalid sintacx (untuk pip install opencv-python)
Replydan mohon bsa detail lagi ga?
untuk menjalankan perintah pip install, sobat harus melakukannya di luar python terminal, bukan didalam python terminal :) Selamat mencoba
ReplyMs Iqbal. Jika face sdh terdeteksi, bisakah diberi tutorial untuk mengenal wajah milik siapa ?
Replyiah bener bisa cek itu wajah siapa tidak iah?
Replycara work kan di termux android gimana kak?
ReplyTutorialnya sangat bermanfaat �� Terima kasih ilmunya mas
Replynope ny brp mas 1qbal
Replysaya dapat error seperti ini. bagaimana cara menyelesaikannya?
ReplyOpenCV Error: Assertion failed (!empty()) in detectMultiScale, file /home/drannisa/opencv-3.4.0/modules/objdetect/src/cascadedetect.cpp, line 1698
Traceback (most recent call last):
File "latihan eye.py", line 9, in
muka = face.detectMultiScale(gray)
cv2.error: /home/drannisa/opencv-3.4.0/modules/objdetect/src/cascadedetect.cpp:1698: error: (-215) !empty() in function detectMultiScale
salam sejahtera mas..
Replysaya dapat error begini mas, gimana solusinya mas?
'pip' is not recognized as an internal or external command,
operable program or batch file.
kalau di iimg shw saya dapet error karena apa ya?
ReplyHalo pak, saya menggunakan spyder dengan os windows 10, masalah yg terjadi selalu restart kernel apabila menjalankan cv2.imshow(), kira2 ada solusi ga yah pak, bisa diganti dengan matplotlib? terima kasih
ReplySobat @Rocky bisa dilampirkan screenshot errornya baik melalui email atau message facebook, saya kurang paham masalahnya dimana. Terima kasih
ReplyHi Pak Sudah Solved, tranyata jika keluar tidak bisa klik 'x' pada window camera menggunakan mouse, melainkan harus menekan 'q' pada keyboard, terima kasih
ReplySaya dapat error seperti ini. Ini masalahnya apa ya?
ReplyOpenCV Error: Assertion failed (!empty()) in detectMultiScale, file /build/opencv-XDqSFW/opencv-3.2.0+dfsg/modules/objdetect/src/cascadedetect.cpp, line 1681
Traceback (most recent call last):
File "coba.py", line 12, in
muka = face.detectMultiScale(gray, 1.3, 5)
cv2.error: /build/opencv-XDqSFW/opencv-3.2.0+dfsg/modules/objdetect/src/cascadedetect.cpp:1681: error: (-215) !empty() in function detectMultiScale
terimakasih tutorialnya mantabs
ReplyVisitor baik, selalu tinggalkan jejak.
Silahkan komen yang relevan & tidak berlebihan, tidak berbau SARA & Pornografi, tidak mengandung promosi.
^ _ ^ Happy Blogging !