Tutorial Membuat Program Face Recognizer Menggunakan OpenCV Python #1: Membuat Database

Program Face Recognizer OpenCV Python
Program Face Recognizer OpenCV Python
Tutorial Membuat Program Face Recognizer Menggunakan OpenCV Python #1: Membuat Database - Setelah post untuk OpenCV pertama yang saya memberikan tutorial membuat Face Detection. Nah dengan berbekal pengertian dan kemampuan dalam membuat Face Detection tersebut, kita dapat mengawinkannya dengan Machine Learning untuk membuat Face Recognition sendiri.

Face Recognition kita dapat kembangkan agar sedikit lebih advance daripada milik Facebook yang sering ditampilkan kepada kita saat mengupload foto kita bersama dengan geng kita. Kita dapat mengembangkannya agar dapat bekerja pada live video.

Untuk proses pembuatan Face Recognition ini saya akan bagi menjadi 3 part. Dan setiap partnya ada baiknya kalian juga buat script yang saya ajarkan pada 3 file yang berbeda. Ini digunakan agar saat proses pembuatan dan penambahan Database nantinya tidak bingung dan tidak perlu khawatir akan menganggu display gambar nantinya.

Pada tutorial yang pertama ini kita akan membuat terlebih dahulu database atau data wajah kita yang nantinya dapat diberi label yang sesuai dengan nama kita untuk ditampilkan oleh mesin OpenCV featuring Python kita. Langsung saja kita mulai pembuatan script untuk databasenya.

Membuat Database untuk Face Recognizer OpenCV Python

Nah rencananya saya ingin membuat database yang berisi gambar - gambar muka manusia kedalam folder terpisah, jadi silahkan kalian buat terlebih dahulu folder khusus untuk menampung database muka kalian. Pada tutorial saya ini saya membuat folder dengan nama dataWajah

Setelah kalian membuat folder khusus Database penampung data wajah, kita akan membuat Face detection terlebih dahulu. Datanya masih sama seperti post OpenCV sebelumnya. Kalian bisa lihat di Tutorial Face, Eye dan Edge Detection OpenCV Python.

Tapi tenang saya akan memberikan penjelasan kembali dalam post saya kali ini agar kalian semakin mengerti lebih dan lebih mengerti untuk setiap code dalam tutorial OpenCV saya.

Sebelumnya agar kalian nyaman untuk mengikuti tutorial ini kedepannya, saya rekomendasikan untuk menginstall terlebih dahulu versi advance dari OpenCV. Yaitu OpenCV yang ditambah dengan kontribusi, didalamnya ada tambahan Machine Learning untuk kita membuat Face Recognizer ini.

Cara menginstallnya juga sangat mudah, cukup gunakan PIP dengan menuliskan pip install opencv-contrib-python pada terminal kalian. Masih sama seperti OpenCV sebelumnya, mungkin masih ada beberapa keterbatasan untuk pegguna OS berbasis Unix seperti Linux dan MacOS.

Kalian bisa menguninstall terlebih dahulu versi OpenCV kalian sebelumnya, tapi menurut saya lebih baik dibiarkan saja seperti saya, karena siapa tahu juga jika di unisntall akan ada beberapa fungsi yang tidak bisa digunakan. Dan sekarang kita telah siap memulai Tutorial OpenCV kali ini.

Gampangnya algoritma yang saya pakai adalah seperti ini, pertama kita membuat Face Detection, kemudian kita tangkap gambar wajah kita dan simpan kedalam folder yang telah kita buat diatas.

Import Module Untuk Database Face Recognition

Jangan lupa saya juga masih menggunakan HaarCascade yang sama pada tutorial sebelumnya untuk mencari wajah pada live video kita. Dan seperti biasa hal pertama yang kita lakukan adalah Importing semua hal yang kita butuhkan. Berikut adalah codenya.

import cv2
face = cv2.CascadeClassifier('face-detect.xml')


Nah pasti kalian sudah familiar dengan code diatas, pertama kita import modul OpenCV kita. Tenang saja OpenCV biasa ataupun OpenCV + Contribution sama saja dengan mengimportnya dengan import cv2

Selanjutnya pada line kedua saya memasukkan file HaarCascadenya yang akan digunakan untuk mendeteksi wajah pada live video kita nantinya. Lanjut saya akan mendefinisikan parameter yang nantinya akan menjadi batasan gambar kita untuk di capture.
Baca Juga: Program GUI Gmail Sender menggunakan Python
Selanjutnya kita akan membuat VideoCapture() method untuk mengambil video live kita. Tidak lupa juga input user untuk memasukkan Id wajah untuk melabeli gambar kita nantinya. Berikut adalah simpel codenya.

cam = cv2.VideoCapture(0)
jumlah = 0
id = input("Masukkan ID: ")


