Add reconocimiento_facial.py
Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
This commit is contained in:
parent
cf74c0f3fb
commit
862cb96ca1
BIN
dia_14/FotoA.jpg
Normal file
BIN
dia_14/FotoA.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 79 KiB |
BIN
dia_14/FotoB.jpg
Normal file
BIN
dia_14/FotoB.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 114 KiB |
BIN
dia_14/FotoC.jpg
Normal file
BIN
dia_14/FotoC.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 88 KiB |
BIN
dia_14/FotoD.jpg
Normal file
BIN
dia_14/FotoD.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 58 KiB |
99
dia_14/reconocimiento_facial.py
Normal file
99
dia_14/reconocimiento_facial.py
Normal file
@ -0,0 +1,99 @@
|
||||
"""
|
||||
Reconocimiento facial
|
||||
|
||||
Bibliotecas:
|
||||
cmake
|
||||
dlib
|
||||
face-recognition
|
||||
numpy
|
||||
opencv-python
|
||||
|
||||
"""
|
||||
|
||||
import cv2
|
||||
import face_recognition as fr
|
||||
|
||||
# Cargar imágenes
|
||||
foto_control = fr.load_image_file('FotoD.jpg')
|
||||
foto_prueba = fr.load_image_file('FotoC.jpg')
|
||||
|
||||
# Nos aseguramos que el formato de la foto es rgb
|
||||
# Las transformamos de BGR --> RGB
|
||||
foto_control = cv2.cvtColor(foto_control, cv2.COLOR_BGR2RGB)
|
||||
foto_prueba = cv2.cvtColor(foto_prueba, cv2.COLOR_BGR2RGB)
|
||||
|
||||
# Localizar cara control
|
||||
lugar_cara_A = fr.face_locations(foto_control)[0]
|
||||
# Podríamos ver las coordenadas
|
||||
# print(lugar_cara_A)
|
||||
|
||||
# Codificar la cara
|
||||
cara_codificada_A = fr.face_encodings(foto_control)[0]
|
||||
|
||||
|
||||
# Localizar cara control
|
||||
lugar_cara_B = fr.face_locations(foto_prueba)[0]
|
||||
|
||||
# Codificar la cara
|
||||
cara_codificada_B = fr.face_encodings(foto_prueba)[0]
|
||||
|
||||
# Marcar donde está la cara con un rectángulo
|
||||
# Añadimos la foto y los índices para marcar las coordenadas
|
||||
# del vértice superior izquiero de la cara y el
|
||||
# del vértice inferior derecho.
|
||||
# Anadimos el color del rectangulo en verde
|
||||
# y el borde
|
||||
cv2.rectangle(
|
||||
foto_control,
|
||||
(lugar_cara_A[3], lugar_cara_A[0]),
|
||||
(lugar_cara_A[1], lugar_cara_A[2]),
|
||||
(0, 255, 0),
|
||||
2
|
||||
)
|
||||
|
||||
cv2.rectangle(
|
||||
foto_prueba,
|
||||
(lugar_cara_B[3], lugar_cara_B[0]),
|
||||
(lugar_cara_B[1], lugar_cara_B[2]),
|
||||
(0, 255, 0),
|
||||
2
|
||||
)
|
||||
|
||||
|
||||
# Realizar comparación
|
||||
# El método espera recibir una lista.
|
||||
# Como tenemos un único objecto lo ponemos entre corchetes
|
||||
# para que piense que es una lista de un solo objeto.
|
||||
# El tercer valor es la torelancia de distancia de comparación
|
||||
resultado = fr.compare_faces([cara_codificada_A], cara_codificada_B)
|
||||
# print(resultado)
|
||||
|
||||
|
||||
# Medida de la distancia de comparación
|
||||
# por defecto es 0.6 el valor para admitir coincidencia con True
|
||||
# Esto nos indica lo cerca que está
|
||||
distancia = fr.face_distance([cara_codificada_A], cara_codificada_B)
|
||||
# print(distancia)
|
||||
|
||||
|
||||
# Mostrar resultado con texto
|
||||
# Los parámetros son la imagén, el texto a introducir,
|
||||
# la ubicación del texto, la fuente, la escala,
|
||||
# el color y el grosor
|
||||
cv2.putText(
|
||||
foto_prueba,
|
||||
f'{resultado} {distancia.round(2)}',
|
||||
(50, 50),
|
||||
cv2.FONT_HERSHEY_COMPLEX,
|
||||
1,
|
||||
(0, 255, 0),
|
||||
2
|
||||
)
|
||||
|
||||
|
||||
# Mostrar imágenes
|
||||
cv2.imshow('Foto Control', foto_control)
|
||||
cv2.imshow('Foto Prueba', foto_prueba)
|
||||
|
||||
# Las imágenes se cierran, se necesitan mantener el programa abierto
|
||||
cv2.waitKey(0)
|
Loading…
Reference in New Issue
Block a user