目录

前言

完整流程

一. 准备工作

二. 安装+编译+生成

三. 添加环境变量

四. 失败了?试试这个

踩坑记录

一.Cmake信息栏缺失'python3'部分,我的解决方法如下:

二.make过程中报错导致make停止:

三.安装之后python不能import cv2/只有特定版本可以,解决方法:

小结

前言

本人在NX板上以及Windows系统上多次通过cmake安装过OpenCV,包括4.x和3.x的版本,踩坑无数,这方面的资料我看过很多,但是大多都比较老了,所以想分享一下自己的经验,希望能帮到大家。

注意!在进行操作之前要了解这个教程是否适合你,如果你的配置与我下面所述不同,可能会遇到各种问题。

必需:系统是Ubuntu 20.04,安装了CUDA和cudnn;建议:要安装的OpenCV版本≥4.5(本文是4.8.1),4.5以下适当降低cmake版本,5.0及以上建议使用更高版本cmake;其它:Jetpack(内含OpenCV,安装教程贴在文章结尾了),本文版本是5.1.2,版本和我不同也可能会出问题。

网上类似的教程有很多,末尾贴了本文参考的或者比较有用的文章,读者可以根据需要浏览。

完整流程

一. 准备工作

        1. 更新你的pip,这同时也会让你的gcc编译器升到高版本:

sudo apt-get update

#下载pip

sudo apt-get install pip

#或更新你的pip

pip install --upgrade pip

        确认gcc版本,我的是9.4.0,版本在8.x或9.x应该都没问题。

gcc --version

         2. 安装Cmake,我的版本是3.26.5,和我用一个版本是最稳的。(编译高版本CV就用高版本cmake,反之就降cmake版本)可以在Cmake官网上进行下载安装,或者用这个压缩包链接:cmake-3.26.5-linux-aarch64.tar.gz (github.com)。

        具体操作可以参考这篇文章。

        3. 卸载Jetpack自带的OpenCV(如果没有就跳过此步),这个CV是不支持CUDA的:

sudo apt-get purge libopencv*

        如果你有其它版本OpenCV,也可以直接删除opencv文件夹。多版本共存是可行的,参考Ubuntu下多版本OpenCV共存和切换_ubuntu 多个opencv版本-CSDN博客,但在我的系统上出现了jtop报错的问题。

二. 安装+编译+生成

        1. 首先在GitHub下载OpenCV以及OpenCV_contrib的源码,注意二者版本要对应。        

        OpenCV:Releases · opencv/opencv (github.com)

        OpenCV_contrib:Tags · opencv/opencv_contrib (github.com)

        opencv-4.8.1解压缩到主文件夹下即可,contrib文件夹解压到opencv-4.8.1文件夹中。 

        2.  打开终端操作:

#小技巧:按Tab可以自动补全文件名

jetson@ubuntu:~$ cd opencv-4.8.1/

#新建build文件夹

jetson@ubuntu:~/opencv-4.8.1$ mkdir build

#安装依赖项,可根据自己需要进行增删

jetson@ubuntu:~/opencv-4.8.1$ sudo apt-get install libgtk2.0-dev pkg-config libpng-dev libjpeg-dev libtiff-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev gstreamer1.0-plugins-base python3-dev python3-numpy python3-py

#打开cmake的GUI界面

jetson@ubuntu:~/opencv-4.8.1$ cmake-gui

        3. 在Cmake中操作:

        如图:

        然后点击左下方‘Configure’,默认生成器为Unix Makefiles不用改,点'Finish',等待配置完毕。(注意,网络必需稳定连接,有‘技术’是最好的,GitHub的链接超时可以尝试连手机热点。)这一次在信息栏应该没有红色报错,完成后的信息栏如图(这是我最后configure完的结果,第一次configure可能没有这么多内容,但是python3路径必须要有):

        注意!检查信息栏是否提供了python3的注入路径。如图是没有的情况:

         如果出现这个问题(很可能是cmake的bug),那么后续不会将.so文件注入到你的python包路径中,解决方法看下面踩坑记录。      

        接下来开始配置编译选项。分享一下我自己的,如下图。绿色框是必选,黄色框是根据自己需要进行选择。没有框的是默认的或者我不了解的。可以悬停在选项上看解释说明,也可以在opencv官网查看说明文档:结合这章配置选项参考和这章老版的开发板生成教程。要注意以下几点:

在勾选好之后,再次点击configure才能看到更多可配置选项;注意修改CUDA_ARCH_BIN(GPU算力),Xavier NX为7.2;如果你有多个版本的python3,可以在INCLUDE_DIR处写入它们的路径;OPENCV_PYTHON3_VERSION这个选项不知道是干嘛的;ENABLE_FAST_MATH提示的是不推荐,可能是容易报错吧。

        点击Configure后,如果消息栏有红色警告或报错,一定要解决好,比如关于WebP的报错,可以把WITH_WebP关掉(可能是依赖项没装?反正这个格式也没什么用)。有下载失败的包,可以取消勾选相关选项(如果你不用的话,比如wechat_qrcode),或者用别的方法下载到.cache文件夹中。

        直到没有红色信息了,点击Generate。提示"Generating done"后,进行下一步。

        4. 在build文件夹下打开终端操作:

