Jetson AGX ORIN 初始化&&配置Anaconda&&带CUDA的OpenCV

Jetson AGX ORIN 初始化&配置CUDA&Anaconda&带CUDA的OpenCV

1. Jetson AGX ORIN 初始化

可以参考这个链接,基本不会报错:

Jetson AGX ORIN硬件初始化和环境部署

如果遇到下面的 **Err: **, 建议换一个可以连接 VPNWIFI 或者连接手机热点。

Do you want to continue? [Y/n] y
Get:1 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libdrm-dev arm64 2.4.107-8ubuntu1~20.04.2 [135 kB]
Get:2 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libdrm-radeon1 arm64 2.4.107-8ubuntu1~20.04.2 [18.7 kB]
Get:3 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libdrm-nouveau2 arm64 2.4.107-8ubuntu1~20.04.2 [15.9 kB]
Get:4 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libdrm-amdgpu1 arm64 2.4.107-8ubuntu1~20.04.2 [17.9 kB]
Get:5 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libdrm-freedreno1 arm64 2.4.107-8ubuntu1~20.04.2 [17.9 kB]
Get:6 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libdrm-tegra0 arm64 2.4.107-8ubuntu1~20.04.2 [6,212 B]
Get:7 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libdrm-etnaviv1 arm64 2.4.107-8ubuntu1~20.04.2 [11.3 kB]
Err:8 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libpciaccess-dev arm64 0.16-0ubuntu1                                               
  Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::16). - connect (101: Network is unreachable) Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::19). - connect (101: Network is unreachable) Could not connect to ports.ubuntu.com:80 (185.125.190.36), connection timed out Could not connect to ports.ubuntu.com:80 (185.125.190.39), connection timed out [IP: 185.125.190.39 80]
Ign:9 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libdrm2 arm64 2.4.107-8ubuntu1~20.04.2
Err:10 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libxtables12 arm64 1.8.4-3ubuntu2.1
  Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::16). - connect (101: Network is unreachable) Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::19). - connect (101: Network is unreachable) [IP: 185.125.190.39 80]
Err:11 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 iptables arm64 1.8.4-3ubuntu2.1
  Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::16). - connect (101: Network is unreachable) Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::19). - connect (101: Network is unreachable) [IP: 185.125.190.39 80]
Err:12 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libip6tc2 arm64 1.8.4-3ubuntu2.1
  Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::16). - connect (101: Network is unreachable) Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::19). - connect (101: Network is unreachable) [IP: 185.125.190.39 80]
Err:13 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libip4tc2 arm64 1.8.4-3ubuntu2.1
  Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::16). - connect (101: Network is unreachable) Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::19). - connect (101: Network is unreachable) [IP: 185.125.190.39 80]
Err:14 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 mount arm64 2.34-0.1ubuntu9.4
  Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::16). - connect (101: Network is unreachable) Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::19). - connect (101: Network is unreachable) [IP: 185.125.190.39 80]
Err:15 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 systemd arm64 245.4-4ubuntu3.23
  Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::16). - connect (101: Network is unreachable) Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::19). - connect (101: Network is unreachable) [IP: 185.125.190.39 80]
Err:16 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libsystemd0 arm64 245.4-4ubuntu3.23
  Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::16). - connect (101: Network is unreachable) Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::19). - connect (101: Network is unreachable) [IP: 185.125.190.39 80]
Err:17 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libapt-pkg6.0 arm64 2.0.10
  Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::16). - connect (101: Network is unreachable) Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::19). - connect (101: Network is unreachable) [IP: 185.125.190.39 80]
Err:18 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 apt arm64 2.0.10
  Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::16). - connect (101: Network is unreachable) Cannot initiate the connection to ports.ubuntu.com:80 (2620:2d:4000:1::19). - connect (101: Network is unreachable) [IP: 185.125.190.39 80]

注意: 安装 jtop 的时候,有的 ORIN 需要重启之后,再输入 jtop 才能生效。

另外编写环境变量的时候,vim 指令用不习惯的同学可以使用 gedit ~/.bashrc

安装输入法可以安装搜狗输入法,搜狗有针对 arm64 的输入法安装包,相关的安装命令可以参考链接:

全网最准确的Ubuntu 20.04 安装搜狗输入法的步骤

中英文切换为 Ctrl + Space

2. Jetson AGX ORIN 配置 Anaconda

其实上面的网址里面就写有该如何安装 aarch64 下面的 Anaconda,在此再写一下具体的操作步骤,并附带一个下载链接:

首先是 aarch64 版本的 Anaconda 的下载网址:
https://repo.anaconda.com/archive/?C=M&O=A

