Membuat Aplikasi Face Recognition menggunakan Python.

Jihar Al Gifari
TLabCircle
Published in
2 min readJan 8, 2021

Mungkin teman teman pernah melihat aplikasi pengenalan wajah yang diterapkan di beberapa device misalnya saja smartphone dengan fitur autentikasi wajah, digital absensi, cctv, dan sejenisnya.

Sistem pengenalan wajah (Face Recognition) adalah teknologi yang mampu mencocokkan wajah manusia dari gambar digital atau “frame video” dengan database wajah.

OpenCV adalah sebuah library (perpustakaan) yang digunakan untuk mengolah gambar dan video hingga kita mampu mengekstrak informasi di dalamnya. OpenCV dapat berjalan di berbagai bahasa pemrograman, seperti C, C++, Java, Python, dan support di berbagai platform seperti Windows, Linux, Mac OS, iOS dan Android.

Berikut adalah flow bagaimana aplikasi bekerja.

Untuk teman-teman yang belum tahu bagaimana membangun database/dataset wajah dapat mengikuti artikel yang saya tulis sebelumnya di sini.

Membuat program pengenalan wajah dengan python

  1. Buat file app.py lalu tambahkan kode berikut

2. Siapkan beberapa gambar pendukung untuk database gambar, kira-kira struktur file seperti berikut,

Untuk database wajah, saya tidak menggunakan serializerpickle , melainkan masih harcode manual.

. 
├── app.py
├── elon.jpg
└── jihar.jpg

3. Langkah berikutnya adalah Install library opencv-python dan face-recognition

pip install opencv-python
pip install face-recognition

4. Jalankan menggunakan perintah

python app.py

Hasil

Cara Kerja Face Recognition

Tahap pertama kita harus membaca data video berasal dari kamera menggunakan OpenCV.

vid = cv2.VideoCapture(0)while(True):
ret, frame = vid.read()

Menyiapkan database image lalu encode menggunakan face-recognition.

jihar_image = face_recognition.load_image_file("jihar.jpg")
jihar_encoding = face_recognition.face_encodings(jihar_image)[0]
known_face_encodings = [jihar_encoding]
known_face_names = ["jihar"]

Membaca video frame extract, get locations, lalu encode menggunakan face-recognition

small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)
rgb_small_frame = small_frame[:, :, ::-1]
face_locations = face_recognition.face_locations(rgb_small_frame)
face_encodings = face_recognition.face_encodings(rgb_small_frame,face_locations)

Cocokkan kedua data tersebut lalu tampilkan nama jika cocok, jika tidak default “Unknown”.

face_names = []
for face_encoding in face_encodings:
matches = face_recognition.compare_faces(known_face_encodings, face_encoding)
name = "Unknown"
face_distances = face_recognition.face_distance(known_face_encodings, face_encoding)
best_match_index = np.argmin(face_distances)
if matches[best_match_index]:
name = known_face_names[best_match_index]
face_names.append(name)

Membuat persegi panjang untuk menandai wajah pada objek wajah.

for (top, right, bottom, left), name in zip(face_locations, face_names):
top *= 4
right *= 4
bottom *= 4
left *= 4

cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
cv2.rectangle(frame, (left, bottom - 35),(right, bottom), (0, 0,255), cv2.FILLED)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)

--

--