introducir
Deepface es un marco ligero de reconocimiento facial y análisis de atributos faciales (edad, género, emoción y etnia) para Python. Es un marco híbrido de reconocimiento facial.
deepface contiene modelos de última generación: VGG-Face, Google FaceNet, OpenFace, Facebook DeepFace y DeepIDArcFaceDlib. Todos estos modelos se empaquetan juntos, y Deepface tiene una tasa de precisión del 97 % para el reconocimiento facial y se ha demostrado que tiene más éxito en la detección de rostros que los marcos generales de reconocimiento facial. Facebook usa Deepface para evitar la suplantación de identidad y el robo de identidad en su plataforma.
Una representación gráfica: (fuente sitio web oficial)
Puntuación para cada modelo:
Construcción del entorno
Mi entorno de software:
- pycharm2021
- pitón3.9.6
Instalación del módulo:
pip install deepface
verificación facial
Compare las dos imágenes para ver si son la misma persona. La imagen es:
se pueden implementar las siguientes tres líneas de código. Al ejecutarlo, se descargará automáticamente el archivo de peso relevante vgg_face_weights.h5 para usted:
from deepface import DeepFace
verification = DeepFace.verify(img1_path = "img1.jpg", img2_path = "img2.jpg")
print(verification)
El resultado es el siguiente:
{
'verified': True, 'distance': 0.1600321561950978,
'threshold': 0.4, 'model': 'VGG-Face',
'detector_backend': 'opencv', 'similarity_metric': 'cosine'}
El tipo es un diccionario, analicemos los siguientes significados:
- verificado=Verdadero: Indica la misma persona. Este es el resultado de la verificación.
- parámetro de distancia: cuanto menor sea el valor, mayor será la similitud, cuanto mayor sea la menor similitud.
- modelo: El modelo predeterminado VGG-Face. También puedes probar otros modelos.
- detector_backend: significa tener soporte opencv
También puede configurar el modelo usted mismo, por ejemplo, en OpenFace:
rom deepface import DeepFace
models=["VGG-Face", "Facenet", "Facenet512", "OpenFace", "DeepFace", "DeepID", "ArcFace", "Dlib"]
verification = DeepFace.verify(img1_path = "img.png", img2_path = "img_1.png",model_name=models[3])
print(verification)
El funcionamiento es el siguiente:
ver claro:
el primero, la ubicación de la descarga:
To: C:\Users\hp\.deepface\weights\openface_weights.h5
El segundo es el resultado:
{
'verified': False, 'distance': 0.17080708434087122,
'threshold': 0.1, 'model': 'OpenFace',
'detector_backend': 'opencv',
'similarity_metric': 'cosine'}
búsqueda de cara
from deepface import DeepFace
img_path1 = r'img.png'
img_path2 = r'img_1.png'
img_path1 = img_path1.replace('\\', '/')
img_path2 = img_path2.replace('\\', '/')
models=["VGG-Face", "Facenet", "Facenet512", "OpenFace", "DeepFace", "DeepID", "ArcFace", "Dlib"]
db_path = r'data'
db_path = db_path.replace('\\', '/')
recognition = DeepFace.find(img_path = img_path2, db_path = db_path, model_name = models[0], enforce_detection=False)
print(recognition)
La salida es la siguiente:
ind function lasts 4.07146143913269 seconds
identity VGG-Face_cosine
0 data/img_2.png 0.160032
1 data/img.png 0.265129
Identidad significa identidad, VGG-Face_cosine significa similitud, obtendrá el gráfico de similitud más alto.
¿Por qué establecer enforce_detection=False? Si no se establece, se informará un error y no se detectará la cara, porque Deepface obtendrá todas las fotos en la carpeta de fotos especificada por db_path, y almacenará las características de cada foto en la misma ruta (la extensión se llama pkl), y luego utilícelo para comparar la próxima vez. No es necesario volver a ejecutar el modelo para obtener características. Sin embargo, si hay fotos con caras que no se pueden detectar, si enforce_detection=False, se producirá un error y se detendrá la ejecución, para recordarnos que hay fotos con caras que no se pueden detectar en la carpeta, vuelva a revisar. Después de confirmar que las fotos en la carpeta son correctas, podemos configurar enforce_detection=False para decirle a Deepface que no se necesita ningún recordatorio para mejorar la velocidad de la ejecución posterior.
Reconocimiento de atributos faciales (edad, etiqueta, género, raza)
DeepFace viene con un poderoso módulo de análisis de atributos faciales para predicción de edad, género, emoción y raza/etnicidad. Mientras que el módulo de reconocimiento facial de DeepFace encapsula los modelos de última generación existentes, su análisis de atributos faciales tiene su propio modelo. Actualmente, el error absoluto medio de los modelos de predicción de edad es de +/- 4,6 años; los modelos de predicción de género tienen una precisión del 97 %.
Deepface también proporciona análisis de atributos faciales que incluyen , , edad (incluyendo ira, miedo, neutral, triste, asqueado, feliz y sorprendido) y (incluyendo predicciones asiáticas, caucásicas, del Medio Oriente, indias, latinas y negras).
Probemos la edad de los siguientes dioses masculinos:
from deepface import DeepFace
analysis = DeepFace.analyze(img_path="img.png", actions=["age", "gender", "emotion", "race"])
print(analysis)
El resultado es:
Descripción: Edad, 21; Género, Masculino; Expresión, Natural; Raza: Asiática (oficialmente solo puede proporcionar personas de qué continente)
Complemento: si encuentra un error OSError: no se puede abrir el archivo (archivo truncado: eof = 5865472, sblock->base_addr = 0, store_eof = 588, puede ir a la ruta de pesos para eliminar el original y volver a ejecutar el código para descargar el archivo,
como yo Error:
Simplemente vuelva a ejecutar el código para descargar, a veces encontrará fallas en la descarga: debido a que la parte que se conecta no responde correctamente después de un período de tiempo o el host conectado no responde, el intento de conexión falla, puede intentarlo varias veces (incluso una docena de veces), después de todo github Algunos estudiantes no son estables en la comprensión. Si no funciona o informa un error, descárguelo manualmente, uso el comando wegt para descargar, por ejemplo:
use el siguiente comando para descargar al local (o haga clic directamente en el enlace para descargar):
wget -c https://github.com/serengil/deepface_models/releases/download/v1.0/gender_model_weights.h5
Después de descargarlo, colóquelo en la carpeta de pesos de la siguiente manera:
identificación de transmisión de video
from deepface import DeepFace
a=DeepFace.stream()
print(a)
Referirse a
https://pypi.org/project/deepface/
https://www.cs.toronto.edu/~ranzato/publications/taigman_cvpr14.pdf