Face Detection Haar Cascade Classifier Raspberry Pi
Bismillah,
Sesuai janji saya pada tulisan sebelumnya bahwa saya akan posting membuat aplikasi sederhana menggunakan OpenCV. Aplikasi sederhana yang akan dibuat adalah face detection menggunakan Haar Cascade Classifier, algoritma ini dikembangkan oleh Paul Viola dan Michael Jones yaitu dengan melakukan training image positive(gambar wajah) dan image negative(gambar bukan wajah). Bacaan yang menarik terkait hal tersebut salah satunya ada yang membahas di sini, beberapa hal yang akan saya bahas di sini adalah sebagai berikut
Install git
Ya install git, menurut saya sangat penting karena git merupakan salah satu repository untuk source code yang sangat banyak digunakan oleh para programer. Jadi raspberry pi tidak digunakan untuk full coding, raspberry pi digunakan untuk menjalankan source code yang telah kita buat bisa menggunakan laptop/komputer. Alurnya nanti tinggal download atau update code pada server git menggunakan perintah git. Sebelumnya kita install dulu git menggunakan perintah di bawah ini
sudo apt install git
git --version
Implementasi kode
Saya lakukan coding bukan di raspberry dengan menggunakan editor python yang cukup terkenal yaitu PyCharm, jika menginginkan editor tersebut silakan download di sini. Sebenarnya untuk membuat project yang terintegasi dengan git bisa menggunakan command line, versi gui plugin yang ada pada PyChartm ataupun bisa langsung ke websitenya github. Jika menginginkan membuat project melalui websitenya, Anda harus terlebih dahulu membuat akun di github. Ada 2 jenis akun yang bisa Anda buat, versi yang gratis dan berbayar. Perbedaan dari sisi layanan salah satunya adalah kita bisa membuat project yang private, kita bisa mengatur siapa saja yang bisa melihat project yang kita buat. Jangan khawatir, silakan Anda membuat akun dengan alamat email konstitusi pendidikan misal *.ac.id maka nanti akan mendapatkan layanan seperti berbayar selama 1 tahun yang nanti bisa diperpanjang. Pada kesempatan kali ini akan dibuat menggunakan salah satu fitur yang ada pada PyCharam, versi yang saya gunakan ketika saya menulis tutorial ini adalah 2018.3.5. Buatlah project baru – nama project face-detection-pi – pilih New environment using VirtualEnv – Base interpreter – /usr/local/bin/python3(gunakan python 3), jika menginginkan library global digunakan semua contreng Inherit global site-packages. Disarankan tetap menggunakan library yang dibutuhkan saja atau tidak melakukan contreng pada bagian tersebut, jadi jika dibutuhkan library ya kita tinggal menggunakan perintah pip install [nama library]
duplikasi lebih baik drpd ketika push ke production program ga jalan..
salah satu dari akun di grup python indonesia
Storage & bandwidth lebih murah drpd waktu utk debug di production atau delay release
belajar dr pngalaman, babak belur develop personal project gara2 dependency error ????
masih akun yang sama di grup python indonesia
Silakan melakukan coding ria menggunakan PyCharm, buat file python yang isinya sebagai berikut
import cv2
# Untuk mengambil gambar menggunakan streaming video
cap = cv2.VideoCapture(0)
# Load lokasi hasil training dari haar cascade
faceCascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
cv2.namedWindow("face detection", cv2.WINDOW_GUI_EXPANDED)
# Looping terus untuk membaca gambar frame demi frame
while True:
ret, frame = cap.read()
if frame is None:
continue
# Ubah gambar dari BRG ke grayscale
gray = cv2.cvtColor(frame.copy(), cv2.COLOR_BGR2GRAY)
# Hasil dari deteksi wajah adalah list rectangle atau kotak
faces = faceCascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5, minSize=(30, 30))
print("found {0} faces!".format(len(faces)))
# Membuat kotak dengan opencv berdasarkan wajah-wajah yang terdeteksi
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.imshow("face detection", frame)
# Frame akan keluar ketika tombol q pada keyboard ditekan
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# Jika selesai release semua resource
cap.release()
cv2.destroyAllWindows()
Secara singkat sudah dijelaskan pada source dan source code tersedia di sini, tapi yang terpenting adalah silakan parameter ketika mendeteksi diubah-ubah nilainya sehingga mengakibatkan pengaruh yang berbeda misalkan scaleFactor ataupun minNeighbors. Kemudian ketika menjalankan pastikan kondisi pencahayaan sekitar Anda juga baik, tidak pada kegelapan ketika Anda menjalankannya karena nanti wajah Anda tidak akan terdeteksi dengan baik. Bacaan yang menarik bisa ditemukan di sini, selanjutnya tambahkan beberapa file seperti .gitignore dan README.md. Fungsi dari file tersebut adalah untuk meng-ignore file yang akan diupload atau dipush ke server git, README.md adalah file yang berisi tentang deskripsi dari project yang Anda buat. Isi dari file .gitignore kira-kira seperti ini
### IntelliJ IDEA ###
.idea
Maksud dari isi di atas adalah folder .idea tidak akan diupload, .idea adalah folder yang berisi tentang konfigurasi menggunakan editor PyCharm. Anda bisa menambahkan file-file yang tidak akan diupload sendiri, untuk lebih jelasnya silakan baca-baca terkait dengan .gitignore di sini. Dari menu bar Pycharm silakan pilih VCS – Import into Version Control – Create Git Repository, seharusnya nanti file yang berada di bawah project Anda akan berubah menjadi warna merah. Selanjutnya klik kanan project Anda, pilih Git – Commit Directory. Pada bagian Unversional Files silakan dicontreng, kemudian pada bagian commit message diisi misalkan Initial commit. Jika sudah klik tombol commit yang berada pada pojok kanan bawah. Pengisian commit message sangat penting dilakukan agar mudah melakukan logging atau tracking project yang Anda buat, isikan sesuai dengan apa yang telah Anda ubah pada project tersebut.
Kemudian yang Anda harus lakukan adalah upload ke sever git atau istilahnya dengan push menggunakan PyCharm dengan klik kanan project Anda, pilih git – Repository – Push atau bisa mengunakan command+shift+k(Mac OS). Muncul kotak dialog klik Define remote isikan url git Anda, misalkan https://github.com/0d3ng/face-detection-pi. Pastikan Anda sudah membuat akun github dan membuat repository git sebelumnya.
Kita akan coba menjalankan pada raspberry kita, sebelumnya masuk terlebih dahulu ke raspberry pi Anda dan jalankan perintah di bawah ini untuk menyiapkan segala sesuatuanya
mkdir PyCharmProjects
cd PyCharmProjects
git clone https://github.com/0d3ng/face-detection-pi
cd face-detection-pi
workon cv
(cv) pi@raspberrypi:~/PyCharmProjects/face-detection-pi $ python face-detection.py
VIDEOIO ERROR: V4L: can't open camera by index 0
(process:1811): Gtk-WARNING **: Locale not supported by C library.
Using the fallback 'C' locale.
Unable to init server: Could not connect: Connection refused
(face detection:1811): Gtk-WARNING **: cannot open display: localhost:10.0
Jika mendapat error di atas silakan jalankan perintah di bawah ini
sudo modprobe bcm2835-v4l2
Sekarang dicoba kembali, jika masih ada error seperti di bawah ini silakan menggunakan command di bawah ini untuk menghilangkan error tersebut
(cv) pi@raspberrypi:~/PyCharmProjects/face-detection-pi $ python face-detection.py
(process:2000): Gtk-WARNING **: Locale not supported by C library.
Using the fallback 'C' locale.
Unable to init server: Could not connect: Connection refused
(face detection:2000): Gtk-WARNING **: cannot open display: 192.168.8.100:0
export DISPLAY=:0
Semoga sudah tidak error lagi dan bisa tampil face detection-nya. hehe
Penutup
Demikianlah contoh pemanfaatan raspberry pi sederhana aplikasi deteksi wajah sekaligus gimana caranya mengupload ke repository, semoga bermanfaat. Ditunggu tutorial yang lain ya, have nice raspberry. 🙂
Referensi
- https://docs.opencv.org/4.0.1/d7/d8b/tutorial_py_face_detection.html
- https://projects.raspberrypi.org/en/projects/getting-started-with-git/4
- https://realpython.com/face-recognition-with-python/
- https://www.digitalvidya.com/blog/face-recognition-python/
- https://www.jetbrains.com/help/pycharm/set-up-a-git-repository.html
- https://raspberrypi.stackexchange.com/questions/62276/could-not-open-x-display-unable-to-init-server-could-not-connect