Karena saya hanya memiliki satu kamera, saya menggunakan parameter 0 pada VideoCapture() . Tetapi jika kalian memilih menggunakan kamera kedua kalian isikan parameter 1 dan begitu seterusnya. Jika sudah kita akan lanjut kedalam inti script ini, apalagi jika bukan Looping untuk menampilkan video dan capture foto.

Looping Video untuk Database Face Recognition OpenCV Python

Simpel saja untuk code ini sebenarnya. Apalagi kalian telah mengikuti Tutorial Face, Eye dan Edge Detection OpenCV Python pada post saya sebelumnya. Hanya saja disini saya tambahkan sedikit untuk mengcapture video dan save dalam bentuk foto kedalam folder yang telah kamu buat sebelumnya. Codenya terlihat seperti ini.

while True:
    _, frame = cam.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    wajah = muka.detectMultiScale(gray, 1.3, 5)
    for (x,y,w,h) in wajah:
       cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 5)
       if cv2.waitKey(1) & 0xff == ord('c'):
             cv2.imwrite('dataWajah/User.'+id+'.' + str(jumlah) + ".jpg", gray[y:y + h, x:x + w])
             jumlah += 1

    cv2.imshow('Train Face', frame)

    if jumlah > 20:
        break


Code diatas dapat kalian temukan penjelasannya pada post saya sebelumnya. Temukan linknya diatas ok. Kali ini saya hanyalah akan menjelaskan bagian ini saja

if cv2.waitKey(1) & 0xff == ord('c'):
      cv2.imwrite('dataWajah/User.'+id+'.' + str(jumlah) + ".jpg", gray[y:y + h, x:x + w])
      jumlah += 1

if jumlah > 20:
      break


Bagian diatas adalah kondisi agar ketika user menekan tombol c pada keyboard, maka akan mengcapture foto yang bersatu didalam imwrite() method. Method ini mengambil 2 parameter didalamnya.

Parameter pertama adalah nama file foto kita nantinya dan tak lupa ekstensi videonya. Disana saya memberikan nama dengan format seperti ini User. id . no seri (jumlah).jpg Nah jadi pada awal nama fotonya selalu bernam User, hal ini suka - suka aja sih, tetapi biar lebih sistematis saya pakaikan nama ini saja.

Setelah kata User, dilanjutkan tanda titik (dot) yang berfungsi sebagai pemisah nantinya. Setelah dot pertama tersebut akan diikuti id yang dimasukkan oleh User nantinya saat program ini di run.

Sedangkan setelah dot kedua adalah urutan gambarnya, disini kita memberikan batas 20 gambar untuk setiap label nantinya. Oleh karena itu disana tertera code jumlah += 1 untuk menambahkan value dari jumlah setiap satu foto tertangkap dan juga hal ini agar tidak ada foto yang tertimpa karena bernama sama, jadi dengan begini akan ada urutan dari foto ke satu dampai ke dua puluh.

Kemudian parameter kedua adalah bagian mana yang akan kita save. Karena kita hanya menginginkan bagian wajah saja dan itu adalah yang berformat hitam putih maka kita gunakan Region of Image pada variabel gray seperti ini gray[y:y + h, x:x + w]

Jadi denagn code tersebut, gambar yang tersimpan hanyalah bagian dari muka kita saja, dan dalam format Grayscale atau lebih dikenal hitam putih.

Selanjutnya adalah kondisi ketika foto sudah melampui 20 maka Loop akan berhenti dan keluar. Jadi kita tidak perlu susah - susah menghitung ini sudah foto keberapa. Semuanya otomatis, kalian terima jadi saja.
Baca Juga: Menebak Gender Manusia Berdasarkan Namanya Menggunakan Python Machine Learning
Terakhir tambahkan penutup yaitu destroyAllWindows() method dan juga release() method untuk menghabisi task script kita agar tidak memakan banyak memeori.

Nah sekarang kita akan coba jalankan codenya. Tapi sebelum itu pastikan code kalian terlihat skurang lebih seperti ini.

import cv2

face = cv2.CascadeClassifier('face-detect.xml')

cam = cv2.VideoCapture(0)
jumlah = 0
id = input("Masukkan ID: ")

while True:
    _, frame = cam.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    wajah = muka.detectMultiScale(gray, 1.3, 5)
    for (x,y,w,h) in wajah:
       cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 5)
       if cv2.waitKey(1) & 0xff == ord('c'):
             cv2.imwrite('dataWajah/User.'+id+'.' + str(jumlah) + ".jpg", gray[y:y + h, x:x + w])
             jumlah += 1

    cv2.imshow('Train Face', frame)

    if jumlah > 20:
        break

cv2.destroyAllWindows()
cam.release()


