gpt4 book ai didi

python - 在python中存储面部编码列表以进行面部识别

转载 作者:行者123 更新时间:2023-12-05 02:10:13 25 4
gpt4 key购买 nike

我正在开展一个项目,该项目可能包含大量用于面部识别目的的面部编码列表,我正在使用 face_recognition 模块。传递给它一个图像返回一个面部编码,它本质上是一个对象。我目前的想法是在列表中使用 pickle 模块存储编码并在构造函数中再次将其加载到列表中。我觉得这不会很好地扩展,我可能最好使用某种数据库来存储它们。

有没有人对此有任何想法?如果我要使用数据库,我将如何在该数据库中存储对象?

更具体地说,编码是 numpy.ndarray 类型

谢谢!

最佳答案

如果您打算将您的程序用作一般人脸识别方法,将它们作为单独的记录存储在数据库中可能不是一个好主意。考虑这种情况:你有 100,000 个编码向量,你想检查新照片是否有任何对应的记录在你以前见过的面孔中。由于您需要将新向量与所有存储的向量进行比较,因此您需要在每次请求时加载所有向量,或​​者加载一次并将其缓存在内存中以对所有向量进行向量化操作(例如获取欧几里得距离) .

如您所见,没有使用任何数据库操作,如索引、字段搜索、事务等。因此,我建议将它与磁盘上的 pickle 对象一起保留以实现持久性,并在调用程序时加载它们一次。如果您要从存储中添加/删除内容,我建议使用 NoSQL 数据库(如 MongoDB)来存储对象。这使您可以避免创建无意义的表/处理对您的情况没有任何好处的 BLOB 等。这是一个用于处理 mongo 的 starter(您需要在运行代码之前安装它):

from pymongo import MongoClient
import numpy as np

client = MongoClient('localhost', 27018)
db = client['face_db']

faces = db.face

first_person_name = "John"
first_sample_face_embedding = np.random.rand(128).tolist()

second_person_name = "Julia"
second_sample_face_embedding = np.random.rand(128).tolist()

faces.insert_many([
{"name": first_person_name, "embedding": first_sample_face_embedding},
{"name": second_person_name, "embedding": second_sample_face_embedding}
])

#### load data back

all_docs = list(faces.find({}))
names, embeddings = [doc["name"] for doc in all_docs], [doc["embedding"] for doc in all_docs]

embeddings = np.array(embeddings)


target_embedding = np.random.rand(128)

# do stuff here

您可以阅读 this发布有关在 python 中使用 mongo 的更多信息。

关于python - 在python中存储面部编码列表以进行面部识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59004129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com