facenet将人脸编码成128维float型向量
将这128维向量转换成string再以text的形式存入数据库
#face_encoding即人脸编码后的向量
#以 , 为分隔符将其转换成string
enc2str = ",".join(str(li) for li in face_encoding.tolist())
sql = "insert ignore into face(id,json) values('%s','%s')"
%(uid, enc2str)
try:
#logging.debug("execute face_encoding")
row = cursor.execute(sql)
db.commit()
except Exception as e:
print("error")
db.rollback()
raise e
finally:
cursor.close()
db.close()
将存在数据库中的encoding读出并存成数组
maxlen = 128
sql = "select id,json from json"
try:
cursor.execute(sql)
data = cursor.fetchall()
except Exception:
print("Error:unable to fecth data")
raise Exception
finally:
cursor.close()
db.close()
results = np.array(data)
rows = results.shape[0]
if rows == 0: return None
#每次处理128条
#数据条数过大,内存装不下,也可改变游标形式,fetchone()一条一条读取处理
for i in range(0, rows, maxlen):
self.known_face_ids.append(results[i][0])
pic_vectors = results[i:i + maxlen, 2]
for ss in pic_vectors:
s2f = [float(j) for j in ss.split(',')] #string to float
self.known_face_encodings.append(np.array(s2f, dtype=float))