ubuntu22.04@Jetson Orin Nano之OpenCV安装

1. 源由

昨天用Jetson跑demo程序发现帧率很慢(只有10FPS左右),按照视频文件怎么说应该有30FPS。但是为什么jetson orin nano跑不起来呢???

dnn_object_detection_embedded_device

想着,估计是GPU没有跑起来,正好凑着调试了下板子,记录、整理下资料。

2. 分析

从现象上看,OpenCV运行的时候没有跑GPU,从而导致高价买的Jetson Orin Nano连这么简单的Demo都跑不起来。

接下来,就先看下板子运行的环境:

  • ubuntu22.04/jammy/aarch64
$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.4 LTS
Release:	22.04
Codename:	jammy

$ uname -a
Linux daniel-nvidia 5.15.122-tegra #1 SMP PREEMPT Mon Dec 18 21:24:25 PST 2023 aarch64 aarch64 aarch64 GNU/Linux
  • OpenCV版本:4.8.0
$ opencv_version
4.8.0

$ python3
Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> print(cv2.__version__)
4.8.0
>>> 
  • 安装最新OpenCV4.9.0版本
  1. 与之前《ubuntu22.04@laptop OpenCV安装》版本一致
  2. 安装或者升级Jetson Orin Nano上OpenCV4.8.0版本
  3. 官方论坛讨论:NVIDIA: install OpenCV for python3 in Jetson Nano
  4. Google的网上资料:Install OpenCV on Jetson Nano
  5. Google的教学视频

OpenCV with CUDA in Python on Jetson

3. 证实

要正式是否真的是OpenCV库对GPU的支持问题导致前面验证FPS帧率低,那么就需要通过jtop指令来查看。

有朋友问:你怎么知道的这些?
Ans: 其实我并不知道,是我搜出来的。其实就这么简单,并不是我知道的多,是网上这些问题很多人都已经早就解决了。即使真的有没有人解决的,那么也是有办法的,只不过思路和这个不太一样。

3.1 jtop安装

$ pip3 --version
$ sudo -H pip3 install --no-cache-dir jetson-stats
$ sudo systemctl restart jtop.service
$ sudo reboot

注:一定要重启板子,否则无效。

3.2 jtop指令

$ jtop -h
usage: jtop [-h] [--health] [--error-log] [--no-warnings] [--restore] [--loop] [--color-filter] [-r REFRESH] [-p PAGE] [-v]

jtop is system monitoring utility and runs on terminal

options:
  -h, --help            show this help message and exit
  --health              Status jtop and fix (default: False)
  --error-log           Generate a log for GitHub (default: False)
  --no-warnings         Do not show warnings (default: False)
  --restore             Reset Jetson configuration (default: False)
  --loop                Automatically switch page every 5s (default: False)
  --color-filter        Change jtop base colors, you can use also JTOP_COLOR_FILTER=True (default: False)
  -r REFRESH, --refresh REFRESH
                        refresh interval (default: 1000)
  -p PAGE, --page PAGE  Open fix page (default: 1)
  -v, --version         show program's version number and exit

3.3 GPU支持情况

OpenCV: 4.8.0 with CUDA: NO,所以该版本不支持GPU。

在这里插入图片描述

4. 安装OpenCV

两个链接脚本供参考安装:

  1. JetsonHacksNano/buildOpenCV
  2. mdegans/nano_build_opencv

为了更好的配合我们的例子,就整合到SnapLearnOpenCV/scripts中供大家参考,上述脚本支持:

  • 笔记本电脑(64位普通CPU)安装:install_opencv_for_laptop.shubuntu22.04@laptop OpenCV安装
  • AI最火的(Jetson Orin Nano)安装:install_opencv_for_jetson.sh

4.1 修改内容

