Невозможность обработать OpenVino DNN распознаватель на NCS2 на Raspberry Pi - PullRequest
1 голос
/ 29 февраля 2020

Я пытаюсь запустить скрипт распознавания лиц / распознавания лиц python на моем Raspberry Pi 4 с устройством Intel NCS2.
Я работаю на Pi 4 с установленными OpenCV и Openvino для отличных блогов на pyimagesearch .com.

Обнаружение лица запускается с этим кодом, настроенным на целевое устройство 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 для обнаружения, но не работает для распознавателя.

Насколько я могу судить, он пытается запустить код распознавателя на процессоре, а не на NCS2. Библиотеки Intel openvino предположительно не поддерживают процессор Raspberry Pi Arm, поэтому он выдает ошибку.

Я пытался использовать различные другие параметры setPreferableTarget и SetPreferrableBackend из документации OpenCV. Согласно документации, единственное допустимое сочетание с мириадами - это цель DNN_TARGET_MYRIAD и серверная часть DNN_BACKEND_INFERENCE_ENGINE. Но ни одна комбинация не работает.

Есть предложения?

1 Ответ

1 голос
/ 01 марта 2020

Комментарий Артемия заставил меня задуматься о версиях, поэтому я посмотрел на предупреждение о версии, которое мне показалось не связанным. Оказывается, что это был конфликт версий в sklearn, который каким-то образом блокировал работу распознавателя на NCS2. Установка старой версии 0.20.2 scikit-learn исправила ее.

Это действительно смущает меня, так как я не ожидал, что вызовы MYRIAD будут зависеть от библиотеки python. Возможно, я случайно где-то изменил другой параметр.

Интересно, что для моего видеоприложения первый проход распознавателя занимает ~ 30 секунд, но после этого он занимает всего ~ 50 мс на лицо.

...