face_recognition 库需要很长时间执行,我也尝试使用 Numba 但我无法执行,如何优化以下代码?
Posted
技术标签:
【中文标题】face_recognition 库需要很长时间执行,我也尝试使用 Numba 但我无法执行,如何优化以下代码?【英文标题】:face_recognition library taking to much time to execute, I also tried to use Numba but I'm unable to execute, How to optimize following code? 【发布时间】:2021-03-27 07:51:46 【问题描述】:face_encoding
包含 13 个人的嵌入,执行以下方法大约需要 9 秒
emb
和 face_encoding
的数据类型为 numpy.ndarray 数组
def face_match(emb, face_encoding):
face_distances = face_recognition.face_distance(emb, face_encoding)
return face_distances
我还尝试了使用 Numba 的以下代码,但我找不到哪里出错了
@jit(nopython=True)
def face_match(emb, face_encoding):
face_distances = face_recognition.face_distance(emb, face_encoding)
return face_distances
我也尝试过使用@njit(nopython=True)
,但还是不行
【问题讨论】:
【参考方案1】:为什么不使用 deepface?它是基于 keras 的库。这就是为什么它很容易安装和运行。
#!pip install deepface
from deepface import DeepFace
resp = DeepFace.verify("img1.jpg", "img2.jpg")
print(resp["verified"])
它的默认人脸识别模型是 VGG-Face,但它也包含 Google FaceNet、OpenFace、Facebook DeepFace、DeepID、Dlib 和 ArcFace。
models = ['VGG-Face', 'Facenet', 'OpenFace', 'DeepFace', 'DeepID', 'Dlib', 'ArcFace']
resp = DeepFace.verify("img1.jpg", "img2.jpg", model_name = models[1])
此外,如果您想在数据库中查找身份,它具有自定义查找功能。
DeepFace.find("img1.jpg", db_path = 'C:/my_db')
在这里,您需要将面部图像(.jpg 或 .png)存储在 my_db 文件夹中。 find 函数在此处返回与 img1 相同的身份图像。
【讨论】:
谢谢你的建议,我会试试这个,让你知道。实际上,我正在将面部识别给出的 128 数组保存到 DB 中,我正在创建帧数组并将该数组保存到 'emb' 中,并且我正在从 DB 中获取 'face_encoding'。我附加了我之前注册过的所有人的数组,以便以后可以使用它。我想现在你明白我在做什么了。那你觉得我该怎么办? 您也可以使用 deepface 提取嵌入。请阅读其文档。 model = DeepFace.build_model("Facenet");嵌入 = model.predict(img);【参考方案2】:所需时间取决于该库的实现。
要使库更快,您必须更改库的代码。如果库使用numpy
或scipy
,那么速度可能取决于系统上可用的线性代数包。
Numba
可以编译纯 python 和 numpy 的子集(例如没有 python 列表),并且使用 @njit
不允许函数的任何不可编译部分。所以这绝对不应该工作。
【讨论】:
以上是关于face_recognition 库需要很长时间执行,我也尝试使用 Numba 但我无法执行,如何优化以下代码?的主要内容,如果未能解决你的问题,请参考以下文章
人工智能之基于face_recognition的人脸检测与识别
使用 yolov4 人脸检测和 face_recognition