在Xavier上另外配置OpenCv真jb恶心人,一万句fuck可以表达我此刻的心情
OpenCV4.0没有配置成功,编译thor用刷机时安装的opencv版本应该就可以,
一 关于ROS
域控制器烧写JetPack4.2
后,Tegra自动安装了ROS-melodic,opencv3.3.1
,但这个不是完整版的ROS,因为参考Ubuntu 18.04 + ROS Melodic 安装OpenCV,ROS中有3个opencv package:vision_opencv,cv_bridge,image_transport
,我在/opt/ros/melodic/share
中只见到了vision_opencv
文件夹,而且里面只包含了一个package.xml
,于是卸载原装ROS,重新安装,参考Ubuntu 18.04 安装 ROS,并解决 sudo rosdep init 各种问题。
重新安装ROS后,opt/ros/melodic/share
文件夹里多了很多内容,证明烧写进的ROS是不完整的
(2020.10.14更新)刷了米文JetPack4.4后,自带ROS-melodic,其是否完整好用并没有试验,sudo apt-get purge libopencv*
卸载刷机自带的OpenCV4.1.1后,ROS同时也被破坏,需要sudo apt-get purge ros-*
卸载ROS后重新安装。
二 关于OpenCV
1 烧写后原生opencv的版本和安装路径
参考linux下查看opencv安装路径以及版本号,用python2 python3
打印opencv的版本,和用pkg-config opencv --modversion
命令行查到的opencv版本都是3.3.1,用sudo find / -iname "*opencv*" > opencv_find.txt
列出opencv的安装路径。
2021.5.7更新
关于opencv.pc
文件的说明,以及源码编译opencv的位置、环境变量的配置,可以学习这篇极好的文章【CV实战】Ubuntu18.04源码编译安装opencv-3.4.X+测试demo
(2020.10.14更新) 执行pkg-config opencv --modversion
查opencv版本的原理是:在系统中搜索opencvx.pc
文件,文件中包含了opencv安装路径、头文件路径、库文件路径、版本等信息。
(2020.11.1更新) 刷机JetPack4.2后,系统中存在两个opencv.pc
:/usr/lib/aarch64-linux-gnu/pkgcfg/opencv.pc
和/usr/local/lib/pkgcfg/opencv.pc
,在CMakeLists.txt
中find_package{REQUIRED OpenCV}
或者执行pkg-cfg --modversion opencv
查看版本时,会优先在用户的库/usr/local/lib/
里搜索pkgcfg/opencv.pc
,进而按照.pc文件中指定的库目录和头文件目录路径搜索。如果/usr/local/lib/
中没有opencv.pc
,会进而搜索系统库/usr/lib/
中的pkgcfg/opencv.pc
。这个方法解决了xxx.h undefined reference cv::read()
等类似的问题。
2 卸载OpenCV
忽略此步骤,参考下面 2020.10.12更新的内容
参考Jetson TX2 卸载并安装OpenCV3.4.0,使用以下命令:
sudo apt-get purge libopencv*
sudo apt autoremove
sudo apt-get update
只删除了usr/lib/aarch64-linux-gnu
即系统里的libopencv*
,/usr/local/lib/
中的libopencv*
仍然存在,使用上一步的查看版本命令,仍能正常显示
(2020.11.1更新) 彻底删除用户空间中的opencv,除了执行以上命令,还需要执行:
sudo rm -r /usr/local/include/opencv/ /usr/local/include/opencv2/
//或者直接更改/usr/local/lib/pkgcfg/opencv.pc文件名字,系统就不会搜索到在用户空间中配置的opencv
3 安装OpenCV4.0.0
参考Jetson TX2 卸载并安装OpenCV3.4.0、嵌入式Xavier中配置ROS+OPENCV、Building OpenCV for Tegra with CUDA
大体流程是:安装各种依赖-》下载opencv、opencv_contrib源码-》cmake-》make-》make install
OpenCV是否需要GPU支持,是在cmake
命令里设置的
3 安装OpenCV3.4.6
(2020.10.12更新)前几天刷机JetPack4.4,自带OpenCV4.1.1,自带ROS(包含OpenCV3.2.0),darknet_ros在CV4.x中错误较多,卸载CV4.x,配置CV3.4.6,参考How to Install OpenCV (3.4.0) on Jetson TX2,配置成功后,darknet_ros可以编译成功。
注意:1、$ sudo ln -sf tegra/libGL.so libGL.so
这句没有执行,因为tegra文件夹中没有libGL.so
2、执行cmake
时,将CUDA_ARCH_BIN="6.2"
改成CUDA_ARCH_BIN=${cuda_compute}
,这里没有深究CUDA_ARCH_BIN
,只是感觉JetPack4.4,CUDA10.2对应的CUDA_ARCH_BIN
不是6.2,修改后应该是系统自己查找匹配版本。
(2021.5.7更新)我使用的cmake
#!/bin/bash
cmake \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr \
-D BUILD_PNG=OFF \
-D BUILD_TIFF=OFF \
-D BUILD_TBB=OFF \
-D BUILD_JPEG=OFF \
-D BUILD_JASPER=OFF \
-D BUILD_ZLIB=OFF \
-D BUILD_EXAMPLES=ON \
-D BUILD_opencv_java=OFF \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=ON \
-D ENABLE_PRECOMPILED_HEADERS=OFF \
-D WITH_OPENCL=OFF \
-D WITH_OPENMP=OFF \
-D WITH_FFMPEG=ON \
-D WITH_GSTREAMER=ON \
-D WITH_GSTREAMER_0_10=OFF \
-D WITH_CUDA=OFF \
-D WITH_GTK=ON \
-D WITH_VTK=OFF \
-D WITH_TBB=ON \
-D WITH_1394=OFF \
-D WITH_OPENEXR=OFF \
-D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.2 \
-D CUDA_ARCH_BIN=6.2 \
-D CUDA_ARCH_PTX="" \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.4.0/modules/ \
../
3 配置OpenCV3.2.0
(2020.10.14更新) opencv3.2.0是安装ROS时自带的,不需要另外配置,这里的问题是编译darknet_ros
时怎样让系统使用cv3.2.0的库,同时解决下面BUG 4的版本冲突问题。
刷机miivii JetPack4.4后,卸载opencv4.1.1 -> 卸载ROS,此时在系统中搜索opencv
,发现opencv的各种库和配置文件都被删除了。接下来安装ROS,发现opencv3.2.0和4.1.1又都回来了,不清楚域控制器是什么机制,怎么又把4.1.1搞回来了。在编译darknet_ros
时,显示找到的OpenCV是4.1.1版本,不是我要的3.2.0版本。
编译程序链接opencv库的设置可以参考配置opencv cmake,链接库文件的规则与四个.cmake
文件有关:OpenCVConfig.cmake OpenCVConfig-version.cmake OpenCVModules.cmake OpenCVModules-release.cmake
我将4.1.1版本的4个文件更换为3.2.0版本的4个文件,在OpenCVConfig.cmake
中修改opencv的安装路径:
在OpenCVModules.cmake
中修改包含的库,添加4.1.1中没有被3.2.0包含的库,并add_libraries()
:
在OpenCVModules.cmake
中修改安装路径,换为4.1.1版本的安装路径:
BUG 1 安装依赖libjasper-dev
无法定位包
参考Ubuntu18.04下安装OpenCv依赖包libjasper-dev无法安装的问题中的第一条评论
,将deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
添加到/etc/apt/sources.list
中,sudo apt-get update
没有问题后,执行sudo apt-get install libjasper1 libjasper-dev
BUG 2 cmake时Could not find OpenBLAS *
参考demo开发之问题04编译ubuntu环境下编译opencv中的5,也可以直接参考Correction in OpenCV’s default CMAKE search Path for OpenBLAS Library on Ubuntu-64bit Machines [Solution] ,设置路径如下图:
BUG 3 ccache not found
$ sudo apt-get install ccache
BUG 4 opencv多版本冲突(2020.10.12更新)
先配置OpenCV3.4.6,再安装ROS,结果系统中同时存在3.2.0 3.4.6和4.4.1三个版本的相关文件
(2020.10.14更新)
卸载3.4.6,把4.1.1的4个.cmake
文件替换为3.2.0,编译成功了darknet_ros,车道线加速项目可以正常运行,但是域控制器自带的启动摄像头、检测行人车辆自行车的程序报错:
可以看出,问题出在/opt/miivii/lib/
系统demo依赖的库文件上。初步推测:JetPack4.4版本中,自带的demo程序、依赖的库有改动。
尝试将JetPack4.2中的/opt/miivii/lib/libmvgmslcamera.so
复制过来,$ sudo ln sf libmvgmslcamera.so libmvgmslcam.so
建立符号链接,发生错误:
注意:建立的符号链接不是浅蓝色,而是红色,可能是被链接的文件损坏或者不存在。
(2021.5.7更新)
BUG5 fatal error:boostdesc_bgm.i:No such file or directory
opencv/opencv_3rdparty
切换分支,下载vgg…i和boostdesc…i文件,复制到opencv-3.4.0/opencv_contrib-3.4.0/modules/xfeatures2d/src/
中
BUG6 fatal error: opencv2/xfeatures2d/cuda.hpp:No such file or directory
cuda.hpp
路径opencv-3.4.0/opencv_contrib-3.4.0/modules/xfeatures2d/include/opencv2/xfeatures2d/cuda.hpp
网上有3种方法:
- 老版本的cmake 不支持http协议,文件下载失败
- 在
opencv/modules/stitching/CMakeLists.txt
中添加绝对路径INCLUDE_DIRECTORIES("/works/opencv-3.4.0/opencv_contrib-3.4.0/modules/xfeatures2d/include")
,或者直接在出错的.hpp
中#include "cuda.hpp"
中直接写死绝对路径 - cmake -DBUILD_opencv_xfeatures2d=OFF …
试了后都没有解决,后直接在opencv/modules/stitching/include/opencv2/
下新建文件夹xfeatures2d/
,将cuda.hpp
复制过来,没报错