open_model_zoo:

https://github.com/opencv/open_model_zoo

这两个是安装教程:

https://blog.csdn.net/shanglianlm/article/details/89286218

https://blog.csdn.net/qq_36556893/article/details/89532728

英特尔从去年推出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大小的视频画面检测,超高实时无压力!有图为证:

OpenVINO FPS也可以达100帧相关推荐

  1. CPU上跑深度学习模型,FPS也可以达100帧

    点击我爱计算机视觉标星,更快获取CVML新技术 本文转载自OpenCV学堂. 英特尔从去年推出OpenVINO开发框架,从此以后几乎每三个月就更新一个版本,最新版本2019R03,但是此版本跟之前的版 ...

  2. MAT之PLS:利用PLS(两个主成分的贡献率就可达100%)提高测试集辛烷值含量预测准确度并《测试集辛烷值含量预测结果对比》

    MAT之PLS:利用PLS(两个主成分的贡献率就可达100%)提高测试集辛烷值含量预测准确度并<测试集辛烷值含量预测结果对比> 目录 输出结果 实现代码 输出结果 实现代码 load sp ...

  3. MAT之PCA:利用PCA(四个主成分的贡献率就才达100%)降维提高测试集辛烷值含量预测准确度并《测试集辛烷值含量预测结果对比》

    MAT之PCA:利用PCA(四个主成分的贡献率就才达100%)降维提高测试集辛烷值含量预测准确度并<测试集辛烷值含量预测结果对比> 目录 输出结果 实现代码 输出结果 后期更新-- 实现代 ...

  4. 阿里云 mysql 100_MySQL服务进程占用系统CPU达100%-阿里云开发者社区

    故障现象:ping云主机严重丢包,丢包率达99%,仅有一两个包可到达:更无法远程: 排查:云主机 CentOS6.4 后台查看CPU占用高达99% 还好能登入系统,操作也并不卡顿: top查看 mys ...

  5. php怎么会占用磁盘,window_win10占用硬盘高怎么办?win10磁盘占用率达100%解决方法,  win10占用硬盘高怎么办呢? - phpStudy...

    win10占用硬盘高怎么办?win10磁盘占用率达100%解决方法 win10占用硬盘高怎么办呢?很多升级为win10的用户都出现了win10系统磁盘占用率50%或100%的情况,这样让系统的运行速度 ...

  6. 天猫双十一交易额达100亿

    http://tech.sina.com.cn/i/2012-11-11/14007788119.shtml 新浪科技讯 11月11日午间消息,天猫刚刚宣布,截至今日下午13时38分,其双十一促销的支 ...

  7. 希尔顿集团推出面向社会的零工模式;玫琳凯中国市场电商销售占比已达100% | 美通企业日报...

    美通社要闻摘要: 希尔顿集团推出面向社会"零工"模式推动灵活就业.玫琳凯中国市场电商销售占比已达100%.华为移动搜索引擎Petal Search在MWC 2023带来最新多模态A ...

  8. 弘辽科技:80后女大学生开网店创业 年销售额达100万元

    椒江有位1985年出生的女生,从2008年开始开了家网店,专卖女鞋,经过经营,现在她的网店年销售额达到1000万元. 李丹丹是椒江人,大学毕业后,在家待业,那时她沉迷网络游戏. 在家玩了一年.&quo ...

  9. Dropbox推独立应用,公司估值已达100亿美元

    摘要:Dropbox刚获得5亿美元的新一轮融资,其估值已高达100亿美元,现在又推出针对云服务的独立应用Carousel,不久之后,还会有应用陆续推出,随着美国前国务卿赖斯的加盟,Dropbox在云市 ...

最新文章

  1. python发送邮件带附件_Python发送邮件(带附件)
  2. 如何利用cnocr 识别七段数码?
  3. Python处理字符串和列表元组的小技巧
  4. Non-local Neural Networks:非局部神经网络
  5. 随机森林做特征重要性排序和特征选择
  6. Java中的阻塞队列-LinkedBlockingQueue(二)
  7. java不需要返回数据时_从Java方法返回时,BigDecimal不保持实际值
  8. Android app 标签,android 获取APP的唯一标识applicationId的实例
  9. yii2 的 restful 接口书写自定义方法
  10. 使用单例时的三种单例写法
  11. wps分析工具库如何加载_分析为周杰伦打榜的夕阳红老年团,告诉你他们真实年龄!...
  12. 集合竞价选股(附源码)
  13. ELMAN神经网络分类和预测MATLAB程序,采用红酒数据集分类
  14. Linux wine系列——Ubuntu20.04安装wine教程 [2021.3]
  15. sourceForge, wikipedia与异形
  16. 洛谷P1600 天天爱跑步
  17. labelme标记图像时JSON标签复制
  18. 微信小程序 编辑工具
  19. TRIZ创新方法——TRIZ创新思维与方法
  20. github网页打不开

热门文章

  1. 对Thrift的一点点理解
  2. Service与AIDL详解
  3. 哈工大c语言编程题中国大学mooc第四周,中国大学MOOC哈工大C语言程序设计精髓第六周编程题答案.doc...
  4. mysql near_完美解决 ERROR 1064 (42000): You have an error in your SQL syntax ... near …
  5. session与cookie的区别
  6. html外链式css运行不出来div,html+css外链式
  7. mysql 4.0字符集,mysql4.0升级到mysql5(4.1),解决字符集问题
  8. linux主机怎么建站,linux主机建站
  9. 内地计算机学校,全球大学计算机实力排名:清北人工智能内地前2
  10. beeline执行sql语句_由“Beeline连接HiveServer2后如何使用指定的队列(Yarn)运行Hive SQL语句”引发的一系列思考...