recon_caras / app.py
jcmachicao's picture
Update app.py
3a8e48b
raw
history blame
5.04 kB
# -*- 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('**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
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
df_xlsx = convierte_excel(asist_df)
st.download_button(label='馃摡 Descargar XLSX', data=df_xlsx,
file_name = 'resultados_'+timestamp+'.xlsx')
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')