Spaces:
Build error
Build error
File size: 4,319 Bytes
ba3ed11 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# -*- coding: utf-8 -*-
"""
Jos茅 Carlos Machicao
GestioDin谩mica
Fecha de producci贸n: 2021_10
Fecha de actualizaci贸n 2022_07
Ubicaci贸n Original: PythonScripts/gdmk_facerecog/
"""
import streamlit as st
import face_recognition
from PIL import Image
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import datetime
import base64
# BODY
st.image('gdmk.png', width=150)
st.subheader('Aplicativos de Reconocimiento Facial')
st.title('Comparaci贸n de Identidades')
nom_oper = st.text_input('Nombre de Operador(a):')
st.subheader('**Procedimiento: Comparaci贸n de Identidades**')
up_base = st.file_uploader('Cargue Archivo Base Recibido de su Supervisor: ')
if up_base is not None:
base = pd.read_pickle(up_base)
st.write(base.shape)
st.write(base.lista)
# 2. CARGA DE FOTOS EVENTO
st.subheader('**Procedimiento: Carga de Pantallazos de Evento**')
up_evento = st.file_uploader('Elija pantallazos del evento: ', accept_multiple_files=True)
if len(up_evento)==0:
mensaje='Todav铆a no se han cargado im谩genes.'
st.write(mensaje)
else:
mensaje='Confirmaci贸n, se han cargado '+str(len(up_evento))+' im谩genes.'
st.write(mensaje)
caras_embed = []
for j, pic in enumerate(up_evento):
ima = face_recognition.load_image_file(pic)
face_locs = face_recognition.face_locations(ima)
face_enco = face_recognition.face_encodings(ima)
for k, facex in enumerate(face_enco):
top, right, bottom, left = face_locs[k]
face_frame = ima[top:bottom, left:right]
pil_image = Image.fromarray(face_frame)
pil_image_100 = pil_image.resize((100,100))
rotulox = 'nom_' + str(j) + '_' + str(k) + '.jpg'
#pil_image_100.save(rotulox)
caras_embed.append([rotulox, facex, pil_image_100])
caras_evento_code_df = pd.DataFrame(caras_embed)
caras_evento_code_df.columns = ['rotulo', 'face_embed', 'image']
# 3. COMPARACI脫N
st.subheader('**Procedimiento: Comparaci贸n**')
codesx = base.codigos
lista_fotos = base.lista
resultados = []
for face in caras_evento_code_df.face_embed:
matches = face_recognition.compare_faces(list(codesx), face)
timestamp = datetime.datetime.now()
try:
indice = int(np.where(matches)[0])
halla = lista_fotos[indice]
resultados.append([timestamp, halla])
except:
resultados.append([timestamp, 'Desconocido'])
timestamp = str(datetime.datetime.now()).replace(':','-')
resultados_df = pd.DataFrame(resultados)
resultados_df.columns = ['timestamp', 'nombre']
resultados_df['arch_evento'] = caras_evento_code_df.rotulo
resultados_df['imagenes'] = caras_evento_code_df.image
resultados_df.to_csv('resultados/resultados_'+timestamp+'.csv')
st.dataframe(resultados_df.drop(['imagenes'], axis=1))
asistentes = resultados_df.nombre
asistencia = []
for nom in base.lista:
if nom in list(asistentes):
asistencia.append([nom, 'Asisti贸'])
else:
asistencia.append([nom, 'No Asisti贸'])
asist_df = pd.DataFrame(asistencia)
st.dataframe(asist_df)
n_fig = 10
fig, ax = plt.subplots(1, n_fig, figsize=(21, 2))
for i in range(n_fig):
if i > len(resultados_df)-1:
img = Image.open('void.jpg')
ax[i].imshow(img)
ax[i].axis('off')
else:
img = resultados_df.imagenes.iloc[i]
ax[i].imshow(img)
ax[i].set_title(str(resultados_df.nombre.iloc[i]))
ax[i].axis('off')
timestamp = str(datetime.datetime.now()).replace(':','-')
plt.savefig('resultados_'+timestamp+'.jpg')
st.image(Image.open('resultados_'+timestamp+'.jpg'), width=800)
#st.pyplot(fig)
st.write('Se ha guardado los archivos en el folder resultados.')
resultados_df.to_csv('resultados/verificacion.csv')
asist_df.to_csv('resultados/asistencia.csv')
c1, c2, c3 = st.columns(3)
with c1:
st.write(' ')
with c2:
st.write(' ')
with c3:
st.write(' ')
st.image('gdmk.png', width=100, caption='Designed and Powered by GestioDin谩mica') |