#-j6指的是cpu核心数,NX板应该把POWER MODE改成6CORE

jetson@ubuntu:~/opencv-4.8.1/build$ sudo make -j6

         进入漫长的生成过程。中途出现报错会导致生成终止。如果你的opencv,cmake和gcc版本没问题,那么多半是上一步configuration的问题,根据文件提示进行排查,取消勾选可能造成问题的选项(Configure的消息栏中一定不能有warning)。此外,还需要sudo make clean来清除之前生成的文件(如果想碰运气也可以不clean,且单个文件的报错一般不需要clean)。

        生成到100%后即为完成。依然在build文件夹下的终端操作:

#打包安装opencv

sudo make install

        如果你幸运地到达了这一步,那么opencv的文件已经打包安装好,工作也基本完成了。

三. 添加环境变量

        在终端操作:

sudo gedit /etc/ld.so.conf.d/opencv.conf

        文件内写入lib的路径,Configure时没改的话就是这个:

/usr/local/lib

        保存后在终端更新一下:

sudo ldconfig

        添加pkg-config路径:

sudo gedit /etc/bash.bashrc

#在文本末尾添加这两句后保存

# PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

# export PKG_CONFIG_PATH

#终端下更新配置,然后可能要重启一下终端

source /etc/bash.bashrc

sudo updatedb

        注:如果出现报错:

sudo: updatedb: command not found

        解决方法是安装mlocate:

sudo apt-get install mlocate

         至此安装完成,可以使用jtop或者"pkg-config --modversion opencv4"命令来查看opencv版本。

四. 失败了?试试这个

        考虑到大家可能被生成失败搞得心态崩掉,我在这里贴上一个更稳定的方法,大家可以尝试一下。注意:版本对应、网络流畅的前提仍是必须的。尝试之前建议你删除整个opencv文件夹,重新解压一个新的,并且执行一次sudo make clean。

        在(三.-3.)这步,不使用cmake的gui界面,直接在(build文件夹下的)终端执行以下命令进行编译:

#在build文件夹下执行

sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/ -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -D BUILD_opencv_legacy=ON -D BUILD_opencv_python3=ON -D BUILD_opencv_python2=OFF -D ENABLE_PRECOMPILED_HEADERS=OFF -D CUDA_ARCH_BIN='7.2' -D WITH_CUDA=1 -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D OPENCV_GENERATE_PKGCONFIG=1 -D WITH_GTK_2_X=ON ..

        这样configure出来的opencv只设置了一些必需的功能,没有对其它选项作改动。

        完成后继续执行(三.-4.)的操作即可。

踩坑记录

    本人踩过的坑不计其数,但大多都在解决后没什么印象了。这些都是最近遇到的问题,或者曾经遇到的印象很深的问题。

一.Cmake信息栏缺失'python3'部分,我的解决方法如下:

cmake-gui中,点击左上角Flie-->Delete Cache清除缓存;选择好source和build的路径之后,先点击'Add Entry',手动加入python3配置,如图:手动生成这两项后,再点击configure,信息栏python3的描述应该就出来了。

二.make过程中报错导致make停止:

        大多数问题都是以下原因导致的,在上网搜索解决方案之前,可以先检查是否有以下情况:

在cmake进行configure的过程中,信息栏的红字warning没有解决;cmake和gcc版本太高或太低都会导致编译错误,尤其是cmake应该调整到合适的版本;之前make失败后重新开始,没有进行sudo make clean。

三.安装之后python不能import cv2/只有特定版本可以,解决方法:

首先你要确定在configure时你正确地添加了PYTHON3_INCLUDE_DIR,也就是在cmake的信息栏中是有python3描述的;进入'opencv-../build/lib/python3/'文件夹,会找到'cv2.cpython-3xx-aarch64-linux-gnu.so'文件,这个文件是对应一个python版本的,如果没有你需要的版本,说明configure的时候你没有添加它。把.so文件复制到你python的lib文件夹中,以系统自带的python3.8为例: #在.so文件所在文件夹中执行

sudo cp cv2.cpython-38-aarch64-linux-gnu.so /usr/local/lib/python3.8/

#进入目标文件夹

cd /usr/local/lib/python3.8/

#将.so文件重命名为cv2.so

sudo mv cv2.cpython-38-aarch64-linux-gnu.so cv2.so 打开python(不要在lib文件夹下),输入import cv2,成功: >>> import cv2

>>> cv2.__version__

'4.8.1'

小结

后续遇到更多问题我会补充和更新。

以下是对我有帮助的参考文章:

安装Jetpack的教程:

【精选】在VMware虚拟机中基于Ubuntu18.04.5安装Jetpack4.5对Xavier进行刷机-CSDN博客

Jetson Xavier NX重装Jetpack5.0.2系统、安装CUDA11.4、Cudnn8.4.1、Tensorrt8.4._jetson nx安装pip3-CSDN博客

配置NX/编译OpenCV的教程:

Jetson Xavier NX学习笔记(三)系统烧录+开机教程+YOLOv7环境搭建+错误总结(详细版)_jetson如何开机-CSDN博客 【精选】Jetson AGX Xavier编译CUDA版本的OpenCV4.5.0-CSDN博客

相关链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: