Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menggunakan Python untuk melaksanakan fungsi pengecaman muka?

Bagaimana untuk menggunakan Python untuk melaksanakan fungsi pengecaman muka?

WBOY
WBOYke hadapan
2023-04-20 22:16:143051semak imbas

1. Pengesanan Muka

Pengesanan muka merujuk kepada pengesanan lokasi wajah daripada imej atau video. Kami menggunakan perpustakaan OpenCV untuk melaksanakan fungsi pengesanan muka. OpenCV ialah perpustakaan penglihatan komputer popular yang menyokong pelbagai fungsi pemprosesan imej dan video serta berjalan pada berbilang platform.

Berikut ialah contoh kod pengesanan muka dalam Python:

import cv2

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)

for (x,y,w,h) in faces:
    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Dalam contoh kod ini, kami menggunakan kelas CascadeClassifier OpenCV untuk memuatkan kelas bernama "haarcascade_frontalface_default.xml" Classifier, ini pengelas disertakan dengan OpenCV dan digunakan untuk pengesanan muka. Kami kemudian membaca imej yang dipanggil "test.jpg" dan menukarnya kepada imej skala kelabu. Seterusnya, kami menggunakan fungsi detectMultiScale untuk mengesan wajah dalam imej. Fungsi detectMultiScale akan mengembalikan senarai segi empat tepat yang mengandungi kedudukan dan saiz muka. Akhir sekali, kami melukis segi empat tepat dalam imej asal untuk menandakan wajah yang dikesan.

2. Pengekstrakan ciri muka

Pengeluaran ciri muka merujuk kepada pengekstrakan beberapa ciri daripada imej muka, seperti mata, hidung, mulut, dsb. Kami menggunakan perpustakaan Dlib untuk melaksanakan fungsi pengekstrakan ciri muka. Dlib ialah perpustakaan C++ yang popular untuk pembelajaran mesin, penglihatan komputer dan pemprosesan imej. Walaupun Dlib ditulis dalam C++, ia juga menyediakan antara muka Python Kita boleh menggunakan Python untuk memanggil fungsi perpustakaan Dlib.

Berikut ialah contoh kod untuk pengekstrakan ciri muka dalam Python:

import dlib
import cv2

detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')

img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = detector(gray)

for face in faces:
    landmarks = predictor(gray, face)
    for n in range(68):
        x = landmarks.part(n).x
        y = landmarks.part(n).y
        cv2.circle(img, (x, y), 2, (255, 0, 0), -1)

cv2.imshow("Output", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Dalam contoh kod ini, kami menggunakan fungsi get_frontal_face_detector pustaka Dlib dan kelas shape_predictor untuk memuatkan fail dipanggil " shape_predictor_68_face_landmarks.dat" pengekstrak ciri muka. Kami kemudian membaca imej yang dipanggil "test.jpg" dan menukarnya kepada imej skala kelabu. Seterusnya, kami menggunakan fungsi pengesan untuk mengesan wajah dalam imej dan fungsi peramal untuk mengekstrak ciri wajah. Fungsi peramal akan mengembalikan senarai yang mengandungi 68 koordinat titik ciri muka. Akhir sekali, kami melukis bulatan dalam imej asal untuk menandakan titik ciri muka.

3. Pengecaman muka

Pengecaman muka merujuk kepada membandingkan ciri yang diekstrak dengan maklumat muka dalam pangkalan data untuk mengenal pasti identiti wajah. Kami menggunakan perpustakaan Dlib untuk melaksanakan fungsi pengecaman muka. Proses pelaksanaan khusus adalah seperti berikut:

  1. Mengumpul data muka: Kami perlu mengumpul beberapa data muka sebagai pangkalan data kami. Kita boleh menggunakan kamera untuk menangkap data ini dan menyimpannya pada cakera keras.

  2. Pengekstrakan ciri muka: Untuk setiap imej muka, kita perlu mengekstrak cirinya. Kita boleh menggunakan kaedah dalam contoh kod kedua untuk mengekstrak ciri muka.

  3. Membina model pengecaman muka: Kita perlu menggunakan ciri muka yang diekstrak untuk membina model pengecaman muka. Kita boleh mencapainya menggunakan modul pengenalan_muka perpustakaan Dlib. Modul pengecaman_muka menyediakan fungsi yang dipanggil "pengekodan_muka" yang menukar imej muka kepada vektor yang mengandungi 128 ciri. Kami boleh menyimpan vektor ini ke cakera keras sebagai pangkalan data muka kami.

  4. Pengecaman muka: Untuk imej muka dikenali, kita boleh menggunakan kaedah dalam contoh kod kedua untuk mengekstrak ciri-cirinya. Kami kemudiannya boleh menggunakan fungsi compare_faces modul pengecaman_muka untuk membandingkan ciri yang diekstrak dengan ciri dalam pangkalan data wajah kami. Kalau padan maknanya kita dah kenal pasti muka tu.

Berikut ialah contoh kod untuk pengecaman muka dalam Python:

import cv2
import dlib
import face_recognition

known_face_encodings = []
known_face_names = []

# Load the known faces and embeddings
for name in ["person_1", "person_2", "person_3"]:
    image = face_recognition.load_image_file(f"{name}.jpg")
    face_encoding = face_recognition.face_encodings(image)[0]
    known_face_encodings.append(face_encoding)
    known_face_names.append(name)

# Initialize some variables
face_locations = []
face_encodings = []
face_names = []
process_this_frame = True

video_capture = cv2.VideoCapture(0)

while True:
    # Grab a single frame of video
    ret, frame = video_capture.read()

    # Resize frame of video to 1/4 size for faster face recognition processing
    small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)

    # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses)
    rgb_small_frame = small_frame[:, :, ::-1]

    # Only process every other frame of video to save time
    if process_this_frame:
        # Find all the faces and face encodings in the current frame of video
        face_locations = face_recognition.face_locations(rgb_small_frame)
        face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations)

        face_names = []
        for face_encoding in face_encodings:
            # See if the face is a match for the known face(s)
            matches = face_recognition.compare_faces(known_face_encodings, face_encoding)
            name = "Unknown"

            # If a match was found in known_face_encodings, just use the first one.
            if True in matches:
                first_match_index = matches.index(True)
                name = known_face_names[first_match_index]

            face_names.append(name)

    process_this_frame = not process_this_frame

    # Display the results
    for (top, right, bottom, left), name in zip(face_locations, face_names):
        # Scale back up face locations since the frame we detected in was scaled to 1/4 size
        top *= 4
        right *= 4
        bottom *= 4
        left *= 4

        # Draw a box around the face
        cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)

        # Draw a label with a name below the face
        cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)
        font = cv2.FONT_HERSHEY_DUPLEX
        cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)

    # Display the resulting image
    cv2.imshow('Video', frame)

    # Hit 'q' on the keyboard to quit!
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Release handle to the webcam
video_capture.release()
cv2.destroyAllWindows()

Dalam contoh kod ini, kami mula-mula memuatkan beberapa data muka dan menggunakan face_recognition Modul menukar mereka ke dalam vektor ciri muka. Kemudian, kami menggunakan fungsi cv2.VideoCapture untuk membaca strim video kamera dan menggunakan modul face_recognition untuk mengecam wajah dalam strim video. Akhir sekali, kami menggunakan fungsi OpenCV untuk memaparkan hasil pengecaman muka dalam strim video.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan Python untuk melaksanakan fungsi pengecaman muka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam