工业派-配置Intel神经计算棒二代(NCS2)
最近两天在工业派ubuntu16.04上配置了Intel神经计算棒二代——Intel Neural Compute Stick,配置过程之艰辛我都不想说了,实在是太折磨人。不过历尽千辛万苦,总算让计算棒可以在工业派ubuntu16.04系统上跑了,还是蛮欣慰的。
注:以下所说的计算棒默认说的是计算棒二代,不是计算棒一代
下面简单记录一下我在配置计算棒过程中遇到的一些坑
一、运行官方demo遇到的坑
1.一定要按照官网来安装配置加速棒!一定要按照官网来安装配置加速棒!一定要按照官网来安装配置加速棒!不要在网上瞎几把找帖子,我是深有体会,很多都写的不明不白,只有官网的配置教程才是最简单的,不会让你掉进更多坑!(教程前面的一些概述一定要认真看,上面写明了一些软硬件配置要求)
附上一些重要链接:
官网配置教程:https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_raspbian.html
最新OpenVINO™Toolkit软件包下载:https://download.01.org/opencv/2019/openvinotoolkit/
下载下来的安装包形式:l_openvino_toolkit_raspbi_p_<version>.tgz
注:博主工业派系统是ubuntu16.04,虽然不是树莓派官方系统,但是树莓派也是32位的linux系统,所以在工业派上配置计算棒和在树莓派上配置计算棒是一样的操作(最主要原因还是工业派官方支持计算棒)
注:工业派的bash.bashrc路径为:/etc /bash.bashrc ,bash.bashrc文件主要用于设置登录时控制台输出的信息
2.前车之鉴,如图一所示,建议软件安装包使用最新版2019_R1.1,不推荐安装2018_R5。博主最先尝试使用了2018_R5,在后面配置计算棒的时候发现,会报错如图二所示,一直无法解决,换成2019_R1.1版本后就没有这个问题了!

图一

图二
3.cmake版本号一定要正确,如三图所示,官网教程明确说明 cmake 版本号一定要大于等于3.7.2

图三
如果cmake版本号低于3.7.2,则在后面执行命令:cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-march=armv7-a" /opt/intel/openvino/deployment_tools/inference_engine/samples 时会报图四所示错误!

图四
这里官网也有点坑,如图五所示,如果按照官网命令 sudo apt install cmake 来安装cmake,会发现安装的cmake版本号会低于3.7.2,博主一开始就忽略了这里,后面绕了一圈才发现是自己前面这里的cmake没有配置好,简直了!

图五
博主后面是手动安装的cmake3.13.0,安装教程链接放在这里:https://blog.csdn.net/qq_26035845/article/details/84492576
安装完cmake后,执行 cmake --version 时,如果报错显示:-bash: /usr/bin/cmake: No such file or directory ,则应该是系统没有找到 cmake 命令。解决办法:做一个链接即可,即执行命令:ln -s /usr/local/bin/cmake /usr/bin
4. 在终端显示 OpenVINO environment initialized 后,说明 OpenVINO环境已经初始化成功,接着输入python3进入编辑器,再输入import cv2 可能会出现如图六所示报错:

图六
解决办法:
执行命令:sudo vi ~/.bashrc
在文档尾部加上:export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/opt/intel/openvino/inference_engine/lib/armv7l/

最后执行命令:source ~/.bashrc
成功!
注:核心思想就是将libinference_engine.so文件所属目录添加到 linux 的环境变量中,这样用户就可以访问到这个目录下的libinference_engine.so文件,也就不会引起报错了
5. import openvino可能也会出现如下报错:

原因:没有把需要的openvino模块目录添加到系统的pythonpath中,导致找不到openvino模块
解决办法:
执行命令:sudo vi ~/.bashrc
在文档尾部加上:export PYTHONPATH=/opt/intel/openvino/python/python3.5/armv7l:$PYTHONPATH

退出编辑,执行命令:source ~/.bashrc
成功!
6. python3 进入python命令行后,输入 import cv2 ,再输入 cv2.__version__,发现结果是: ‘4.1.0-openvino’,这表明openvino配置成功!但是如果 sudo python3 进入python命令行后,输入 import cv2 ,再输入 cv2.__version__,可能会发现结果是: ‘4.1.0’,而不是配置openvino后应该正确显示的 ‘4.1.0-openvino’。出现这种差别的原因是 sudo 命令会使系统自动重置PATH环境变量,这样就区别于普通用户执行命令的环境变量。解决这个问题的方法:
执行命令:sudo nano /etc/sudoers
注释 Defaults env_reset 这行代码
在文件的最后添加如下两行代码:
Defaults env_keep += "PYTHONPATH"
Defaults env_keep += "Any other env variable you want to keep"
保存退出,大功告成!
参考:https://blog.csdn.net/weixin_34390105/article/details/87297075
7.在使用OpenCV * API运行人脸检测模型推理时,执行 python3 openvino_fd_myriad.py 可能会报如下错误:
dnn.cpp:2538: error: (-2:Unspecified error) Build OpenCV with Inference Engine to enable loading models from Model Optimizer. in function 'readFromModelOptimizer'
解决办法:
先执行命令:source /opt/intel/openvino/bin/setupvars.sh
再执行命令:echo "source /opt/intel/openvino/bin/setupvars.sh" >> ~/.bashrc
注:执行第一条命令只是临时设置环境变量的,第二条命令才是永久的永久设置环境变量!
8.其它操作按照官网操作步骤一步一步来即可!
----------------------------运行官方demo效果--------------------------------


二、运行自己网络模型遇到的坑
1.在电脑ubuntu16.04上安装openVINO
如果要将自己的网络模型用于计算棒推理,则必须将该模型转换为由推理引擎用作输入的.bin和.xml中间表示(IR)文件。因为工业派(树莓派)上ubuntu16.04上安装的openVINO是阉割版的,功能不全,不支持模型转换,所以为了实现模型转换,还必须在win10或者ubuntu上安装一遍完整版openVINO。因为我在win10上打死装不上vs2019,神坑,所以我放弃在win10装openVINO,转而在电脑ubuntu16.04上装openVINO。安装的时候才发现在电脑ubuntu16.04安装openVINO真的是贼简单!附上官方安装网址:https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_linux.html
2.将tensorflow转换为movidius格式(.xml & .bin)------注:是冻结tensorflow模型(SSD Mobilenet V2)
2.1 执行命令: cd /opt/intel/openvino/deployment_tools/model_optimizer

2.2 执行命令:sudo python3 mo.py --input_model frozen_inference_graph.pb --tensorflow_use_custom_operations_config extensions/front/tf/ssd_v2_support.json --tensorflow_object_detection_api_pipeline_config pipeline.config --input_shape=[1,416,416,3] --data_type=FP16
成功!
注:所需frozen_inference_graph.pb、pipeline.config文件需要自己提前准备好
参考网址:
https://software.intel.com/en-us/forums/computer-vision/topic/785586
https://blog.csdn.net/LuckyXiaoSu/article/details/87814471
3.在工业派上使用转换后的xml和bin文件
执行: python3 **.py
报错:

表示花了两三天时间都没解决,心态都搞崩了,只想说fuck!目前针对这种情况,博主还是没找到解决办法,但是我有一些解决思路,写在这里,可以供需要的朋友参考!
经过多次试验发现这个报错和opencv的cv2.videoCpture方法有关,当videoCpture的参数是0或1时,python3 **.py执行正常,表明opencv是可以打开摄像头的。但是当videoCpture的参数是本地视频文件的路径时,执行python3 **.py,就会出现如上报错,我猜测可能是opencv没安装正确。经过百度、谷歌查询,得知可能是没有安装 ffmpeg ,但是博主去各种安装、重新编译opencv还是没解决这个问题,所以到最后只能放弃了。
参考网址:(参考了还是没解决问题,想哭~)
https://blog.csdn.net/lovelyaiq/article/details/11927439
-----------曲线救国办法-----------------------
妈哟,实在解决不了怎么办呢?只能换个办法呗,反正只要能成功就行!
执行: sudo python3 **.py
又报错!其实在情理之中,毕竟只是提高了一下权限,但是这个报错一看的话感觉也有点烧脑,如下:

