赞
踩
目录
一.Cmake信息栏缺失'python3'部分,我的解决方法如下:
三.安装之后python不能import cv2/只有特定版本可以,解决方法:
本人在NX板上以及Windows系统上多次通过cmake安装过OpenCV,包括4.x和3.x的版本,踩坑无数,这方面的资料我看过很多,但是大多都比较老了,所以想分享一下自己的经验,希望能帮到大家。
注意!在进行操作之前要了解这个教程是否适合你,如果你的配置与我下面所述不同,可能会遇到各种问题。
网上类似的教程有很多,末尾贴了本文参考的或者比较有用的文章,读者可以根据需要浏览。
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后,如果消息栏有红色警告或报错,一定要解决好,比如关于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.)的操作即可。
本人踩过的坑不计其数,但大多都在解决后没什么印象了。这些都是最近遇到的问题,或者曾经遇到的印象很深的问题。
大多数问题都是以下原因导致的,在上网搜索解决方案之前,可以先检查是否有以下情况:
- #在.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
- >>> 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博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。