Cara Mendeteksi Wajah Dengan Python, Gampang Bangat!

Pada artikel ini , kita akan belajar bagaimana cara mendeteksi fitur seperti mata, hidung dan mulut pada wajah dengan Python. Setelah posting ini, Anda akan dapat membuat efek dan filter yang mirip dengan apa yang Anda lihat di Snapchat dan Instagram.

Deteksi wajah ( juga disebut face detection ) adalah teknologi komputer berbasis kecerdasan buatan (AI) yang digunakan untuk menemukan dan mengidentifikasi wajah manusia dalam gambar digital. Teknologi deteksi wajah; Ini adalah teknologi yang banyak digunakan di bidang kesehatan, militer dan keamanan. Pengenalan wajah telah berkembang dari teknik penglihatan komputer dasar hingga kemajuan dalam pembelajaran mesin, hingga jaringan saraf tiruan yang semakin kompleks dan teknologi terkait.

Cara Mendeteksi Wajah Dengan Python

Wajah kita memiliki berbagai ciri yang dapat dikenali, seperti mata, mulut, hidung, bibir, dll. Saat kami menggunakan algoritme DLib untuk menentukan properti ini, kami benar-benar mendapatkan peta titik-titik yang mengelilingi setiap fitur. Jadi apakah DLib ini? DLib adalah pustaka pembelajaran mesin canggih yang digunakan untuk memecahkan masalah dunia nyata yang kompleks. Library ini dibuat menggunakan bahasa pemrograman C ++, juga berfungsi dalam bahasa C / C ++, Python, dan Java.

Peta ini terdiri dari 67 titik (juga disebut landmark) dan dapat menentukan fitur-fitur berikut:

Cara Mendeteksi Wajah Dengan Python
Peta poin
  • Poin Rahang: 0-16
  • Poin Alis Kanan: 17-21
  • Poin Alis Kiri: 22-26
  • Poin Hidung: 27-35
  • Titik Mata Kanan: 36-41
  • Poin Mata Kiri: 42-47
  • Poin Mulut: 48-60
  • Poin Bibir: 61-67

Menginstal Modul yang Diperlukan

  • opencv-python
  • dlib

Untuk cara membuat deteksi wajah dengan Python, pertama-tama kita perlu memuat Modul ini dengan menulis berikut ini ke terminal:

pip instal opencv-python, dlib

Anda mungkin mendapatkan beberapa kesalahan saat menginstal Modul dlib di beberapa sistem operasi . Salah satu kesalahan ini adalah kesalahan CMake. Untuk menangani ini, kita perlu menginstal Modul CMake sebelum memuat Modul dlib .

pip instal cmake

Setelah memuat Modul yang diperlukan, kami dapat menyertakan Modul ini dalam proyek kami.

impor cv2
impor dlib

