Realice el reconocimiento facial y extraiga 68 puntos característicos de la cara, ¡quizás esta biblioteca de Python pueda ayudarlo!

Escribí un artículo sobre la realización del reconocimiento facial antes. La tecnología utilizada en él se realiza llamando a la API de Baidu. Esta vez, usaremos el paquete dlib para realizar las funciones de detección de área facial y extracción de puntos característicos.

dlib encapsula muchos algoritmos excelentes de aprendizaje automático, que pueden realizar reconocimiento facial, detección, reconocimiento, búsqueda de objetivos de video y otras funciones. Es una biblioteca de código abierto desarrollada por C ++. También proporciona una interfaz Python para que llamemos directamente.

1, instalación dilb

El método de instalación del paquete dlib también se instala con pip, pero es diferente de otros paquetes en que la entrada

pip install dlib

Antes, necesitas instalar el paquete Cmake. La herramienta es principalmente para compilar dlib. El comando de instalación es similar a otros paquetes.

pip install Cmake

2. Realice el reconocimiento facial

Cuando utilice dlib para realizar la función de reconocimiento facial, primero defina un detector y una ventana de vista previa de la imagen:

detector = dlib.get_frontal_face_detector()
win = win = dlib.image_window()

Luego use la función load_rgb_image () para leer la imagen:

img = dlib.load_rgb_image(f)

A continuación, implementaremos la función principal de detección de rostros. Aquí debemos usar el detector definido anteriormente

dets,score,idx = detector.run(img,1-1)

img es la imagen que leemos. El segundo parámetro 1 representa el múltiplo de muestreo ascendente de la imagen. Cuanto mayor sea el valor, mejor será el resultado del reconocimiento final. -1 representa el ajuste del umbral de segmentación y un valor negativo indica que habrá más devuelto. Resultados de la prueba

Los dets devueltos devuelven un rectángulo del área de la cara, que representa los bordes izquierdo, superior, derecho e inferior. Tiene la forma de una tupla. Si se detecta una cara, es una tupla. Si hay varias caras, varias tupla se coloca en una lista; con esta coordenada del rectángulo, puede hacer lo siguiente:

  • Corta el área de la cara y extrae el área;
  • Marca de línea del área de la cara

La puntuación representa la probabilidad de detección de los resultados del reconocimiento facial. Cuanto mayor sea el resultado, mejor será el resultado del reconocimiento; si hay varias caras en una imagen, se devuelven varias probabilidades de detección y se almacenan en forma de lista; idx se utiliza para detectar una imagen El índice utilizado para varias caras se puede indexar

win.clear_overlay()
win.set_image(img)
win.add_overlay(dets)
dlib.hit_enter_to_continue

Finalmente, usamos la ventana de ganancia definida previamente para obtener una vista previa de la imagen, y los resultados son los siguientes:

Por supuesto, también puede usar OpenCV para delinear el esquema Los resultados del esquema de OpenCV son los siguientes (la razón de la diferencia de color es que OpenCV lee la secuencia de canales BGR);

Snipaste_2020-06-01_23-46-03.png

3. dlib extrae 68 puntos característicos de la cara

OpenCV también se puede utilizar para el reconocimiento facial, pero el efecto no es tan bueno como el de dlib. Además de la detección de estructura alámbrica mencionada anteriormente, dlib también puede extraer directamente 68 puntos característicos de la cara y devolverlos como coordenadas;

Con las coordenadas de estos 68 puntos característicos, puede ayudarnos fácilmente a realizar la alineación facial, la fusión y otras aplicaciones. Echemos un vistazo al efecto delineado con dlib.

Snipaste_2020-06-02_14-48-24.png

La diferencia con el reconocimiento facial es que se debe agregar un detector de formas aquí. El detector de formas necesita los archivos proporcionados por el sitio web oficial y coloca la información de peso entrenado en él, que se puede usar directamente. El código de implementación de la función anterior es el siguiente :

import dlib
import os
import cv2

predictor_path  = "E:/shape_predictor_68_face_landmarks.dat"#权重文件路径
png_path = "E:/ceshi.png"

detector = dlib.get_frontal_face_detector()
#相撞
predicator = dlib.shape_predictor(predictor_path)
win = dlib.image_window()
img =  dlib.load_rgb_image(png_path)
win.clear_overlay()
win.set_image(img1)

for k,d in enumerate(dets):
    print("Detection {}  left:{}  Top: {} Right {}  Bottom {}".format(
        k,d.left(),d.top(),d.right(),d.bottom()
    shape = predicator(img,d)
    #Get the landmarks/parts for face in box d
    print("Part 0:{},Part 1 :{}".format(shape.part(0),shape.part(1)))
    win.add_overlay(shape)

win.add_overlay(dets)
dlib.hit_enter_to_continue()

El punto de coordenadas se puede obtener mediante la función de parte (índice)

Los puntos de coordenadas anteriores también se pueden delinear en la imagen original a través de OpenCV y anotar con el texto. El efecto es el siguiente:

Snipaste_2020-06-02_15-02-38.png

Adjunta el código completo:

import dlib
import os
import cv2


predictor_path  = "E:/shape_predictor_68_face_landmarks.dat"
png_path = "E:/ceshi.png"


detector = dlib.get_frontal_face_detector()
#相撞
predicator = dlib.shape_predictor(predictor_path)
win = dlib.image_window()
img1 = cv2.imread(png_path)

dets = detector(img1,1)
print("Number of faces detected : {}".format(len(dets)))
for k,d in enumerate(dets):
    print("Detection {}  left:{}  Top: {} Right {}  Bottom {}".format(
        k,d.left(),d.top(),d.right(),d.bottom()
    ))
    lanmarks = [[p.x,p.y] for p in predicator(img1,d).parts()]
    for idx,point in enumerate(lanmarks):
        point = (point[0],point[1])
        cv2.circle(img1,point,5,color=(0,0,255))
        font = cv2.FONT_HERSHEY_COMPLEX_SMALL
        cv2.putText(img1,str(idx),point,font,0.5,(0,255,0),1,cv2.LINE_AA)
        #对标记点进行递归;

cv2.namedWindow("img",cv2.WINDOW_NORMAL)
cv2.imshow("img",img1)
cv2.waitKey(0)

4. Pequeño resumen

Lo anterior es una breve introducción al paquete dlib. En términos de aplicaciones de reconocimiento facial, dlib funciona bastante bien. Si está interesado, puede ir al sitio web oficial para ver la introducción detallada de dlib y seguirla en su tiempo libre. .

El próximo artículo presentará el uso de OpenCV para lograr la tecnología de fusión de caras, que utilizará las coordenadas de 68 puntos característicos de la cara mencionada en este artículo, que es una extensión de este artículo, y los amigos interesados ​​pueden prestar atención a una ola con anticipación. .

El método para obtener el archivo de peso mencionado en el artículo se puede obtener en la cuenta oficial : Xiao Zhang Python backstage respuesta clave: dlib

Link de referencia:

1, http: //dlib.net/face_landmark_detection.py.html

2, https: //blog.csdn.net/qq_39438636/article/details/79304130

3, http: //dlib.net/

Supongo que te gusta

Origin blog.csdn.net/weixin_42512684/article/details/106582447
Recomendado
Clasificación