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.
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.
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:
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.
Pengekstrakan ciri muka: Untuk setiap imej muka, kita perlu mengekstrak cirinya. Kita boleh menggunakan kaedah dalam contoh kod kedua untuk mengekstrak ciri muka.
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.
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!