Python - Registro de Asistencia Facial

 
Vista:
sin imagen de perfil

Registro de Asistencia Facial

Publicado por Marcos (1 intervención) el 17/10/2022 15:30:54
Hola amigos, soy nuevo en Python y estoy programando un registro de asistencias con marca facial.
Necesito que el usuario registre 4 entradas. Inicio de jornada, hora de colación, fin de hora de colación y fin de la jornada laboral. MI código solo registra 1 entrada. Alguna acotación para poder hacer esa mejora?
Adjunto mi código.
De Antemano muchas gracias!

import numpy
from cv2 import cv2
import face_recognition as fr
import os
from datetime import datetime

# crear base de datos
ruta = 'Empleados'
mis_imagenes = []
nombres_empleados = []
lista_empleados = os.listdir(ruta)

for nombre in lista_empleados:
imagen_actual = cv2.imread(f'{ruta}/{nombre}')
mis_imagenes.append(imagen_actual)
nombres_empleados.append(os.path.splitext(nombre)[0])
print(nombres_empleados)


# codificar imagenes
def codificar(imagenes):
# crear una lista
lista_codificada = []

# pasar todas las imagenes a rgb
for imagen in imagenes:
imagen = cv2.cvtColor(imagen, cv2.COLOR_BGR2RGB)

# codificar
codificado = fr.face_encodings(imagen)[0]

# Agregar a la lista
lista_codificada.append(codificado)
# devolver lista codificada
return lista_codificada


# registrar los ingresos
def registrar_ingresos(persona):
f = open('registro.csv', 'r+')
lista_datos = f.readlines()
nombres_registro = []

for linea in lista_datos:
ingreso = linea.split(',')
nombres_registro.append(ingreso[0])

if persona not in nombres_registro:
ahora = datetime.now()
string_ahora = ahora.strftime('%H:%M:%S')
f.writelines(f'\n{persona}, {string_ahora}')


lista_empleados_codificada = codificar(mis_imagenes)

# Tomar una imagen de camara web
captura = cv2.VideoCapture(0, cv2.CAP_DSHOW)

# Leer imagen de la camara
exito, imagen = captura.read()

if not exito:
print("No se ha podido tomar la captura")

else:
# reconocer cara en captura
cara_captura = fr.face_locations(imagen)

# codificar cara capturada
cara_captura_codificada = fr.face_encodings(imagen, cara_captura)

# buscar coincidencias
for caracodif, caraubic in zip(cara_captura_codificada, cara_captura):
coincidencias = fr.compare_faces(lista_empleados_codificada, caracodif)
distancias = fr.face_distance(lista_empleados_codificada, caracodif)
print(distancias)

indice_coincidencia = numpy.argmin(distancias)

# Mostrar coincidencias
if distancias[indice_coincidencia] > 0.6:
print("No coincide con ninguno de nuestros empleados")
else:
# BUscar el nombre del empleado encontrado
nombre = nombres_empleados[indice_coincidencia]
y1, x2, y2, x1 = caraubic
cv2.rectangle(imagen, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.rectangle(imagen, (x1, y2 - 35), (x2, y2), (0, 255, 0), cv2.FILLED)
cv2.putText(imagen, nombre, (x1 + 6, y2 - 6), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255))

registrar_ingresos(nombre)

# mostrar la imagen obtenida
cv2.imshow("Imagen web", imagen)

# mantener ventana abierta
cv2.waitKey(0)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder