Spaces:
Build error
Build error
File size: 5,056 Bytes
ba3ed11 1a968b1 ba3ed11 3a8e48b ba3ed11 ddbfa30 ba3ed11 ddbfa30 ba3ed11 3a8e48b ba3ed11 3a8e48b 902de3e c168c2e 202dcbe ba3ed11 fb425bd 3a8e48b 202dcbe 3a8e48b 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 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
# -*- 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
from io import BytesIO
from pyxlsb import open_workbook as open_xlsb
# 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('**Carga de archivo PKL con Tensores Preentrenados**')
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('**Carga de Archivos de Imagen Conteniendo Caras**')
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
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)
def convierte_excel(df):
output = BytesIO()
writer = pd.ExcelWriter(output, engine='xlsxwriter')
df.to_excel(writer, index=False, sheet_name='data_extraida')
workbook = writer.book
worksheet = writer.sheets['data_extraida']
format1 = workbook.add_format({'num_format': '0.00'})
worksheet.set_column('A:A', None, format1)
writer.save()
processed_data = output.getvalue()
writer.close()
return processed_data
csv = asist_df.to_csv(index=False)
st.download_button(label='馃摡 Descargar CSV', data=csv,
file_name = 'df_'+timestamp+'.csv')
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') |