Sunday, May 16, 2021

Landmark Wajah Dengan Library Mediapipe


 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

 


No comments:

Post a Comment