仔细一看,是因为加了sudo后,路径 /opt/intel/openvino/python/python3.5/armv7l/openvino/inference_engine下的libmyriadPlugin.so没有找到。自行cd到该文件目录下,发现是真没有libmyriadPlugin.so这个文件,所以系统无法加载这个文件。解决办法就是想办法在其它目录中找到libmyriadPlugin.so文件,然后复制到 /opt/intel/openvino/python/python3.5/armv7l/openvino/inference_engine下即可。经过查找发现 /opt/intel/openvino/deployment_tools/inference_engine/lib/armv7l 目录下有libmyriadPlugin.so文件,于是将该文件复制到 /opt/intel/openvino/python/python3.5/armv7l/openvino/inference_engine下,再运行sudo python3 **.py,发现还是有相同的报错。百度后发现是因为 .so文件是有依赖的,于是博主索性将 /opt/intel/openvino/deployment_tools/inference_engine/lib/armv7l 下的所有文件都复制拷贝到 /opt/intel/openvino/python/python3.5/armv7l/openvino/inference_engine下,再运行sudo python3 **.py,发现这回成功了!
三、总结
最后两个报错,我几近崩溃,熬了好久都没熬出答案,经过不断摸索总算是解决了其中一个问题,尽管另一个问题没解决,但是已经不影响操作了!不过还是希望解决了VIDIOC_REQBUFS: Inappropriate ioctl for device这个问题的朋友可以告知一下,万分感谢!我也总算是在工业派上利用计算棒跑通了tensorflow程序,这一路踩得地雷、掉的坑实在太多,博主早已面目全非,激情不再,好在捱到了最后,顺利解决了问题,终于可以松一口气了!总结一下就是遇到问题千万不要轻言放弃,一定要动用所有资源去寻找答案,努力努力再努力,总会柳暗花明的!当然,很多时候也许也需要换一种思维去寻找解决问题的办法,不要在一棵树上吊死。不管什么猫,能捉到耗子的猫就是好猫!
工业派-配置Intel神经计算棒二代(NCS2)的更多相关文章
- 在工业派上使用opencv库的记录
1.在工业派linux操作系统环境下,调用OpenCV库,用python写了第一个查看图片的程序 注意:要进入工业派的terminal 参考:https://www.cnblogs.com/magic ...
- Ubuntu 16.04下配置intel opencl环境
一. 靠谱的安装教程 1. 官网教程 https://software.intel.com/en-us/articles/sdk-for-opencl-2019-gsg,打开后往下拉到[4. Prod ...
- 2018 AI产业界大盘点
2018 AI产业界大盘点 大事件盘点 “ 1.24——Facebook人工智能部门负责人Yann LeCun宣布卸任 Facebook人工智能研究部门(FAIR)的负责人Yann LeCun宣布卸 ...
- 如何配置全世界最小的 MySQL 服务器
配置全世界最小的 MySQL 服务器——如何在一块 Intel Edison 为控制板上安装一个 MySQL 服务器. 介绍 在我最近的一篇博文中,物联网,消息以及 MySQL,我展示了如果 Part ...
- centos 4.4配置使用 and Nutch搜索引擎(第1期)_ Nutch简介及安装
centos 4.4配置使用 1.Nutch简介 Nutch是一个由Java实现的,开放源代码(open-source)的web搜索引擎.主要用于收集网页数据,然后对其进行分析,建立索引,以提供相应的 ...
- Google Coral Edge TPU USB加速棒上手体验
Edge AI是什么?它为何如此重要? 传统意义上,AI解决方案需要强大的并行计算处理能力,长期以来,AI服务都是通过联网在线的云端基于服务器的计算来提供服务.但是具有实时性要求的AI解决方案需要在设 ...
- FreeBSD 物理机下显卡的配置
FreeBSD 已从 Linux 移植了显卡驱动,理论上,A 卡 N 卡均可在 amd64 架构上正常运行. 支持情况 对于 FreeBSD 11,支持情况同 Linux 内核 4.11: 对于 Fr ...
- x86 构架的 Arduino 开发板Intel Galileo
RobotPeak是上海的一家硬件创业团队,团队致力于民用机器人平台系统.机器人操作系统(ROS)以及相关设备的设计研发,并尝试将日新月异的机器人技术融入人们的日常生活与娱乐当中.同时,RobotPe ...
- x86 版的 Arduino Intel Galileo 开发板的体验、分析和应用
1.前言 在今年(2013)罗马举办的首届欧洲 Make Faire 上,Intel 向对外发布了采用 x86 构架的 Arduino 开发板:Intel Galileo.这无疑是一个开源硬件领域的重 ...
随机推荐
- JS对象 Date 日期对象 日期对象可以储存任意一个日期,并且可以精确到毫秒数(1/1000 秒)。 定义一个时间对象 : var Udate=new Date();Date()的首字母须大写
Date 日期对象 日期对象可以储存任意一个日期,并且可以精确到毫秒数(1/1000 秒). 定义一个时间对象 : var Udate=new Date(); 注意:使用关键字new,Date()的首 ...
- 第一个Vus.js
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- windows使用cmd查看、杀死进程
查看某个进程: netstat -ano | findstr 端口号 杀死某个进程: taskkill /f /pid 进程号
- ASCII part of UTF8
UTF8 所以,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码. UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1 ...
- openwrt xfrp移植
对开源软件表示支持 https://github.com/KunTengRom/xfrp 上传编译,选择 cp .config xxx make 刷机 客户端配置文件: /tmp/etc# cat x ...
- (转)Android 升级 ADT 之后报错之一 case语句 .
转:http://blog.csdn.net/wchinaw/article/details/7325641 下面文章大意是指:在一般的Android项目中,R类的常量都是用final定义的,但ADT ...
- #define SYSTEMSERVICE(_func) KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_func+1) 这
这个跟KeServiceDescriptorTable的结构有关 下面是KeServiceDescriptorTable的结构定义 KeServiceDescriptorTabletypedef st ...
- VS2010-MFC(常用控件:图片控件Picture Control)
转自:http://www.jizhuomi.com/software/193.html 本节主要讲一种简单实用的控件,图片控件Picture Control.我们可以在界面某个位置放入图片控件,显示 ...
- 多进程并发socket通信
实现多个客户端同时接入server端,并且可以同时向客户端发送信息 server端 def dunc(conn,client_addr): while True: data=conn.recv(102 ...
- 关于Delphi中的字符串的详细分析
关于Delphi中的字符串的详细分析 只是浅浅的解析下,让大家可以快速的理解字符串. 其中的所有代码均在Delphi7下测试通过. Delphi 4,5,6,7中有字符串类型包括了: 短字符串(S ...