ubuntu22.04@Jetson OpenCV安装

ubuntu22.04@Jetson OpenCV安装

  • [1. 源由](#1. 源由)
  • [2. 分析](#2. 分析)
  • [3. 证实](#3. 证实)
    • [3.1 jtop安装](#3.1 jtop安装)
    • [3.2 jtop指令](#3.2 jtop指令)
    • [3.3 GPU支持情况](#3.3 GPU支持情况)
  • [4. 安装OpenCV](#4. 安装OpenCV)
    • [4.1 修改内容](#4.1 修改内容)
    • [4.2 Python2环境【不需要】](#4.2 Python2环境【不需要】)
    • [4.3 ubuntu22.04环境](#4.3 ubuntu22.04环境)
    • [4.4 国内/本地环境问题](#4.4 国内/本地环境问题)
    • [4.5 cudnn版本问题](#4.5 cudnn版本问题)
  • [5. 总结](#5. 总结)
  • [6. 参考资料](#6. 参考资料)

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.sh -- ubuntu22.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 国内/本地环境问题

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操作网络异常笔记

相关推荐
劳工小朋友9 分钟前
为什么神经网络的可解释性差?
人工智能·深度学习·神经网络
炸膛坦客11 分钟前
神经网络入门实战:(一)神经网络解决的两种问题,以及AI、机器学习、深度学习三者之间的逻辑关系
人工智能·深度学习·机器学习
CoderIsArt13 分钟前
基于 RBF 神经网络整定的 PID 控制
人工智能·深度学习·神经网络
ZStack开发者社区15 分钟前
云轴科技ZStack亮相2024 IDC中国生态峰会,共塑AI时代IT生态新格局
人工智能·科技
Guofu_Liao17 分钟前
大语言模型---ReLU函数的计算过程及其函数介绍
人工智能·语言模型·自然语言处理
码蜂窝编程官方1 小时前
【含开题报告+文档+PPT+源码】基于SSM的电影数据挖掘与分析可视化系统设计与实现
java·vue.js·人工智能·后端·spring·数据挖掘·maven
遗落凡尘的萤火-生信小白1 小时前
转录组数据挖掘(生物技能树)(第11节)下游分析
人工智能·数据挖掘
XinZong1 小时前
【OpenAI】获取OpenAI API Key的多种方式全攻略:从入门到精通,再到详解教程!
人工智能
没有余地 EliasJie1 小时前
深度学习图像视觉 RKNN Toolkit2 部署 RK3588S边缘端 过程全记录
人工智能·嵌入式硬件·深度学习
HelpLook HelpLook2 小时前
高新技术行业中的知识管理:关键性、挑战、策略及工具应用
人工智能·科技·aigc·客服·知识库搭建