记录下自己初次移植opencv到开发平台的血泪史,整个过程最重要就是耐心,在大量错误报告中找到关键提示信息,在一次次失败后能保持平静,最终才能如愿以偿,希望对大家有所帮助。
opencv与opencv_contrib版本必须一致才行!
opencv:https://github.com/opencv/opencv/releases
opencv_contrib:https://github.com/opencv/opencv_contrib/releases
选择zip格式,在使用winscp传入开发板前最好先解压好。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
不出意外的话,除了libjasper_dev这个包以外,其他的包都能正确的安装好
当你执行
sudo apt-get install libjasper_dev
这条语句时会抛出下面这条错误:
$errorE:unable to locate libjasper-dev
办法1:
根据网上的办法,在终端输入以下指令
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev
然而我在第二条指令就卡住了:
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32
解决:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5
后面的40976EAF437D05B5这样的代码根据你的报错做适当修改
继续执行sudo apt update指令,若是顺利执行,那么后面的安装指令也能很快做完,然而在我这里还是不行
http://cn.archive.ubuntu.com/ubuntu/dists/xenial-updates/main/binary-arm64/Packages 404 Not Found [IP: 91.189.91.23 80]
这个源网站已经404了,找不到了
最后尝试了各种办法,修改dns,科学s网都不能解决这个问题。
因为我使用的是arm64架构,然鹅国内外镜像网站关于arm64架构的驱动已经没有了,我只找到了一家国外网站拥有该架构的资源。所以无论我怎么改源网站,或是上网方式,都是徒劳的
办法2:
https://blog.csdn.net/we1583004we/article/details/80001059
我并没有尝试过这个办法,因为作为新手的我不清楚这样做会产生什么样的结果
但是根据评论的反馈,这个办法似乎行得通,若读者也同样不清楚这样做的后果,建议不要轻易尝试
办法3:
https://blog.csdn.net/pekingfloater/article/details/88997697
受到这篇文章的启发,我准备通过直接下载deb包,使用dpkg指令安装libjasper_dev驱动
下载网址1:https://packages.ubuntu.com/xenial/libjasper1
下载网址2:http://security-cdn.debian.org/debian-security/pool/updates/main/j/jasper/
使用这条语句查看架构
sudo dpkg --print-architecture
注意下载跟你系统对应架构的安装包!!!
如果你使用的架构能在网址2中找到,那么很幸运这个问题很快就能解决了
将包下载到系统的任意位置,cd到该目录下
dpkg -i /path/packagename.deb
其中path是路径,packagename是包名。
…
…
最终我花了很久,在GitHub上搜,在Google上查到了这个网站
https://launchpad.net/ubuntu/+source/jasper/1.900.1-debian1-2.4ubuntu1/+build/9293767
是arm64!
安装失败。。。新的错误冒出来了,缺少依赖项xxx
下面是完整的依赖关系(有时间会上传到网盘)
libjpeg-turbo8
libjpeg8 (8c-2ubuntu8)
libjasper1_1.900.1-debian1-2.4ubuntu1.2
libjasper-dev_1.900.1-debian1-2.4ubuntu1
从上之下依次安装,大功造成!
使用sudo apt-get install libjasper_dev指令检测是否安装成功
sudo apt-get install cmake-gui
至此安装opencv所需环境搭建完成
首先将解压好的opencv文件夹与opencv_contrib文件夹传入设备(我是在移动开发平台安装opencv)
在opencv文件夹下新建名为build的文件夹,剪切opencv_contrib文件夹至opencv目录下
进入build目录下,打开终端,或者使用cd指令进入build目录输入:
cmake-gui ..
打开Cmake GUI界面
一开始红色区域为空白,确认source code路径和build路径无误后configure直接finish(默认就可以)出现上图
需要修改的一共有3处
1.在CMAKE_BUILD_TYPE 处键入RELEASE
2.勾选BUILD_opencv_world项
3.在OPENCV_EXTRA_MODULES_PATH处选择指向opencv_contrib下modules文件夹的目录(进入modules文件夹后点击choose)
接着点击Generate button,需要等待一段时间,完成后退出ui界面,回到终端键入:
sudo make
继续等待很长一段时间(第一次大约1h)
接着我这又报错了。。没有报错的同学请忽视。。
cmake_symlink_library: System Error: Operation not permitted
又是缺少权限吗?但是我已经在make前加了sudo了啊
切换超级管理员,还是报错
经查阅,这是因为建立链接权限不足而报错
接着我又使用chmod修改目录的权限,,,木大木大木大
最后参考9楼的发言终于解决了这个问题
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3595245&fromuid=26971268
由于根目录不够大,所以我习惯把东西放在其他的存储设备里,然后通过挂载的方式使用它
将整个opencv文件夹移植到根目录下,总之要在挂载根目录的存储设备里,我放在了/home下
然后打开cmake-gui,点开file菜单,delete cache之后重新确认目录,configure…之后的操作不再复述
终于平稳度过了编译环节…
安装:
sudo make install
很快就完成了
更新动态链接库:
sudo ldconfig
进入python import cv2,未报错
THE END
参考:https://blog.csdn.net/echoamor/article/details/83022352
https://blog.csdn.net/pekingfloater/article/details/88997697
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3595245&fromuid=26971268