选择一个版本是:Anaconda3-2024.02-1-Linux-aarch64.sh,将下载的shell文件拷贝至home文件夹,打开终端,输入bash Anacondxx-Linux-aarch64.sh
yes 确定安装,然后确认安装的路径,一般直接回车安装在默认的 /home/名字/anaconda3 这个目录下,接着启动环境变量:

source ~/.bashrc

这时候会发现出现了 (base)

虚拟环境的操作命令,安装库等就跟 amd64Ubuntu 以及 windows 的一样:

# 创建虚拟环境
conda create -n py39 python=3.9
# 激活虚拟环境
conda activate py39
# 退出当前虚拟环境
conda deactivate

3. 安装带CUDA的OpenCV

首先参考这个链接:

Jetson Orin Nano安装OpenCV带cuda加速版本的全过程

在下载依赖包的时候一定要保证网络通畅。
在运行下面的命令时遇到的两个问题:

sudo apt install -y build-essential checkinstall cmake pkg-config yasm git gfortran
sudo apt update
sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt install -y libjpeg8-dev libjasper-dev libpng12-dev libtiff5-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine2-dev libv4l-dev
sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgtk2.0-dev libtbb-dev libatlas-base-dev libfaac-dev libmp3lame-dev libtheora-dev libvorbis-dev libxvidcore-dev libopencore-amrnb-dev libopencore-amrwb-dev x264 v4l-utils
sudo apt install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

问题1:E: Package ‘libpng12-dev’ has no installation candidate、

解决方法:参考这个链接:ubuntu E: Package ‘libpng12-dev’ has no installation candidate
换个包安装即可:

sudo apt install libpng-dev

问题2:E: Unable to locate package libjasper-dev

解决方法:参考这个链接:Ubuntu18.04安装OpenCV依赖包 libjasper-dev 无法安装的问题
怎么说呢,添加源这个东西可能有帮助,但是感觉帮助不会很大,不一定有用。

如果不是 Orin 的设备,如果处理器是 amd64 的,存在安装不了 libjasper-dev 的问题,可以查看这个链接:Ubuntu22.04安装opencv依赖包libjasper-dev出现unable to locate libjasper-dev的终极解决办法
温馨提示:http://security.ubuntu.com/ubuntu 这个链接里面是找不到 binary-arm64 这个包的,只有 amd64 版本的,因此这个链接并不能解决 Orin 上面 安装不了 libjasper-dev 的问题。

如果以上链接无法解决问题,建议直接去网站下载安装包。https://pkgs.org/
进去之后搜索 libjasper,找到 aarch64 对应的页面,如下图所示:

在这里插入图片描述翻到下面找到 Install Howto ,先尝试一下看看命令行是否可以直接安装,如果不行则下载 Download 下面的 Package

Package 有三个,分别的 Binary Package、Source Package、MirrorMirror 意思是镜像,这里就不解释了。

  • Binary Package
    • 编译好的可以直接使用的文件。
    • 一般包的命名里面包含了版本号、适应平台、适应的硬件类型等信息。例如:libjasper-devel-2.0.33-alt2.aarch64.rpm
    • 二进制的包里面会存在可执行文件(与软件同名的往往是主执行文件),标志是其所在路径含有名为 bin 的目录。(当然,这次的 libjasper 里面则是没有的 )
  • Source Package
    • 还没有编译好的源代码,需要用户自行编译。
    • 源码的压缩包命名就是软件的版本号。例如:libjasper-2.0.33-alt2.src.rpm
    • 源代码包里面的文件往往含有种种源代码文件,头文件 .h,C代码源文件 .c,C++代码源文件 .cpp / .cc 等。

在这里插入图片描述
Binary Package、Source Package 都下载了,然后解压之后看了里面的文件。

Source Package

如果要自己编译的话,需要注意,这个源代码编译需要额外的一些依赖包才能成功编译,依赖包如下所示:

BuildRequires: cmake
BuildRequires: libjpeg-devel
BuildRequires: libGL-devel libXext-devel libXi-devel libXmu-devel libglut-devel

而这些依赖包在 Jetson AGX ORIN 设备上面都无法通过 sudo apt install 进行下载(是的,没看错,一个都不行),均显示无法找到对应的包,因此这个方式直接放弃,不过有人如果有需要自己编译的,可以自行在网站下载这些依赖包的源代码,进行编译之后再重新编译 libjasperSource Package。不过这过程中间会遇到啥问题,我也不知道,因为我放弃这个方法了。

Binary Package

这个方法我试过了,只能说真的好用。

在这里插入图片描述
因为是已经编译好的文件,所以直接拿来用就行,具体怎么用呢,就是直接把文件复制到对应的目录就行(基本上大部分的 Binary Package 的包都可以使用这个方法)

