Berikut program membuat landmark wajah menggunakan Python dan library mediapipe (https://mediapipe.dev) yang dikembangkan oleh team Google.
Sementara ini library mediapipe hanya didukung engine python versi 3.7, sehingga jika Anda memiliki python versi di atasnya kemungkinan besar instalasi akan gagal.
Kebutuhan perangkat lunak:
- Editor python menggunakan PyCharm
- Library Numpy
- Library OpenCV
- Library Mediapipe
Jika belum memiliki library numpy dan OpenCV, maka sebaiknya install terlebih dahulu library mediapipe. Dengan menginstall library mediapipe maka secara otomatis dependensi library numpy dan opencv juga akan ikut terinstall.
Buka aplikasi editor PyCharm
Install library mediapipe melalui terminal pycharm dengan perintah pip install mediapipe
Pastikan library opencv, numpy dan mediapipe terinstal. Silahkan masuk ke menu File > Settings... > Project: namaproject > python interpreter.
Ingat gunakan python engine versi 3.7.x
dari list di bawah tampak semua library yang dibutuhkan sudah terinstal
Buat file python baru dengan nama FaceDetectorModule.Py. Klik kanan pada project > New > Python File
Kemudian tuliskan kode program berikut
import cv2
import mediapipe as mp
import time
class FaceMeshDetector():
def __init__(self, staticMode=False, maxFaces=2, minDetectionCon=0.5, minTrackCon=0.5):
self.staticMode = staticMode
self.maxFaces = maxFaces
self.minDetectionCon = minDetectionCon
self.minTrackCon = minTrackCon
self.mpDraw = mp.solutions.drawing_utils
self.mpFaceMesh = mp.solutions.face_mesh
self.faceMesh = self.mpFaceMesh.FaceMesh(self.staticMode, self.maxFaces,
self.minDetectionCon, self.minTrackCon)
self.drawSpec = self.mpDraw.DrawingSpec(thickness=1, circle_radius=1)
def findFaceMesh(self, img, draw=True):
self.imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
results = self.faceMesh.process(self.imgRGB)
faces = []
if results.multi_face_landmarks:
for faceLms in results.multi_face_landmarks:
if draw:
self.mpDraw.draw_landmarks(img, faceLms, self.mpFaceMesh.FACE_CONNECTIONS,
self.drawSpec, self.drawSpec)
face = []
for id, lm in enumerate(faceLms.landmark):
ih, iw, ic = img.shape
x, y = int(lm.x * iw), int(lm.y * ih)
# print(id, x, y)
face.append([x, y])
faces.append(face)
return img, faces
def main():
# cap = cv2.VideoCapture("video/6.mp4")
cap = cv2.VideoCapture(0)
pTime = 0
detector = FaceMeshDetector()
while True:
success, img = cap.read()
img, faces = detector.findFaceMesh(img, True)
if len(faces) != 0:
print(faces[0])
cTime = time.time()
fps = 1 / (cTime - pTime)
pTime = cTime
cv2.putText(img, f'FPS: {int(fps)}', (20, 70), cv2.FONT_HERSHEY_PLAIN,
3, (0, 255, 0), 3)
cv2.imshow("Image", img)
cv2.waitKey(1)
if __name__ == "__main__":
main()
Sebelum menjalankannya, pastikan file yang bernama main.py telah di hapus dari list folder project yang berada pada window sebelah kiri Pycharm.
Untuk menentukan start up file yang akan dijalankan, pilih menu Run > Edit Configurations > tab Configurations. Arahkan Script Path ke file FaceDetectorModule.py yang barusan kita buat
Selanjutnya jalankan aplikasinya dengan menekan tombol run segitiga berwarna hijau
Adapun hasilnya kurang lebih tampak seperti berikut
Source code silahkan download di: https://drive.google.com/file/d/1k3HTBGYj3GlkQyBEkeGHwrpjS19eQyL0/view?usp=sharing
No comments:
Post a Comment