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 秒

embface_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】:

所需时间取决于该库的实现。

要使库更快,您必须更改库的代码。如果库使用numpyscipy,那么速度可能取决于系统上可用的线性代数包。

Numba 可以编译纯 python 和 numpy 的子集(例如没有 python 列表),并且使用 @njit 不允许函数的任何不可编译部分。所以这绝对不应该工作。

【讨论】:

以上是关于face_recognition 库需要很长时间执行,我也尝试使用 Numba 但我无法执行,如何优化以下代码?的主要内容,如果未能解决你的问题,请参考以下文章

一个很强大的人脸识别库face_recognition

线程队列

人工智能之基于face_recognition的人脸检测与识别

使用 yolov4 人脸检测和 face_recognition

[深度学习] Python人脸识别库face_recognition使用教程

dlib 和 face_recognition 库出错