(二)树莓派4B和NCS2配置时cmake编译报错以及import error:can‘t find moudle named “libopencv_ml.so.4.1“等等各种踩坑解决办法

笔者近期在继续学习树莓派,搭配英特尔神经计算棒二代NCS2进行边缘段AI硬件平台部署。

**

一.按照网上教程竟卡壳?

**.一切按照网上相关亲娘级无痛教学开始无脑ctrl+c/v,但就在按照openvino工具包官方推荐示例中camke编译出错了,起初是在执行“make -j2 object_detection_sample_ssd”时报错,完整报错如下:

Linking CXX executable ../armv7l/Release/object_detection_sample_ssd /usr/bin/ld: warning: libopencv_videoio.so.4.1, needed by ../armv7l/Release/lib/libformat_reader.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libopencv_imgcodecs.so.4.1, needed by ../armv7l/Release/lib/libformat_reader.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libopencv_imgproc.so.4.1, needed by ../armv7l/Release/lib/libformat_reader.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libopencv_core.so.4.1, needed by ../armv7l/Release/lib/libformat_reader.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: ../armv7l/Release/lib/libformat_reader.so: undefined reference to `cv::fastFree(void*)' /usr/bin/ld: ../armv7l/Release/lib/libformat_reader.so: undefined reference to `cv::resize(cv::_InputArray const&, cv::_OutputArray const&, cv::Size_, double, double, int)' /usr/bin/

这个问题本身已经让笔者丈二和尚摸不着头脑了,后来我想要跳过这个示例,看看其他示例行不行,结果是也不行,因此就自然而然地猜测是opencv版本的错误,于是在命令行输入:

python3
import cv2

结果报错:提示引用错误。不能找到名为“libopencv_ml.4.1”的文件,

二.艰辛找包历程

.我立刻想到进行全文件搜索:输入

sudo find -name "libopencv_ml.so.4.1"

结果竟然提示找不到。

三.经历了数次怀疑人生,重装系统再战

此时我怀疑是链接库什么的出了问题,就仿照网上一些博主给出的相关操作,企图进行链接库修正,结果不但没好,还浪费了许多时间.
后来看到一篇关于利用paddle-lite在树莓派上部署识别平台的博客,作者提示用官方原装系统编译就会出错,建议用ubntnu的系统,但是我在网上又看了不少博客,直觉告诉我还是官方的系统比较稳定和兼容,于是我还是选择重装树莓派官方buster的系统。
重装过后,我按照原有操作,重新进行环境变量的相关配置,但就在我执行编译命令“make -j2 object_detection_sample_ssd”时,老朋友又出现了,跳过这个,在命令行输入

python3
import cv2

结果仍然提示找不到该"libopencv_ml.so.4.1"文件,但是别人能弄,我那也弄,所以就仔细思考我查找文件的方式,最后我选择关键字搜索方式而不是文件名搜索方式,即将之前的代码改为:

sudo find -name "libopencv_ml.so.4.1*"

结果竟然在inference_engine_vpu_arm/…/lib里面找到了名叫“libopencv_ml.so.4.1.2”的文件,这我就明白了,原来是文件名称的关系啊,于是我把里面的XXX.so.4.1.2文件全部改成“XXX.so.4.1”,这时候我再进行import的时候,它可以用了,但是编译时却提示找不到“libopencv_ml.so.4.1.2”文件了,我去,原来同一个文件在import cv2和编译这两个不同的操作下必须得是两个名字啊,明白了之后,我又把源文件里面的XXX.so.4.1文件全部复制一份,复制出来的文件名字全命名为XXX.so.4.1.2,这样我再编译的时候,再import cv2的时候,就再也没有出错过。

四.翻车总结,路径把握不对

大家一定要注意,执行apt-get install 安装相关包

sudo apt-get install opencv-python

和执行pip3 install 安装相关包

`sudo pip3 install opencv-python`

所安装的路径是不一样的,一定要用apt-get命令安装,因为pip3 install安装的包在跑demo的时候根本就调用不到,所以虽然我们安装了opencv,但仍然报错提示说找不到cv2 !!

五.成功运行示例

下面是成功运行人脸检测demo的效果,虽然摄像头略显辣鸡,但结合计算棒的画面帧率不要太爽好吗??

此处贴上一位网友大大的私信,如果有遇到和这位小伙伴同样困扰的朋友可以根据我说的照做一遍就好啦

(二)树莓派4B和NCS2配置时cmake编译报错以及import error:can‘t find moudle named “libopencv_ml.so.4.1“等等各种踩坑解决办法_第1张图片

六.学习经验总结

搞树莓派这么久,总结起来其实很多软件问题总结起来无非是路径错误、命名错误之类的,驱动问题大多是因为没有设置好相关分辨率、SSH、VNC等等问题,甚至一般重启过后就能解决。网上相关的资料已经非常全面了,按照相关教程基本不会出错。
我反思了一下,之所以我断断续续搞了好多天树莓派,到最后临近放弃了才成功,究其原因就是我对linux操作系统及文件路径相关的不熟悉,导致我对很多命令的内涵理解得不透彻,在此希望每个新学习树莓派的人都能够坚持下去,只要一直坚持找问题,总结原因,没有什么bug是解决不了的!!

笔者会持续更新树莓派结合英特尔神经棒二代的相关踩坑经历,感兴趣的朋友可以持续关注!

你可能感兴趣的:(机器视觉算法与部署,深度学习,神经网络,机器学习,python,opencv)