系列 | OpenVINO视觉加速库使用七

OpenVINO

还用介绍吗,直接看下面的系列文章了解OpenVINO是干什么用的,还有如何与OpenCV一起使用,实现对DNN模块的加速运行,OpenVINO SDK开发使用等相关技术。

环境配置

当前OpenVINO的最新发布是2019R01版本,可以直接下载安装即可,但是需要注意的是OpenVINO在Windows10系统需要以下依赖支持(需要预先安装好):

- CMake3.7以上版本
- VS2015/VS2017
- Python 3.6.5

需要特别注意的是OpenVINO还 不支持 Python 3.7!

扩展支持

VS2015版本请运行

%CV_SDK_DIR%\deployment_tools\inference_engine\samples\create_msvc2015_solution.bat

VS2017版本请运行

%CV_SDK_DIR%\deployment_tools\inference_engine\samples\create_msvc2017_solution.bat

成功运行之后,在Document目录下找到Samples.sln,双击打开工程文件,选择classification_sample工程,右键生成之后,切换到【Release】模式,再次点击生成,就会成功生成CPU扩展层解析支持。

支持OpenVINO DLL

执行成功执行之后,请把

%CV_SDK_DIR%\deployment_tools\inference_engine\bin\intel64\Release

配置到Window10系统环境变量PATH中去。

Python OpenVINO

把openvion python支持文件夹从

%CV_SDK_DIR%\python\python3.6

复制到Python默认安装路径下site-packages中(本人默认Python3.6.5路径)

C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Lib\site-packages

OpenVINO-Python使用

首先需要导入openvino支持,导入代码如下:

from openvino.inference_engine import IENetwork, IEPlugin

加载CPU支持的IE插件与扩展

# 加载MKLDNN - CPU Target
log.basicConfig(format="[ %(levelname)s ] %(message)s", level=log.INFO, stream=sys.stdout)
plugin = IEPlugin(device="CPU", plugin_dirs=plugin_dir)
plugin.add_cpu_extension(cpu_extension)

如果出现无法加载DLL错误,请检查环境配置!

加载IR

# 加载IR
log.info("Reading IR...")
net = IENetwork(model=model_xml, weights=model_bin)

创建可执行网络

# 获取输入输出层
input_blob = next(iter(net.inputs))
out_blob = next(iter(net.outputs))
log.info("Loading IR to the plugin...")

# 创建可执行网络
exec_net = plugin.load(network=net, num_requests=2)
# Read and pre-process input image
n, c, h, w = net.inputs[input_blob].shape
del net

开启异步或者同步执行

# 开启同步或者异步执行模式
inf_start = time.time()
if is_async_mode:
    in_frame = cv2.resize(next_frame, (w, h))
    in_frame = in_frame.transpose((2, 0, 1))  # Change data layout from HWC to CHW
    in_frame = in_frame.reshape((n, c, h, w))
    exec_net.start_async(request_id=next_request_id, inputs={input_blob: in_frame})
else:
    in_frame = cv2.resize(frame, (w, h))
    in_frame = in_frame.transpose((2, 0, 1))  # Change data layout from HWC to CHW
    in_frame = in_frame.reshape((n, c, h, w))
    exec_net.start_async(request_id=cur_request_id, inputs={input_blob: in_frame})

解析输出

# 解析DetectionOut
res = exec_net.requests[cur_request_id].outputs[out_blob]
for obj in res[0][0]:
    # Draw only objects when probability more than specified threshold
    if obj[2] > 0.5:
        xmin = int(obj[3] * initial_w)
        ymin = int(obj[4] * initial_h)
        xmax = int(obj[5] * initial_w)
        ymax = int(obj[6] * initial_h)
        class_id = int(obj[1])

        # Draw box and label\class_id
        cv2.rectangle(frame, (xmin, ymin), (xmax, ymax), (0, 0, 255), 2)
        cv2.putText(frame, "face" + ' ' + str(round(obj[2] * 100, 1)) + ' %', (xmin, ymin - 7),
                    cv2.FONT_HERSHEY_COMPLEX, 0.6, (255, 0, 0), 1)

# 显示绘制文本
# inf_time_message = "Inference time: N\A for async mode" if is_async_mode else \
inf_time_message = "Inference time: {:.3f} ms, FPS:{:.3f}".format(det_time * 1000, 1000 / (det_time * 1000))
render_time_message = "OpenCV rendering time: {:.3f} ms".format(render_time * 1000)
async_mode_message = "Async mode is on. Processing request {}".format(cur_request_id) if is_async_mode else \
    "Async mode is off. Processing request {}".format(cur_request_id)

cv2.putText(frame, inf_time_message, (15, 15), cv2.FONT_HERSHEY_COMPLEX, 0.5, (255, 255, 0), 1)
cv2.putText(frame, render_time_message, (15, 30), cv2.FONT_HERSHEY_COMPLEX, 0.5, (10, 10, 200), 1)
cv2.putText(frame, async_mode_message, (10, int(initial_h - 20)), cv2.FONT_HERSHEY_COMPLEX, 0.5,
            (10, 10, 200), 1)

显示

cv2.imshow("OpenVINO-Python-SSD-Demo@57558865", frame)

异步交换

# ready for next frame
if is_async_mode:
    cur_request_id, next_request_id = next_request_id, cur_request_id
    frame = next_frame

运行如下:

妥妥的FPS在130+左右,对比VS2015+OpenVINO我深刻感受到Python+OpenVINO才是一个更好的选择!另外最后要说以下,Python+OpenVINO的开发环境配置我也是折腾了好久,还是坚持把这篇文章写出来了,希望提供给大家在使用OpenVINO时候多一个选择!

原文发布于微信公众号 - OpenCV学堂(CVSCHOOL)

原文发表时间:2019-04-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券