Xiaobai puede aprender a usar Python para el reconocimiento facial, ¡y las 30 líneas de código se explican claramente!

Treinta líneas de código Python para lograr un reconocimiento facial simple


1. Introducción a la biblioteca


opencv, face_recognition, numpy y dlib
Nota: La
velocidad de instalación de opencv puede ser demasiado lenta, debe reemplazar la fuente de espejo doméstica, referencia: https://blog.csdn.net/X_xs_mxt/article/details/107069379
viene con Python3.7, versión de 64 bits dlib whl ruta de descarga:
enlace: https://pan.baidu.com/s/1jOmwQ2OpJcbyYPSMisIFlg
código de extracción: to50

Muchas personas aprenden Python y después de dominar la gramática básica, no saben dónde encontrar casos para comenzar.

Muchas personas que han realizado estudios de casos no saben cómo adquirir conocimientos más avanzados.

Entonces, para estos tres tipos de personas, les proporcionaré una buena plataforma de aprendizaje, ¡gratis para recibir tutoriales en video, libros electrónicos y el código fuente del curso!

Grupo QQ: 701698587

En segundo lugar, la instalación de la biblioteca

 

pip install opencv-python
pip install face_recognition
pip install numpy



La biblioteca dlib debe instalarse en la ruta del archivo whl

pip install dlib-19.17.99-cp37-cp37m-win_amd64.whl



Tres, una breve introducción a la biblioteca face_recognition


El método load_image_file de face_recognition cargará la imagen y devolverá un tipo de datos ndarray

face_path = "C://Users//25103//Desktop//Python人脸识别//face//徐先生.jpg"
image = face_recognition.load_image_file(face_path)



El método face_encoding de face_recognition puede extraer características faciales de los datos de tipo ndarray devueltos y puede extraer múltiples características al mismo tiempo, y el valor de retorno es un tipo de lista.

face_encoding = face_recognition.face_encodings(image)[0]



El método face_location de face_recognition puede obtener la ubicación de todas las caras en la imagen, y el valor de retorno es una lista

face_locations = face_recognition.face_locations(rgb_frame)



Cuatro, implementación de código y explicación de comentarios

# coding = utf-8
import dlib
import cv2
import face_recognition
import os

# 创建视频对象
video_capture = cv2.VideoCapture(0)

# 加载需要识别的人脸图片(这张图片需要仅有一张脸)
# face_recognition的load_image_file方法会加载图片,并返回一个ndarray类型的数据
# ndarray类型就是NumPy的数组类型,其中的元素类型可以一致也可以不一致
face_path = "C://Users//25103//Desktop//Python人脸识别//face//徐先生.jpg"
image = face_recognition.load_image_file(face_path)

# face_recognition的face_encoding方法,可从返回的ndarray类型数据中提取人脸特征,可同时提取多个特征,返回值为列表类型
# 因为照片中只有一个人脸,所以我们取列表的第一个值
face_encoding = face_recognition.face_encodings(image)[0]

while True:
    # 从视频对象中读取一帧照片
    ret,frame = video_capture.read()
    # 将照片缩小,加快处理速度,这里将其缩小为原图的1/4
    # frame = cv2.rectangle(frame,(0,0),fx=0.25,fy=0.25)
    # 因为cv2用的是BGR色彩,我们组要将其转化为RGB进行处理
    rgb_frame = frame[:,:,::-1] # 列表转置操作

    # face_recognition的face_location方法可以获取图片中所有人脸的位置,其返回值为一个列表
    face_locations = face_recognition.face_locations(rgb_frame)
    print("共从视频中找到了{}张人脸".format(len(face_locations)))

    # 获取视频中所有人脸的特征
    face_encodings = face_recognition.face_encodings(rgb_frame,face_locations)

    for face in face_encodings:
        # 比较两个特征值——encoding1与encoding2,匹配返回True,否则返回False。tolerance越低,顾名思义,容错率越低,返回值为列表类型
        match = face_recognition.compare_faces([face_encoding],face,tolerance=0.4)
        name = "不认识的人"

        if match[0]:
            # face为图片名称
            name = os.path.basename(face_path[0:-4])
        print("找到了{}".format(name))


 

Supongo que te gusta

Origin blog.csdn.net/Python_kele/article/details/115273771
Recomendado
Clasificación