1

我正在尝试使用英特尔 NCS2 设备在我的 Raspberry Pi 4 上运行人脸检测器/人脸识别器 python 脚本。
根据 pyimagesearch.com 上的优秀博客,我在安装了 OpenCV 和 Openvino 的 Pi 4 上运行。

人脸检测使用此代码运行,设置为针对 NCS2(无数)设备:

detector = cv2.dnn.readNetFromCaffe("face_detection_model/deploy.prototxt",              
                "face_detection_model/res10_300x300_ssd_iter_140000.caffemodel")
detector.setPreferableTarget(cv2.dnn.DNN_TARGET_MYRIAD)

检测器运行

     imageBlob = cv2.dnn.blobFromImage(
        cv2.resize(image, (300, 300)), 1.0, (300, 300),
        (104.0, 177.0, 123.0), swapRB=False, crop=False)
     detector.setInput(imageBlob)
     detections = detector.forward()

面部检测器运行良好且运行平稳。

但是,然后,我在检测器找到的人脸上设置了一个图像识别器。

embedder = cv2.dnn.readNetFromTorch("face_embedding_model/openface.nn4.small2.v1.t7"])
embedder.setPreferableTarget(cv2.dnn.DNN_TARGET_MYRIAD)

然后我用人脸图像调用它,基于检测框

        face = image[startY:endY, startX:endX]
        (fH, fW) = face.shape[:2]
        faceBlob = cv2.dnn.blobFromImage(face, 1.0 / 255, (96, 96),
            (0, 0, 0), swapRB=True, crop=False)
        embedder.setInput(faceBlob)
        vec = embedder.forward()

但是,当它到达 vec=embedder.forward() 时,会抛出以下错误

Failed to Initialize Inference Engine backend : Device with “CPU” name is not registered in the InferenceEngine in function ‘initPlugin’ 

我不知道为什么该函数正确地针对 NCS2 进行检测,但无法为识别器运行。

据我所知,它试图在 CPU 上运行识别器代码,而不是 NCS2。据称英特尔 openvino 库不支持 Raspberry Pi Arm 处理器,因此会引发错误。

我尝试使用 OpenCV 文档中的各种其他 setPreferableTarget 和 SetPreferrableBackend 设置。根据文档,与 myriad 的唯一允许组合是 DNN_TARGET_MYRIAD 的目标和 DNN_BACKEND_INFERENCE_ENGINE 的后端。但没有任何组合有效。

有什么建议么?

4

1 回答 1

1

Artemy 的评论让我想到了版本,所以我查看了一个我认为无关的版本警告。事实证明,这是 sklearn 中的版本冲突,它以某种方式阻止了识别器在 NCS2 上的运行。安装旧的 0.20.2 版本的 scikit-learn 修复了它。

这真的让我很困惑,因为我没想到 MYRIAD 调用依赖于 python 库。也许我不小心在某个地方更改了另一个设置。

有趣的是,对于我的视频应用程序,识别器的第一次通过大约需要 30 秒,但之后每张脸只需要大约 50 毫秒。

于 2020-02-29T22:20:27.263 回答