23. Reconocimiento facial con inteligencia artificial (3)
- Hola a todos.Una vez finalizado el curso de google, vamos a entrenar un modelo para hacer un ejemplo de reconocimiento facial.Este ejemplo lo dividiremos en tres vídeos, que estructuraremos de la siguiente manera.
- En el tercer y último vídeo que podéis ver a continuación practicamos el reconocimiento facial a través de la imagen de la webcam. También veremos el código necesario para este propósito.
- Os dejo el código visto en el vídeo y un enlace de descarga con el proyecto completo:
# Abajo mostramos el rectángulo delimitado (adivinado) para los ojos debajo de las gafas de sol
# Usaremos el rectángulo delimitador para averiguar cómo asignar los lentes en los puntos clave
# glasses_triangle_vertices = np.array ([(280,220), (2800,220), (280,600)]). astype (np.float32)
thug_glasses_triangle_vertices = np.array([(65,10), (490,10), (65,70)]).astype(np.float32)
def thug_image(image):
faces = dameCaras(image)
image_info = obtenerPuntosClave(image, faces)
sunglasses = cv2.imread("imagenes/gafas.png", cv2.IMREAD_UNCHANGED)
alpha_channel = sunglasses[:,:,3]
for (face, keypoints) in image_info:
# We keep only the keypoints related to eyes (from 0 to 9)
eye_keypoints = keypoints[:10]
# Compute the bounding rectangle for the eyes
eye_boundingRect = cv2.boundingRect(np.array(eye_keypoints).astype(np.float32))
# Build the triangle vertices needed by cv2.getAffineTransform()
eyes_triangle_vertices = np.array([(eye_boundingRect[0],eye_boundingRect[1]),
(eye_boundingRect[0]+eye_boundingRect[2],eye_boundingRect[1]),
(eye_boundingRect[0],eye_boundingRect[1]+eye_boundingRect[3])]).astype(np.float32)
# Compute the affine transform matrix from the two sets of three points (glasses and eyes)
map_matrix = cv2.getAffineTransform(thug_glasses_triangle_vertices, eyes_triangle_vertices)
# Apply the affine transformation to the glasses
transformed_sunglasses = cv2.warpAffine(sunglasses, map_matrix, (image.shape[1], image.shape[0]))
# Build a binary mask of the pixels where the sunglasses are
transformed_sunglasses_mask = transformed_sunglasses[:,:,3] > 0
# Overwrite pixels in the original image with sunglasses pixels using their mask
image[:,:,:][transformed_sunglasses_mask] = transformed_sunglasses[:,:,0:3][transformed_sunglasses_mask]
return image
import cv2
import time
from keras.models import load_model
def laptop_camera_go():
# Crear instancia de captura de video.
cv2.namedWindow("Deteccion facial")
vc = cv2.VideoCapture(0)
# capturamos el primer fotograma.
if vc.isOpened():
rval, frame = vc.read()
else:
rval = False
# mantener el flujo de video abierto
while rval:
# trazar la imagen de la cámara con detecciones marcadas
frame = thug_image(frame)
cv2.imshow("Deteccion facial activada", frame)
# Funcionalidad de salida: presione cualquier tecla para salir del video de
#la computadora portátil
key = cv2.waitKey(20)
if key > 0: # exit by pressing any key
cv2.destroyAllWindows()
for i in range (1,5):
cv2.waitKey(1)
return
# obtener siguinete frame
time.sleep(0.05) # controlamos framerate
rval, frame = vc.read()
laptop_camera_go()
- Os dejo un enlace al proyecto completo. https://drive.google.com/open?id=1MEZaj7CdcKzFbFqKJQWvyUrhccXkckYZ