OpenVINO:如何使用推理引擎构建 OpenCV 以启用从模型优化器加载模型
OpenVINO: How to build OpenCV with Inference Engine to enable loading models from Model Optimizer
我安装了 OpenVINO 并想在 windows 10 上 运行 以下代码。
import numpy as np
import cv2
import sys
from get_face_id import face_id_getter
from check import check
from win10toast import ToastNotifier
FP = 32
targetId = 0
toaster = None
if '-use_notifications' in sys.argv:
toaster = ToastNotifier()
if len(sys.argv) > 1 and '-m' in sys.argv:
FP = 16
targetId = cv2.dnn.DNN_TARGET_MYRIAD
cap = cv2.VideoCapture(0)
getter = None
if '-get_face_id' in sys.argv:
getter = face_id_getter()
weights = 'face-detection-adas-0001/FP{}/face-detection-adas-0001.bin'.format(FP)
config = 'face-detection-adas-0001/FP{}/face-detection-adas-0001.xml'.format(FP)
weights_emotions, config_emotions, emotions = None, None, None
if len(sys.argv) > 1 and '-use_emotions' in sys.argv:
weights_emotions = 'emotions-recognition-retail-0003/FP{}/emotions-recognition-retail-0003.bin'.format(FP)
config_emotions = 'emotions-recognition-retail-0003/FP{}/emotions-recognition-retail-0003.xml'.format(FP)
framework = 'DLDT'
model = cv2.dnn.readNet(weights, config, framework)
model.setPreferableTarget(targetId=targetId)
if len(sys.argv) > 1 and '-use_emotions' in sys.argv:
emotions = cv2.dnn.readNet(weights_emotions, config_emotions, framework)
emotions.setPreferableTarget(targetId=targetId)
emotions_decode = ('neutral', 'happy', 'sad', 'surprise', 'anger')
names = ["Plotnikov Egor", "Vainberg Roman", "Sataev Emil", "Unknown person"]
emotion_text = None
while(True):
ret, frame = cap.read()
blob = cv2.dnn.blobFromImage(frame, size=(672, 384), crop=False)
have_nots = False
model.setInput(blob)
ans = model.forward()
for i in range(0, 200):
x_min, y_min, x_max, y_max = np.array(ans[0, 0, i, 3:7]) * np.array([640, 480, 640, 480])
if ans[0, 0, i, 2] > 0.5:
cv2.rectangle(frame, (int(x_min), int(y_min)), (int(x_max), int(y_max)), ( 0, 255, 255))
if len(sys.argv) > 1 and '-use_emotions' in sys.argv:
blob_emotions = cv2.dnn.blobFromImage(frame[int(y_min):int(y_max), int(x_min):int(x_max)], size=(64, 64), crop=False)
emotions.setInput(blob_emotions)
ans_emotions = emotions.forward()[0, : , 0 , 0]
ans_emotions = list(map(lambda x: 1 if x > 0.5 else 0, ans_emotions))
_t = ''.join(list(map(str,ans_emotions))).find('1')
if _t == -1:
_t = 0
emotion_text = emotions_decode[_t]
if '-get_face_id' in sys.argv:
_ans = getter.get_answer(frame[int(y_min):int(y_max), int(x_min):int(x_max)])
t = check('labels.txt', _ans)
#print(names[t])
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(frame,names[t],(int(x_min), int(y_min)), font, 1,(255,255,255),2,cv2.LINE_AA)
if emotion_text != None:
cv2.putText(frame,emotion_text,(int(x_min), int(y_max)), font, 1,(255,255,255),2,cv2.LINE_AA)
if '-use_notifications' in sys.argv and not have_nots:
toaster.show_toast("Welcome, " + names[t],"")
have_nots = True
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
我想运行一个预训练的OpenVINO模型,但是得到错误:
v\modules\dnn\src\dnn.cpp:2670: error: (-2:Unspecified error) Build OpenCV with Inference Engine to enable loading models from Model Optimizer. in function 'cv::dnn::dnn4_v20190122::Net::readFromModelOptimizer'
我需要使用推理引擎构建 OpenCV。我没有编程经验,不知道这意味着什么。
当我尝试这样做时:
https://github.com/opencv/opencv/wiki/Intel%27s-Deep-Learning-Inference-Engine-backend
并尝试
cmake \
-DWITH_INF_ENGINE=ON \
-DENABLE_CXX11=ON \
...
在 C:\Program Files (x86)\IntelSWTools\openvino_2019.1.148\opencv\samples
它给出了一条错误消息:
CMake Error: The source directory "C:/Program Files (x86)/IntelSWTools/openvino_2019.1.148/opencv/samples/..." does not appear to contain CMakeLists.txt.
即使该文件夹中有 CMakeLists.txt。
有人可以帮我吗?
您可以只使用来自 OpenVINO 的 OpenCV。它已经用英特尔的推理引擎编译。
您应该将 OpenCV 添加到您的环境变量中。
打开环境变量window:在搜索框中输入environment variables
。
从 System Variables
编辑 Path
,插入 OpenCV 路径作为您的安装路径。就我而言,我添加并能够使用它。
C:\Program Files (x86)\IntelSWTools\openvino\opencv\bin
您还需要检查首选后端和目标以选择推理后端和目标硬件。
请参阅以下 API 参考资料:
对我来说,解决方案是删除 OpenCV Python 库并安装 opencv-python-inference-engine
pip3 uninstall opencv-python
pip3 uninstall opencv-contrib-python
pip3 install opencv-python-inference-engine
我安装了 OpenVINO 并想在 windows 10 上 运行 以下代码。
import numpy as np
import cv2
import sys
from get_face_id import face_id_getter
from check import check
from win10toast import ToastNotifier
FP = 32
targetId = 0
toaster = None
if '-use_notifications' in sys.argv:
toaster = ToastNotifier()
if len(sys.argv) > 1 and '-m' in sys.argv:
FP = 16
targetId = cv2.dnn.DNN_TARGET_MYRIAD
cap = cv2.VideoCapture(0)
getter = None
if '-get_face_id' in sys.argv:
getter = face_id_getter()
weights = 'face-detection-adas-0001/FP{}/face-detection-adas-0001.bin'.format(FP)
config = 'face-detection-adas-0001/FP{}/face-detection-adas-0001.xml'.format(FP)
weights_emotions, config_emotions, emotions = None, None, None
if len(sys.argv) > 1 and '-use_emotions' in sys.argv:
weights_emotions = 'emotions-recognition-retail-0003/FP{}/emotions-recognition-retail-0003.bin'.format(FP)
config_emotions = 'emotions-recognition-retail-0003/FP{}/emotions-recognition-retail-0003.xml'.format(FP)
framework = 'DLDT'
model = cv2.dnn.readNet(weights, config, framework)
model.setPreferableTarget(targetId=targetId)
if len(sys.argv) > 1 and '-use_emotions' in sys.argv:
emotions = cv2.dnn.readNet(weights_emotions, config_emotions, framework)
emotions.setPreferableTarget(targetId=targetId)
emotions_decode = ('neutral', 'happy', 'sad', 'surprise', 'anger')
names = ["Plotnikov Egor", "Vainberg Roman", "Sataev Emil", "Unknown person"]
emotion_text = None
while(True):
ret, frame = cap.read()
blob = cv2.dnn.blobFromImage(frame, size=(672, 384), crop=False)
have_nots = False
model.setInput(blob)
ans = model.forward()
for i in range(0, 200):
x_min, y_min, x_max, y_max = np.array(ans[0, 0, i, 3:7]) * np.array([640, 480, 640, 480])
if ans[0, 0, i, 2] > 0.5:
cv2.rectangle(frame, (int(x_min), int(y_min)), (int(x_max), int(y_max)), ( 0, 255, 255))
if len(sys.argv) > 1 and '-use_emotions' in sys.argv:
blob_emotions = cv2.dnn.blobFromImage(frame[int(y_min):int(y_max), int(x_min):int(x_max)], size=(64, 64), crop=False)
emotions.setInput(blob_emotions)
ans_emotions = emotions.forward()[0, : , 0 , 0]
ans_emotions = list(map(lambda x: 1 if x > 0.5 else 0, ans_emotions))
_t = ''.join(list(map(str,ans_emotions))).find('1')
if _t == -1:
_t = 0
emotion_text = emotions_decode[_t]
if '-get_face_id' in sys.argv:
_ans = getter.get_answer(frame[int(y_min):int(y_max), int(x_min):int(x_max)])
t = check('labels.txt', _ans)
#print(names[t])
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(frame,names[t],(int(x_min), int(y_min)), font, 1,(255,255,255),2,cv2.LINE_AA)
if emotion_text != None:
cv2.putText(frame,emotion_text,(int(x_min), int(y_max)), font, 1,(255,255,255),2,cv2.LINE_AA)
if '-use_notifications' in sys.argv and not have_nots:
toaster.show_toast("Welcome, " + names[t],"")
have_nots = True
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
我想运行一个预训练的OpenVINO模型,但是得到错误:
v\modules\dnn\src\dnn.cpp:2670: error: (-2:Unspecified error) Build OpenCV with Inference Engine to enable loading models from Model Optimizer. in function 'cv::dnn::dnn4_v20190122::Net::readFromModelOptimizer'
我需要使用推理引擎构建 OpenCV。我没有编程经验,不知道这意味着什么。
当我尝试这样做时: https://github.com/opencv/opencv/wiki/Intel%27s-Deep-Learning-Inference-Engine-backend
并尝试
cmake \
-DWITH_INF_ENGINE=ON \
-DENABLE_CXX11=ON \
...
在 C:\Program Files (x86)\IntelSWTools\openvino_2019.1.148\opencv\samples 它给出了一条错误消息:
CMake Error: The source directory "C:/Program Files (x86)/IntelSWTools/openvino_2019.1.148/opencv/samples/..." does not appear to contain CMakeLists.txt.
即使该文件夹中有 CMakeLists.txt。
有人可以帮我吗?
您可以只使用来自 OpenVINO 的 OpenCV。它已经用英特尔的推理引擎编译。
您应该将 OpenCV 添加到您的环境变量中。
打开环境变量window:在搜索框中输入environment variables
。
从 System Variables
编辑 Path
,插入 OpenCV 路径作为您的安装路径。就我而言,我添加并能够使用它。
C:\Program Files (x86)\IntelSWTools\openvino\opencv\bin
您还需要检查首选后端和目标以选择推理后端和目标硬件。
请参阅以下 API 参考资料:
对我来说,解决方案是删除 OpenCV Python 库并安装 opencv-python-inference-engine
pip3 uninstall opencv-python
pip3 uninstall opencv-contrib-python
pip3 install opencv-python-inference-engine