以这次的 libjasper 为例,打开下载好的 Binary Package 包,即 libjasper-devel-2.0.33-alt2.aarch64.rpm。解压之后可以看到文件夹的分布路径如下:

  • usr
    • include
      • jasper
        • jas_*.h(一共 20.h 头文件)
    • lib64
      • pkgconfig
        • jasper.pc
      • libjasper.so

直接解压,然后按照路径将 jasperpkgconfiglibjasper.so 分别复制到对应的路径下。命令行如下所示:

cd /{your_libjasper_path}/usr			# 因为这个 libjasper-devel-2.0.33-alt2.aarch64.rpm 文件解压完得到的就是一个名为 usr 的文件夹
sudo cp -r include/lasper/ /usr/include/		# 将 include 下面的 jasper 文件夹复制过去
sudo cp -r lib64/ /usr/							# 将 lib64 整个复制过去(Orin 上面一开始是没有 lib64 这个文件夹的)

复制过去之后,进入解压好的 OpenCV 的文件夹。我是参考一开始的安装连接,安装的 4.5.5 版本。

问:opencv-4.5.5,和 opencv-contrib-4.5.5 分别要解压到哪里呢?
答:其实解压到哪里都可以,但是一般为了方便起见,将 opencv-contrib-4.5.5 的文件夹放在 opencv-4.5.5 的文件夹里面。( cmake 的时候路径参数给对就可以)

分布如下所示:

在这里插入图片描述
然后按照正常编译并且安装的流程,进行 opencv-4.5.5 的安装。
终端命令行为:

cd opencv-4.5.5

mkdir build

cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DOPENCV_ENABLE_NONFREE=1 \
-DBUILD_opencv_python2=1 \
-DBUILD_opencv_python3=1 \
-DWITH_FFMPEG=1 \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \
-DCUDA_ARCH_BIN=7.2 \
-DCUDA_ARCH_PTX=7.2 \
-DWITH_CUDA=1 \
-DENABLE_FAST_MATH=1 \
-DCUDA_FAST_MATH=1 \
-DWITH_CUBLAS=1 \
-DOPENCV_GENERATE_PKGCONFIG=1 \
-DOPENCV_EXTRA_MODULES_PATH=/home/jetson/Downloads/opencv-4.5.5/opencv_contrib-4.5.5/modules \
..
# 为什么 opencv_contrib-4.5.5 解压路径无所谓
# 因为此处的 DOPENCV_EXTRA_MODULES_PATH 这个参数就是需要 opencv_contrib 的模块路径,改成自己解压到的路径即可
# 我的就是:-DOPENCV_EXTRA_MODULES_PATH=/home/be/OpenCV/opencv-4.5.5/opencv_contrib-4.5.5/modules \
# Jetson AGX ORIN 内存比较大,可以直接 -j8 或者 -j12
make -j8
sudo make install

make -j8 之后结果如下图所示:

在这里插入图片描述完美!!!

然后再运行 sudo make install,发现无法安装到 Orin 上面,可能还是里面有的库存在问题。结果如下图:

在这里插入图片描述

不过,既然 opencv-4.5.5 已经编译完成了,那么就可以尝试使用了,只不过在编写 CMakeList.txt 的时候需要注意一些语句的书写,使用 set 编写 OpenCV 的路径了。

并不影响 CUDA 的 OpenCV 使用。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-23 14:26:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-23 14:26:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-23 14:26:03       87 阅读
  4. Python语言-面向对象

    2024-03-23 14:26:03       96 阅读

热门阅读

  1. SurfaceFlinger的面试题目

    2024-03-23 14:26:03       38 阅读
  2. 变量的数据类型:基本数据类型和引用数据类型

    2024-03-23 14:26:03       43 阅读
  3. 双雷达(velodyne)的启动与集成

    2024-03-23 14:26:03       40 阅读
  4. 关于系统部署测试人员的10道经典面试题

    2024-03-23 14:26:03       35 阅读
  5. HTTP Header Fields

    2024-03-23 14:26:03       40 阅读
  6. 【Unity】Stream最好用的Selfhost开源轻量服务

    2024-03-23 14:26:03       46 阅读
  7. 自动化提取Python项目中的第三方库及其版本信息

    2024-03-23 14:26:03       46 阅读
  8. 01 mybatis

    2024-03-23 14:26:03       36 阅读
  9. leetcode 402.移掉k位数字

    2024-03-23 14:26:03       39 阅读
  10. k8s通过编排文件,实现服务的滚动更新

    2024-03-23 14:26:03       40 阅读