jcmachicao commited on
Commit
bb961b4
1 Parent(s): b380a73

Upload app_compara.py

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