jarondon82 commited on
Commit
c95c949
·
1 Parent(s): c48afaa

Implementar guardado y carga de imágenes faciales de referencia en la base de datos

Browse files
Files changed (1) hide show
  1. face_database_utils.py +52 -0
face_database_utils.py CHANGED
@@ -36,10 +36,18 @@ def save_face_database(database):
36
  serializable_db[name]['embeddings'] = [emb.tolist() if isinstance(emb, np.ndarray) else emb for emb in info['embeddings']]
37
  serializable_db[name]['models'] = info['models']
38
  serializable_db[name]['count'] = info['count']
 
 
 
 
39
  elif 'embedding' in info:
40
  # Formato antiguo
41
  serializable_db[name]['embedding'] = info['embedding'].tolist() if isinstance(info['embedding'], np.ndarray) else info['embedding']
42
  serializable_db[name]['count'] = info.get('count', 1)
 
 
 
 
43
 
44
  # Guardar en un archivo pickle
45
  with open(DATABASE_FILE, 'wb') as f:
@@ -71,8 +79,14 @@ def load_face_database():
71
  for name, info in database.items():
72
  if 'embeddings' in info:
73
  database[name]['embeddings'] = [np.array(emb) if isinstance(emb, list) else emb for emb in info['embeddings']]
 
 
 
74
  elif 'embedding' in info:
75
  database[name]['embedding'] = np.array(info['embedding']) if isinstance(info['embedding'], list) else info['embedding']
 
 
 
76
 
77
  return database
78
  except Exception as e:
@@ -99,11 +113,25 @@ def export_database_json():
99
  ]
100
  serializable_db[name]['models'] = info['models']
101
  serializable_db[name]['count'] = info['count']
 
 
 
 
 
 
 
102
  elif 'embedding' in info:
103
  serializable_db[name]['embedding'] = base64.b64encode(
104
  np.array(info['embedding']).tobytes()
105
  ).decode('utf-8')
106
  serializable_db[name]['count'] = info.get('count', 1)
 
 
 
 
 
 
 
107
 
108
  # Guardar en un archivo JSON
109
  export_file = "face_database_export.json"
@@ -137,10 +165,22 @@ def import_database_json(json_file):
137
  np.frombuffer(base64.b64decode(emb), dtype=np.float32)
138
  for emb in info['embeddings']
139
  ]
 
 
 
 
 
 
140
  elif 'embedding' in info:
141
  imported_db[name]['embedding'] = np.frombuffer(
142
  base64.b64decode(info['embedding']), dtype=np.float32
143
  )
 
 
 
 
 
 
144
 
145
  return imported_db
146
  except Exception as e:
@@ -169,7 +209,19 @@ def print_database_info():
169
  st.sidebar.write(f"- Has {len(first_entry['embeddings'])} embeddings")
170
  st.sidebar.write(f"- Models: {', '.join(first_entry['models'])}")
171
  st.sidebar.write(f"- Count: {first_entry['count']}")
 
 
 
 
 
 
172
  elif 'embedding' in first_entry:
173
  st.sidebar.write("- Has single embedding (old format)")
 
 
 
 
 
 
174
  else:
175
  st.sidebar.write("Database is empty")
 
36
  serializable_db[name]['embeddings'] = [emb.tolist() if isinstance(emb, np.ndarray) else emb for emb in info['embeddings']]
37
  serializable_db[name]['models'] = info['models']
38
  serializable_db[name]['count'] = info['count']
39
+
40
+ # Guardar imagen facial si existe
41
+ if 'face_image' in info:
42
+ serializable_db[name]['face_image'] = info['face_image'].tolist() if isinstance(info['face_image'], np.ndarray) else info['face_image']
43
  elif 'embedding' in info:
44
  # Formato antiguo
45
  serializable_db[name]['embedding'] = info['embedding'].tolist() if isinstance(info['embedding'], np.ndarray) else info['embedding']
46
  serializable_db[name]['count'] = info.get('count', 1)
47
+
48
+ # Guardar imagen facial si existe
49
+ if 'face_image' in info:
50
+ serializable_db[name]['face_image'] = info['face_image'].tolist() if isinstance(info['face_image'], np.ndarray) else info['face_image']
51
 