$ git diff
diff --git a/build_opencv.sh b/build_opencv.sh
index c12bb40..891eea3 100755
--- a/build_opencv.sh
+++ b/build_opencv.sh
@@ -45,8 +45,8 @@ setup () {

 git_source () {
     echo "Getting version '$1' of OpenCV"
-    git clone --depth 1 --branch "$1" https://github.com/opencv/opencv.git
-    git clone --depth 1 --branch "$1" https://github.com/opencv/opencv_contrib.git
+    git clone --depth 1 --branch "$1" git@github.com:opencv/opencv.git
+    git clone --depth 1 --branch "$1" git@github.com:opencv/opencv_contrib.git
 }

 install_dependencies () {
@@ -63,9 +63,8 @@ install_dependencies () {
         libatlas-base-dev \
         libavcodec-dev \
         libavformat-dev \
-        libavresample-dev \
         libcanberra-gtk3-module \
-        libdc1394-22-dev \
+        libdc1394-dev \
         libeigen3-dev \
         libglew-dev \
         libgstreamer-plugins-base1.0-dev \
@@ -90,8 +89,6 @@ install_dependencies () {
         libxvidcore-dev \
         libx264-dev \
         pkg-config \
-        python-dev \
-        python-numpy \
         python3-dev \
         python3-numpy \
         python3-matplotlib \
@@ -103,14 +100,13 @@ install_dependencies () {
 configure () {
     local CMAKEFLAGS="
         -D BUILD_EXAMPLES=OFF
-        -D BUILD_opencv_python2=ON
         -D BUILD_opencv_python3=ON
         -D CMAKE_BUILD_TYPE=RELEASE
         -D CMAKE_INSTALL_PREFIX=${PREFIX}
         -D CUDA_ARCH_BIN=5.3,6.2,7.2,8.7
         -D CUDA_ARCH_PTX=
         -D CUDA_FAST_MATH=ON
-        -D CUDNN_VERSION='8.0'
+        -D CUDNN_VERSION='8.9'
         -D EIGEN_INCLUDE_PATH=/usr/include/eigen3
         -D ENABLE_NEON=ON
         -D OPENCV_DNN_CUDA=ON

4.2 Python2环境【不需要】

  • python2环境:python-dev python-numpy
  • OpenCV编译选项:-D BUILD_opencv_python2=ON

4.3 ubuntu22.04环境

  • libavresample-dev
  • libdc1394-22-dev变更为libdc1394-dev

4.4 国内/本地环境问题

  • 将https链接调整为git库链接
-    git clone --depth 1 --branch "$1" https://github.com/opencv/opencv.git
-    git clone --depth 1 --branch "$1" https://github.com/opencv/opencv_contrib.git
+    git clone --depth 1 --branch "$1" git@github.com:opencv/opencv.git
+    git clone --depth 1 --branch "$1" git@github.com:opencv/opencv_contrib.git
  • git库采用git协议才能下载
$ git config --global "url.ssh://git@ssh.github.com:443/.insteadOf" git@github.com:

4.5 cudnn版本问题

《Linux 36.2@Jetson Orin Nano基础环境构建》安装的是8.9.4.25.

-        -D CUDNN_VERSION='8.0'
+        -D CUDNN_VERSION='8.9'

5. 总结

修改完上述脚本后,可以直接执行脚本指令:

$ git clone git@github.com:mdegans/nano_build_opencv.git
$ cd nano_build_opencv
$ nano build_opencv.sh
$ ./build_opencv.sh

或者
$ git clone git@github.com:SnapDragonfly/SnapLearnOpenCV.git
$ cd SnapLearnOpenCV/scripts
$ ./install_opencv_for_jetson.sh

大致耗时约1个小时???没有计时,反正也挺快的。执行opencv_version python jtop指令:

$ echo $PATH
/home/daniel/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

$ opencv_version
4.9.0

$ python 
Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> print(cv2.__version__)
4.9.0
>>> 

$ jtop

在这里插入图片描述

最后,关于使用GPU和使用CPU对Demo的影响:

dnn_object_detection_jetson_orin_nano

注:本次环境安装为遇到默认路径导致的优先级问题。

6. 参考资料

【1】ubuntu22.04@laptop OpenCV安装
【2】Linux 36.2@Jetson Orin Nano之基础环境构建
【3】ubuntu22.04@laptop OpenCV定制化安装
【4】Github操作网络异常笔记

Jetson Orin Nano是一款基于NVIDIA Jetson平台的嵌入式计算模块,主要用于AI边缘计算应用。要在这个设备上安装Ubuntu 22(代指Ubuntu 22.04 LTS),你需要按照以下步骤操作: 1. **准备硬件**:确保你的Jetson Orin Nano已经连接到网络,并且电源供应充足。 2. **下载镜像文件**:访问Ubuntu官方网站(https://ubuntu.com/) 下载适用于Jetson的64位Linux映像文件。由于Orin Nano尚未正式支持Ubuntu 22,可能会推荐使用稳定版的20.04或更高版本。 3. **制作启动盘**:你可以使用 Rufus (Windows) 或 Etcher (跨平台) 来创建一个USB启动盘,将下载好的ISO镜像加载进去。 4. **设置BIOS**:进入你的Jetson的BIOS设置,确保USB选项被启用作为引导设备。 5. **重启并安装**:重启Jetson,保持USB插入,然后选择从USB启动。开始Ubuntu安装过程,按照屏幕提示完成语言选择、分区设置以及软件许可协议等步骤。 6. **安装驱动**:安装完成后,因为Jetson需要特定的CUDA和GPU驱动,记得去NVIDIA开发者网站(Nvidia Developer Zone) 官方下载并安装针对Jetson Orin Nano的驱动程序。 7. **配置环境**:最后,更新系统包列表,安装必要的工具,并配置SSH服务,以便远程管理你的Jetson板。 请注意,Jetson Orin Nano的官方支持可能还在持续中,所以在安装过程中如果遇到任何问题,建议查阅NVIDIA的相关文档或者社区论坛寻求帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值