[su_box title=”Baca Juga” style=”noise” box_color=”#a3e2fd” title_color=”#000000″]

[/su_box]

Cara Membuat Aplikasi Deteksi Wajah dengan Python

Kami mengunggah foto kami menggunakan Modul OpenCv.

img = cv2.imread ("photo.png")

# Menunjukkan foto ke layar
cv2.imshow (winname = "Wajah", mat = img)

# Anda harus menekan tombol untuk menutup foto
cv2.waitKey (penundaan = 0)

# Menutup semua jendela.
cv2.destroyAllWindows ()

Cukup sederhana, bukan? Kami mengunggah foto dan mencetaknya di layar menggunakan metode .imshow . Jika Anda menjalankan kode ini, Anda akan melihat foto bernama Face .

deteksi python-dengan-wajah
Foto bernama Face

Sekarang kita akan melakukan deteksi wajah menggunakan fungsi get_frontal_face_detector () dari pustaka Dlib . Namun, fungsi ini hanya berfungsi pada foto abu-abu, jadi dengan menggunakan pustaka OpenCv kami mengubah foto menjadi abu-abu.

The get_frontal_face_detector () mengembalikan fungsi fungsi yang disebut “detektor” yang diperlukan untuk kita untuk menggunakan informasi wajah. Setiap wajah adalah objek yang berisi poin yang dapat ditemukan gambar.

impor cv2
impor dlib

detektor = dlib.get_frontal_face_detector ()

img = cv2.imread ("photo.png")

# Mengubah gambar menjadi skala abu-abu.
abu-abu = cv2.cvtColor (src = img, kode = cv2.COLOR_BGR2GRAY)

# Kami menggunakan fungsi detektor untuk mendeteksi wajah.
wajah = detektor (abu-abu)

untuk wajah di wajah:
    x1 = face.left ()
    y1 = face.top ()
    x2 = wajah.right ()
    y2 = face.bottom ()

    # Kami menggambar persegi panjang
    cv2. rectangle (img = img, pt1 = (x1, y1), pt2 = (x2, y2), color = (0,255,0), tebal = 4)

#show gambar
cv2.imshow (winname = "Wajah", mat = img)

cv2.waitKey (penundaan = 0)

cv2.destroyAllWindows ()

Kode di atas mengambil semua wajah pada gambar dan membuat persegi panjang di setiap wajah.

Foto terdeteksi wajah
Foto terdeteksi wajah

Pada langkah selanjutnya, kita akan menjelajahi beberapa fitur wajah, seperti yang telah kami sebutkan sebelumnya. Kami akan menggunakan modul DLib untuk ini lagi. Fungsi shape_predictor () yang ditawarkan oleh pustaka ini melakukan semua pekerjaan ajaib ini untuk kita. Namun, kami memerlukan model terlatih agar dapat berfungsi.

Ada banyak model di internet untuk ini, Anda dapat mengunduh model yang saya gunakan untuk proyek ini .

impor cv2
impor dlib

detektor = dlib.get_frontal_face_detector ()

predictor = dlib.shape.predictor ("shape_predictor_68_face_landmarks.dat")

img = cv2.imread ("photo.png")

abu-abu = cv2.cvtColor (src = img, kode = cv2.COLOR_BGR2GRAY)

wajah = detektor (abu-abu)

untuk wajah di wajah:
    x1 = face.left ()
    y1 = face.top ()
    x2 = wajah.right ()
    y2 = face.bottom ()
    landmark = prediktor (gambar = abu-abu, box = wajah)
    x = landmark. bagian (27) .x
    y = landmark. bagian (27) .y

   cv2.circle (img = img, center = (x, y), radius = 5, color = (0,255,0), thick = -1)

cv2.imshow (winname = "Wajah", mat = img)
cv2.waitKey (penundaan = 0)
cv2.destroyAllWindows ()

Kami melakukan peningkatan pada kode yang sama setiap kali, kali ini kami menggunakan fungsi prediktor secara berbeda . Yang menarik perhatian kami di sini adalah mengapa kami menggunakan angka 27?

Fungsi prediktor di sini akan mengembalikan objek yang berisi semua 68 poin yang sesuai dengan diagram wajah di awal posting. Perhatikan bahwa 27 titik tepat bertepatan di antara kedua mata. Jika semuanya bekerja dengan benar, Anda akan melihat titik hijau di antara mata di wajah.

Bintik hijau di antara kedua mata
Bintik hijau di antara kedua mata

Sekarang mari kita tunjukkan semua poin, bukan satu titik.

impor cv2
impor dlib

detektor = dlib.get_frontal_face_detector ()

predictor = dlib.shape.predictor ("shape_predictor_68_face_landmarks.dat")

img = cv2.imread ("photo.png")

abu-abu = cv2.cvtColor (src = img, kode = cv2.COLOR_BGR2GRAY)

wajah = detektor (abu-abu)

untuk wajah di wajah:
    x1 = face.left ()
    y1 = face.top ()
    x2 = wajah.right ()
    y2 = face.bottom ()
    landmark = prediktor (gambar = abu-abu, box = wajah)
    untuk n dalam rentang (0,68):
        x = landmark. bagian (n) .x
        y = landmark. bagian (n) .y

   cv2.circle (img = img, center = (x, y), radius = 5, color = (0,255,0), thick = -1)

cv2.imshow (winname = "Wajah", mat = img)
cv2.waitKey (penundaan = 0)
cv2.destroyAllWindows ()

Dan kami mendapatkan hasil seperti ini.

Tahap selanjutnya dan terakhir adalah bagian yang paling menarik! Kami akan menghubungkan webcam kami dan melakukan deteksi wajah secara real-time.

impor cv2
impor dlib

detektor = dlib.get_frontal_face_detector ()
predictor = dlib.shape_predictor ("shape_predictor_68_face_landmarks.dat")

cap = cv2.VideoCapture (0)
sementara Benar:
  _, frame = cap.read() 

  gray = cv2.cvtColor(src=frame, code=cv2.COLOR_BGR2GRAY) 
  faces = detector(gray) 
  for face in faces: 
      x1 = face.left() 
      y1 = face.top() 
      x2 = face.right() 
      y2 = face.bottom() 
      landmarks = predictor(image=gray, box=face) 
      for n in range(0,68): 
          x = landmarks.part(n).x 
          y = landmarks.part(n).y 
         cv2.circle(img=frame, center=(x,y), radius=2, color=(0,255,0),thickness=-1)
   cv2.imshow(winname="Face",mat=frame) 
   if cv2.waitKey(delay=1)== 27: 
            break
cap.release ()
cv2.destroyAllWindows ()

Dengan menggunakan kode di atas, Anda dapat mengaktifkan kamera komputer dan melakukan deteksi wajah secara real-time lewat Python. Hasilnya harus sebagai berikut:

cara kerja deteksi wajah menggunakan modul Python

[su_box title=”Baca Juga” style=”noise” box_color=”#a3e2fd” title_color=”#000000″]

[/su_box]

Seperti yang bisa kita lihat, beginilah cara kerja deteksi wajah menggunakan modul Python. Library OpenCV dan DLib adalah library yang sangat kuat yang memfasilitasi kerja dengan pembelajaran mesin dan computer vision.

[su_note]Jangan Lupa like Facebook Caraqu jika ingin cepat mendapatkan pemberitahuan.[/su_note]

Scroll to Top