52
  # Guardar en un archivo pickle
53
  with open(DATABASE_FILE, 'wb') as f:
 
79
  for name, info in database.items():
80
  if 'embeddings' in info:
81
  database[name]['embeddings'] = [np.array(emb) if isinstance(emb, list) else emb for emb in info['embeddings']]
82
+ # Cargar imagen facial si existe
83
+ if 'face_image' in info:
84
+ database[name]['face_image'] = np.array(info['face_image']) if isinstance(info['face_image'], list) else info['face_image']
85
  elif 'embedding' in info:
86
  database[name]['embedding'] = np.array(info['embedding']) if isinstance(info['embedding'], list) else info['embedding']
87
+ # Cargar imagen facial si existe
88
+ if 'face_image' in info:
89
+ database[name]['face_image'] = np.array(info['face_image']) if isinstance(info['face_image'], list) else info['face_image']
90
 
91
  return database
92
  except Exception as e:
 
113
  ]
114
  serializable_db[name]['models'] = info['models']
115
  serializable_db[name]['count'] = info['count']
116
+
117
+ # Incluir imagen facial si existe
118
+ if 'face_image' in info:
119
+ serializable_db[name]['face_image'] = base64.b64encode(
120
+ np.array(info['face_image']).tobytes()
121
+ ).decode('utf-8')
122
+ serializable_db[name]['face_image_shape'] = info['face_image'].shape
123
  elif 'embedding' in info:
124
  serializable_db[name]['embedding'] = base64.b64encode(
125
  np.array(info['embedding']).tobytes()
126
  ).decode('utf-8')
127
  serializable_db[name]['count'] = info.get('count', 1)
128
+
129
+ # Incluir imagen facial si existe
130
+ if 'face_image' in info:
131
+ serializable_db[name]['face_image'] = base64.b64encode(
132
+ np.array(info['face_image']).tobytes()
133
+ ).decode('utf-8')
134
+ serializable_db[name]['face_image_shape'] = info['face_image'].shape
135
 
136
  # Guardar en un archivo JSON
137
  export_file = "face_database_export.json"
 
165
  np.frombuffer(base64.b64decode(emb), dtype=np.float32)
166
  for emb in info['embeddings']
167
  ]
168
+
169
+ # Importar imagen facial si existe
170
+ if 'face_image' in info and 'face_image_shape' in info:
171
+ face_data = np.frombuffer(base64.b64decode(info['face_image']), dtype=np.uint8)
172
+ shape = info['face_image_shape']
173
+ imported_db[name]['face_image'] = face_data.reshape(shape)
174
  elif 'embedding' in info:
175
  imported_db[name]['embedding'] = np.frombuffer(
176
  base64.b64decode(info['embedding']), dtype=np.float32
177
  )
178
+
179
+ # Importar imagen facial si existe
180
+ if 'face_image' in info and 'face_image_shape' in info:
181
+ face_data = np.frombuffer(base64.b64decode(info['face_image']), dtype=np.uint8)
182
+ shape = info['face_image_shape']
183
+ imported_db[name]['face_image'] = face_data.reshape(shape)
184
 
185
  return imported_db
186
  except Exception as e:
 
209
  st.sidebar.write(f"- Has {len(first_entry['embeddings'])} embeddings")
210
  st.sidebar.write(f"- Models: {', '.join(first_entry['models'])}")
211
  st.sidebar.write(f"- Count: {first_entry['count']}")
212
+
213
+ # Mostrar si tiene imagen
214
+ if 'face_image' in first_entry:
215
+ st.sidebar.write(f"- Has reference face image: {first_entry['face_image'].shape}")
216
+ else:
217
+ st.sidebar.write("- No reference image")
218
  elif 'embedding' in first_entry:
219
  st.sidebar.write("- Has single embedding (old format)")
220
+
221
+ # Mostrar si tiene imagen
222
+ if 'face_image' in first_entry:
223
+ st.sidebar.write(f"- Has reference face image: {first_entry['face_image'].shape}")
224
+ else:
225
+ st.sidebar.write("- No reference image")
226
  else:
227
  st.sidebar.write("Database is empty")