点击我爱计算机视觉标星,更快获取CVML新技术


本文转载自OpenCV学堂。

英特尔从去年推出OpenVINO开发框架,从此以后几乎每三个月就更新一个版本,最新版本2019R03,但是此版本跟之前的版本改动比较大,所以在配置Python SDK支持与开发API层面跟之前都有所不同。这里假设你已经正确安装好OpenVINO框架。如果不知道如何安装与配置OpenVINO可以看我在B站视频教程

https://www.bilibili.com/video/av71979782

Python语言支持

01

OpenVINO支持的Python版本SDK与系统列表如下:

首先需要配置好OpenVINO的python SDK支持,这个步骤其实很简单,只需要把安装好的OpenVINO目录下:

openvino_2019.3.334\python\python3.6

下的openvino文件夹copy到安装好的python3.6.5的 site-packages 目录下面,然后就可以正常使用啦。注意,上述的配置方式只对Windows下面有效。

推理引擎SDK API

02

API函数列表与说明

其中最重要的是IECore与IENetwork。

在Python语言中导入SDK支持的python代码如下:

from openvino.inference_engine import IENetwork, IECore

初始化IE(inference Engine)插件,查询设备支持的代码如下:

ie = IECore()
for device in ie.available_devices:print("Device: {}".format(device))

执行结果截图如下:

可以看到,在我的电脑上支持的设备还是挺多的,计算棒支持没问题!

在通过ie创建可执行网络的时候,会需要你指定可执行网络运行的目标设备。我们就可以从上述支持的设备中选择支持。这里需要注意的是CPU需要扩展支持,添加扩展支持的代码如下:

ie.add_extension(cpu_extension, "CPU")

创建可执行的网络的代码如下:

# CPU 执行
exec_net = ie.load_network(network=net, device_name="CPU", num_requests=2)
# 计算棒执行
lm_exec_net = ie.load_network(network=landmark_net, device_name="MYRIAD")

这里我们创建了两个可执行网络,两个深度学习模型分别在CPU与计算棒上执行推理,其中第一个可执行网络的推理请求数目是2个,执行异步推理。

人脸检测演示

03

基于OpenVINO的人脸检测模型与landmark检测模型,实现了一个CPU级别高实时人脸检测与landmark提取的程序,完整的代码实现如下:

def face_landmark_demo():# query device supportie = IECore()for device in ie.available_devices:print("Device: {}".format(device))ie.add_extension(cpu_extension, "CPU")# LUTlut = []lut.append((0, 0, 255))lut.append((255, 0, 0))lut.append((0, 255, 0))lut.append((0, 255, 255))lut.append((255, 0, 255))# Read IRlog.info("Reading IR...")net = IENetwork(model=model_xml, weights=model_bin)landmark_net = IENetwork(model=landmark_xml, weights=landmark_bin)# 获取输入输出input_blob = next(iter(net.inputs))out_blob = next(iter(net.outputs))lm_input_blob = next(iter(landmark_net.inputs))lm_output_blob = next(iter(landmark_net.outputs))log.info("create exec network with target device...")exec_net = ie.load_network(network=net, device_name="CPU", num_requests=2)lm_exec_net = ie.load_network(network=landmark_net, device_name="MYRIAD")# Read and pre-process input imagen, c, h, w = net.inputs[input_blob].shapemn, mc, mh, mw = landmark_net.inputs[lm_input_blob].shape# 释放网络del netdel landmark_netcap = cv2.VideoCapture("D:/images/video/SungEun.avi")cur_request_id = 0next_request_id = 1log.info("Starting inference in async mode...")log.info("To switch between sync and async modes press Tab button")log.info("To stop the demo execution press Esc button")is_async_mode = Truerender_time = 0ret, frame = cap.read()print("To close the application, press 'CTRL+C' or any key with focus on the output window")while cap.isOpened():if is_async_mode:ret, next_frame = cap.read()else:ret, frame = cap.read()if not ret:breakinitial_w = cap.get(3)initial_h = cap.get(4)# 开启同步或者异步执行模式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 CHWin_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 CHWin_frame = in_frame.reshape((n, c, h, w))exec_net.start_async(request_id=cur_request_id, inputs={input_blob: in_frame})if exec_net.requests[cur_request_id].wait(-1) == 0:# 获取网络输出res = exec_net.requests[cur_request_id].outputs[out_blob]# 解析DetectionOutfor obj in res[0][0]: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)if xmin > 0 and ymin > 0 and (xmax < initial_w) and (ymax < initial_h):roi = frame[ymin:ymax,xmin:xmax,:]rh, rw = roi.shape[:2]face_roi = cv2.resize(roi, (mw, mh))face_roi = face_roi.transpose((2, 0, 1))face_roi = face_roi.reshape((mn, mc, mh, mw))lm_exec_net.infer(inputs={'0':face_roi})landmark_res = lm_exec_net.requests[0].outputs[lm_output_blob]landmark_res = np.reshape(landmark_res, (5, 2))for m in range(len(landmark_res)):x = landmark_res[m][0] * rwy = landmark_res[m][1] * rhcv2.circle(roi, (np.int32(x), np.int32(y)), 3, lut[m], 2, 8, 0)cv2.rectangle(frame, (xmin, ymin), (xmax, ymax), (0, 0, 255), 2, 8, 0)inf_end = time.time()det_time = inf_end - inf_start# Draw performance statsinf_time_message = "Inference time: {:.3f} ms, FPS:{:.3f}".format(det_time * 1000, 1000 / (det_time*1000 + 1))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, (200, 10, 10), 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)#render_start = time.time()cv2.imshow("face detection", frame)render_end = time.time()render_time = render_end - render_startif is_async_mode:cur_request_id, next_request_id = next_request_id, cur_request_idframe = next_framekey = cv2.waitKey(1)if key == 27:breakcv2.waitKey(0)# 释放资源cv2.destroyAllWindows()del exec_netdel lm_exec_netdel ie

