Membuat Dataset menggunakan Pickle untuk Face Recognition
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:
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
- https://docs.python.org/3/library/pickle.html
- https://www.geeksforgeeks.org/understanding-python-pickling-example/
Learn, Try, and Share.