Jika sudah terlihat seperti itu maka kalian siap menjalankan code kalian. Jalankan kemudian tekan tombol c sebanyak 20 kali. Nantinya otomatis wajah kalain akan tercapture dan tersimpan kedalam folder yang kalian buat sebelumnya, dan jika jumlah foto sudah mencapai angka 20 maka window akan tertutup otomatis. Hasilnya akan terlihat seperti ini.
Database Wajah OpenCV Python
Database Wajah OpenCV Python
Terlihat bukan, bahwasanya bukan full gambar yang tercapture. tetapi hanyalah bagian muka saja dan itu dalam format hitam putih atau Grayscale.

Penutup Pembuatan Database Face Recognition OpenCV Python

Nah, kali ini kita berhasil membuat database wajah untuk nantinya akan kita gunakan dalam pembuatan Face Recognition. Nantikan part 2 dan 3 dari tutorial ini.

Terima kasih telah membaca Tutorial Membuat Program Face Recognizer Menggunakan OpenCV Python #1: Membuat Database ini sampai akhir. Jika ada kendala silahkan bertanya pada kolom komentar. Jangan lupa juga share agar teman kamu juga tahu tutorial ini.

Share this

Related Posts

Previous
Prev Post »

18 komentar

komentar
04 September, 2017 21:33 delete

Mohon penjelasannya lebih simpel dan kompleks agar semua kalangan bisa memahami

Reply
avatar
05 November, 2017 20:51 delete

kapan lanjutannya gan ? udah lama nungguin :v

Reply
avatar
19 November, 2017 07:13 delete

Iya sob ;-( maaf, akhir - akhir ini, mimin sibuk sama tugas sekolah mimin, apalagi mimin kena efek fullday, jadi doain aja mimin cepet bisa kembali ke dunia program dan bisa bermanfaat buat sobat Otak keren lagi :)

Reply
avatar
11 Disember, 2017 19:33 delete

OpenCV + Contribution ini maksudnya gimana gan, download file dulu atau gimana. soalnya pas langsung dimasukan "Could not find a version that satisfies the requirement opencv-contrib-python (from versions: )
No matching distribution found for opencv-contrib-python". mohon penjelasannya, trimakasih.

Reply
avatar
12 Disember, 2017 02:06 delete

Sobat menjalankan Python versi berapa sob ??

Reply
avatar
26 Disember, 2017 19:47 delete

kan saya pengen install pip install opencv-contrib-python yang keluar malah 'pip' is not recognized as an interna or externa command, operable program or batch file .... itu kenapa ya sob>

Reply
avatar
01 Januari, 2018 20:31 delete

kemungkinan besar, PC sobat belum terinstall pip, untuk manual penginstalan bisa dilihat di web resmi pip di https://pypi.python.org/pypi

Reply
avatar
13 Februari, 2018 05:51 delete

bang, kapan update terbarunya? saya butuh tutorialnya untuk tugas akhir saya. (wardana.bayusy@gmail.com) mohon bantuannya bang.

Reply
avatar
16 April, 2018 16:30 delete

belum ada part selanjutnya min?

Reply
avatar
Tanpa Nama
09 Mei, 2018 23:37 delete

halo mimin mau tanya dong kalo aku keluar error seperti ini kenapa yaa Traceback (most recent call last):
File "face.py", line 17, in
cv2.imwrite('dataWajah/User.'+id+'.' + str(jumlah) + ".jpg", gray[y:y + h, x:x + w])
TypeError: cannot concatenate 'str' and 'int' objects

Reply
avatar
13 November, 2018 08:11 delete

min... kapan update lagi nih....?? kutunggu updatenya.... :)

Reply
avatar
26 Februari, 2019 11:33 delete

kalau Error muncul Output

Traceback (most recent call last):
File "bnu.py", line 13, in
wajah = muka.detectMultiScale(gray, 1.3, 5)
NameError: name 'muka' is not defined

kenapa ya ?

Reply
avatar
20 April, 2019 22:33 delete

"File "bayoe.py", line 13, in
wajah = muka.detectMultiScale(gray, 1.3, 5)
NameError: name 'muka' is not defined"

ini kenapa ya bang?

Reply
avatar
28 Mei, 2020 02:14 delete

Lanjutan nya mana nih pak

Reply
avatar
28 Mei, 2020 13:37 delete

Stay tune di fanspage dan instagram ngodingers ya, kita buat tutorial lengkapnya disana. Otak keren sudah merge dengan ngodingers agar konten lebih bervariasi :)

Reply
avatar
28 Julai, 2020 23:00 delete

file face-detect.xml dapetinnya dimana gan?

Reply
avatar
13 April, 2022 17:09 delete

Izin Reaploud min semoga ilmunya jadi berkah

Reply
avatar

Visitor baik, selalu tinggalkan jejak.
Silahkan komen yang relevan & tidak berlebihan, tidak berbau SARA & Pornografi, tidak mengandung promosi.
^ _ ^ Happy Blogging !