Membuat Dataset menggunakan Pickle untuk Face Recognition

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

Pickle merupakan sebuah module python yang mengimplementasikan protokol biner untuk serializing dan de-serializing struktur objek pada python.

Menyiapkan Environment

python -m venv venv
. ./venv/bin/activate

Sruktur projek

.
├── dataset
│ ├── abdul
│ │ ├── 00000.jpg
│ │ ├── 00001.jpg
│ │ ├── 1.jpg
│ │ ├── abdul.txt
│ │ └── with_mask.jpg
│ ├── agil
│ │ ├── 00000.jpg
│ │ └── 1.jpg
│ └── alam
│ └── 10.jpg
└── dataset.py

Install Packages

pip install imutils
pip install opencv-python
pip install face-recognition

Step 1 : Menyiapkan data gambar

buat sebuah folder dengan nama dataset , dalam folder tersebut buat folder berdasarkan nama orang lalu letakkan didalam folder tersebut gambar wajah, seperti berikut:

folder dataset

Step 2 Mulai coding.

buat sebuah file satu level dengan folder dataset beri nama file tersebut sesuai dengan keinginan anda, misal dataset.py

Menyiapakan beberapa paket & modul pendukung, install module tersebut dengan pip atau sejenisnya.

from imutils import paths
import face_recognition
import pickle
import os
import cv2

Langkah berikutnya ialah membuka data gambar pada folder dataset, dan meyiapkan beberapa variabel list untuk menampung nama dan encodings

imagePaths = list(paths.list_images("dataset"))
knownEncodings = []
knownNames = []

Untuk melanjutkan proses berikutnya, kita perlu membuka satu-satu gambarnya, lalu convert gambar tesebut dari RGB ke BGR, pada gambar tersebut kita menggunakan module face_recognition untuk mengetahui lokasi wajah, setelah wajah di identifikasi lakukan encoding berdasarkan lokasi yang di tetapkan.

for (i, imagePath) in enumerate(imagePaths):
image = cv2.imread(imagePath)
rgb = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
face_locations = face_recognition.face_locations(rgb)
face_encodings = face_recognition.face_encodings(rgb,face_locations)

Selanjutnya menggabungkan file encodings dan nama. Untuk nama di ambil berdasarkan nama folder

name = imagePath.split(os.path.sep)[-2]
for face_encoding in face_encodings:
knownEncodings.append(face_encoding)
knownNames.append(name)

Setelah data selesai digabungkan. selanjutnya buat data tersebut dalam bentuk objek lalu kita dump kedalam bentuk file dengan format pickle

data = {"encodings": knownEncodings, "names": knownNames}
f = open("face_encodings.pickle", "wb")
f.write(pickle.dumps(data))
f.close()

Full Code

Output

Reference

Learn, Try, and Share.

--

--