1920x1080大小的视频画面检测,超高实时无压力!有图为证:


模型压缩与应用部署交流群

关注最新最前沿的深度模型压缩、剪枝、轻量级网络设计、边缘设备部署技术,扫码添加CV君拉你入群,(如已为CV君其他账号好友请直接私信)

(请务必注明:部署)

喜欢在QQ交流的童鞋,可以加52CV官方QQ群:805388940。

(不会时时在线,如果没能及时通过验证还请见谅)


长按关注我爱计算机视觉

CPU上跑深度学习模型,FPS也可以达100帧相关推荐

  1. 如何在浏览器上跑深度学习模型?并且一行JS代码都不用写

    翻译 | 林椿眄 编辑 | 周翔 2017 年 8 月,华盛顿大学的陈天奇团队发布了 TVM,和 NNVM 一起组成深度学习到各种硬件的完整优化工具链,支持手机.CUDA.OpenCL.Metal.J ...

  2. 在英特尔硬件上部署深度学习模型的无代码方法 OpenVINO 深度学习工作台的三部分系列文章 - CPU AI 第一部

    作者 Taylor, Mary, 翻译 李翊玮 关于该系列 了解如何转换.微调和打包推理就绪的 TensorFlow 模型,该模型针对英特尔®硬件进行了优化,仅使用 Web 浏览器.每一步都在云中使用 ...

  3. 利用远程云服务器跑深度学习模型

    利用远程云服务器跑深度学习模型主要有三个问题需要解决. 一是深度学习环境的搭建,二是已搭建环境的保存,三是远程数据的传输. 深度学习环境的搭建 以阿里云为例,在购买服务器创建实例时,可以在镜像市场选择 ...

  4. 通过MACE在Android手机上部署深度学习模型

    1. MACE的环境搭建 参考我的博客:MACE的环境搭建--conda实现 2. 构建项目 (1)下载MACE项目到本地 git clone https://github.com/XiaoMi/ma ...

  5. 使用aws跑深度学习_RNN示例项目从开发到部署(三):在AWS上部署深度学习模型...

    虽然我很喜欢为自己建立数据科学和编程项目,但我同样乐于与世界上的任何人在线分享它.幸好,我们以使用AWS(Amazon Web Services),这样我们可以在几分钟内免费将Python Web应用 ...

  6. 本地没有环境跑深度学习模型? 阿里云天池实验室它不香吗

    一.前言 前几天做深度学习模型训练使用 Google 的 colab 总是掉,搞得很烦.然后那天我队友 "叶伏天" 和我说有一个类似于 Google colab 的平台,可以训练, ...

  7. 猫狗图像数据集上的深度学习模型性能对比

    LeNet模型简介 1. LeNet LeNet-5由七层组成(不包括输入层),每一层都包含可训练权重.通过卷积.池化等操作进行特征提取,最后利用全连接实现分类识别,下面是他的网络结构示意图: C:卷 ...

  8. 端上智能——深度学习模型压缩与加速

    摘要:随着深度学习网络规模的增大,计算复杂度随之增高,严重限制了其在手机等智能设备上的应用.如何使用深度学习来对模型进行压缩和加速,并且保持几乎一样的精度?本文将为大家详细介绍两种模型压缩算法,并展示 ...

  9. 用超算平台跑深度学习模型【新用户赠送200元体验金】

    文章目录 前言 一.北鲲云-一站式云超算平台介绍 二.如何领取 总结 前言   最近在训练YOLO模型,奈何自己的笔记本跑不起来,通过朋友介绍,才了解到北鲲云--一站式超算平台,跑深度模型真的很nic ...

最新文章

  1. DD3D:基于预训练的单目3D目标检测
  2. vue中使用百度地图为啥是空白_vue中使用腾讯地图(尝试篇)
  3. boost::mpi模块sendrecv() 操作的测试
  4. blob转成json js_javascript – 文件API – Blob到JSON
  5. PostBox使用小记
  6. [Redis6]配置文件详解
  7. 用JAVA制作小游戏——推箱子(二)
  8. Python学习笔记:字典(dict)
  9. 大家可以在十分钟内入睡吗?有什么快速入睡的方法吗?
  10. 微信小程序获取用户的头像和昵称
  11. 点击button后改变文字_24. 教你零基础搭建小程序:小程序的常见组件(5)— button标签...
  12. GitHub 给已存在的仓库增加开原协议LICENSE
  13. Thinkphp5笔记七:设置错误页面②
  14. 南阳理工ACM 题目252 01串
  15. docker daemon配置阿里云加速器
  16. 51单片机 矩阵键盘
  17. imx6 vpu程序分析
  18. PTC过流保护器件工作原理及选型方法
  19. Python加密word文档
  20. 图像识别(2)——《OpenCV3编程入门》毛星云编著

热门文章

  1. 汇编8086CPU常用指令——详解
  2. python list合并_python基础===两个list合并成一个dict的方法
  3. mathcal 对应于什么库_数据库理论
  4. jlink怎么调试linux程序_STM32开发板JLINK调试步骤
  5. 计算机系统结构循环间相关,计算机系统结构(双语)
  6. 51单片机c语言测距,超声波HM55B测距(STC10F08单片机C程序)
  7. springboot 获取bean_3W 字的 Spring Boot 超详细总结
  8. python高手能做什么_python高手们、能不能给新手写点心得,迷茫过、好方法、过渡期等等...
  9. 【debug】json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
  10. 参会人员管理系统C语言代码,某小型会议参会人员管理系统