Libfacedetection adalah pustaka sumber terbuka untuk mendeteksi wajah dalam gambar. Perpustakaan didasarkan pada CNN (Convolutional Neural Network). Model CNN pra-terlatih telah dikonversi ke array C dan disimpan dalam file. Jadi kita tidak perlu mendownload caral sebelum menggunakan library ini. Pustaka libfacedetection tidak memiliki dependensi eksternal.
Tutorial ini menjelaskan cara menginstal libfacedetection yang telah dikompilasi di Raspberry Pi.
Paket Debian
Kami telah membuat paket Debian ( .deb) yang terdiri dari binari libfacedetection yang telah dikompilasi sebelumnya untuk Raspberry Pi 3 Model A+/B+ dan Raspberry Pi 4 Model B. Binari kompatibel dengan Raspberry Pi OS Bullseye (32-bit). Kami telah membuat rilis di repositori GitHub dan mengunggah libfacedetection.debpaket.
Libfacedetection dibangun dengan fitur-fitur berikut:
- Optimasi NEON
- OpenMP multi-threading
Pengujian dilakukan pada Raspberry Pi 4 Model B (8 GB).
Instal libfacedetection
Gunakan SSH untuk terhubung ke Raspberry Pi. Jalankan perintah berikut untuk mengdownload .debpaket dari halaman rilis repositori:
wget https://github.com/prepkg/libfacedetection-raspberrypi/releases/latest/download/libfacedetection.deb
Sekarang instal libfacedetection dengan perintah:
sudo apt install -y ./libfacedetection.deb
Anda dapat menghapus .debpaket karena kami tidak membutuhkannya lagi:
rm -rf libfacedetection.deb
Menguji deteksi libface
Untuk mempermudah, instal OpenCV yang telah dikompilasi untuk membaca dan menulis file gambar. Kompiler GNU C++ juga perlu diinstal:
sudo apt install -y g++
Download gambar yang akan digunakan untuk pengujian:
wget -O test.jpg https://raw.githubusercontent.com/ageitgey/face_recognition/master/examples/two_people.jpg
Sekarang buat main.cppfile:
nano main.cpp
Tambahkan kode berikut:
#include <opencv2/opencv.hpp>
#include <facedetection/facedetectcnn.h>
using namespace cv;
#define DETECT_BUFFER_SIZE 0x20000
int main()
{
Mat img = imread(“test.jpg”);
unsigned char *buffer = (unsigned char *) malloc(DETECT_BUFFER_SIZE);
int *results = facedetect_cnn(buffer, img.ptr(0), img.cols, img.rows, img.step);
for (int i = 0; i < *results; i++) {
short *p = ((short *) (results + 1)) + 142 * i;
int score = p[0];
int x = p[1];
int y = p[2];
int w = p[3];
int h = p[4];
char text[4];
snprintf(text, sizeof(text), “%d”, score);
putText(img, text, Point(x, y – 3), FONT_HERSHEY_SIMPLEX, 1, Scalar(0, 255, 0), 2);
rectangle(img, Rect(x, y, w, h), Scalar(0, 255, 0), 2);
}
imwrite(“result.jpg”, img);
free(buffer);
return 0;
}
Kode mendeteksi wajah dalam gambar dan menggambar kotak pembatas di sekitar wajah. Kami juga menulis skor kepercayaan (angka antara 0 dan 100) di dekat setiap kotak pembatas.
Kompilasi kode menggunakan perintah berikut:
g++ main.cpp -o tes -lfacedetection -lopencv_core -lopencv_imgcodecs -lopencv_imgproc
Jalankan program:
./tes
Gambar keluaran ditulis ke file tertentu. Berikut adalah hasil:
Copot pemasangan libfacedetection
Jika Anda ingin menghapus libfacedetection sepenuhnya, jalankan perintah berikut:
sudo apt purge --autoremove -y libfacedetection