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