文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

jetson 最全jetpack5.1安装记录,跟着做就行(含bug报错处理)

2023-09-20 12:59

关注

目录

写在前面

背景

1系统前期配置

1.1烧录

1.2 配置环境变量

1.3 使用vnc

1.4 pip换源和安装

1.5 pycharm安装

2 pytorch环境搭建

2.1 安装miniforge建立虚拟环境

2.2 torch,torchvision的安装

2.3 opencv的安装

2.4 安装tensorrt

2.5 安装torch2trt

3 摄像头处理

3.1csi摄像头

3.2 usb摄像头


jetpack5.1使用cuda11和cuda11.4(系统内置了两个),tensorRT8.5.2,内置opencv4.5.4. 虽然有一些bug,但整体是个好版本. 截止23年4月tensorrt8.5依然是最新的稳定版本,想用trt进行加速的小伙伴不要错过.

本文会从头开始,从烧录到环境配置来写,会涉及到torch,torchvision,tensorRT,torch2trt,opencv-python的安装. 

jetson xavier nx上实现基于torch的人脸检测识别并调用trt进行加速推理,用到csi2的摄像头,和数张sd卡(我也建议你们做好了环境就备份到新的sd卡里)

1系统前期配置

1.1烧录

JetPack SDK 5.1 | NVIDIA 开发者请根据jetson型号到这个链接下载sd卡镜像

准备sd卡,如果sd卡已经有系统需要刷掉,请:

右击 此电脑 --> 管理 --> 磁盘管理 最下面的就是sd卡,把最大的分区右键删掉,然后右键新建卷,分配盘符就可以在电脑上找到了

SD Memory Card Formatter for Windows/Mac | SD Association (sdcard.org)在这个链接下载sdformatter,打开,选择sd卡并进行格式化;

Win32 Disk Imager - Download [Official Site]安装win32diskimager,选择前面下载的镜像文件进行写入

 写入后的sd卡插入jetson,开机,完成初始设置

1.2 配置环境变量

#cudasudo vi ~/.bashrc#添加export PATH=/usr/local/cuda/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATHexport CUDA_HOME=$CUDA_HOME:/usr/local/cuda#保存并刷新source ~/.bashrc

注意5.1镜像里有cuda11和11.4, 你可以

export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-ver #ver=11 or 11.4

这里我不建议换源,国内源对于新版本的支持可能有一点点问题,如果你觉得跑得慢或者出现超时,请自行向源奔去.

前几个版本可以用的jtops在这个版本似乎不行了,下面的代码我执行不了,但是没有也没关系,要查什么东西的版本单独查就是了

sudo -H pip install -U jetson-stats

1.3 使用vnc

用电脑操作起来方便得多,也可以直接从电脑复制粘贴,所以这里使用ssh建立连接. 先把电脑和jetson用网线连上,cmd里输入arp -a找到jetson的IP(一般是192.168.137.xxx格式,但不是192.168.137.255静态全f地址那个)

设备管理器->网络和共享中心->更改适配器选项->wlan右键属性->

允许你jetson网线接入的那个端口的共享,这里我是以太网2

安装vnc viewer

jetson官方镜像中已安装有vnc软件vino-server, 如果没有就自己安装,安装命令如下:

sudo apt-get install vino-server

如果你没有显示器,需要先用putty在连接到前面说的ip地址,但我建议必须有显示器,没有不行,所以不讲怎么无显示器操作了.

为vinoserver配置开机自启

mkdir -p ~/.config/autostartcp /usr/share/applications/vino-server.desktop ~/.config/autostart

进行一些设置 

gsettings set org.gnome.Vino prompt-enabled falsegsettings set org.gnome.Vino require-encryption false

然后设置密码,我建议是不需要密码,如果你需要:

gsettings set org.gnome.Vino authentication-methods "['vnc']"gsettings set org.gnome.Vino vnc-password $(echo -n 'password'|base64)#password是你的密码

然后重启一下

sudo reboot

打开自动登录 

sudo gedit /etc/gdm3/custom.conf

注释掉这两行代码,但是默认应该是已经注释掉的 

#  AutomaticLoginEnable = true#  AutomaticLogin = user1

然后调一下分辨率,不然只有800*600(分辨率低延迟也低,看你需求咯)

打开文件 

sudo gedit /etc/X11/xorg.conf

 输入这,但是5.1默认应该已经是高分辨率了

Section "Screen"   Identifier    "Default Screen"   Monitor       "Configured Monitor"   Device        "Tegra0"   SubSection "Display"       Depth    24       Virtual 1280 800 # 改为自己需要的分辨率   EndSubSectionEndSection

然后回到windows,安装vncviewer.Download VNC Viewer | VNC® Connect (realvnc.com)

打开,左上角file->newconnection

 输入前面的jetson IP即可连接.

不要在windows开着那个切换成黄色的猫重启或者启动jetson!!!!!!!!!!!!!!!!!!!!!!!!

或者任何类似那个 能在黑色和黄色之间切换的猫 的软件!!!!!!!!!别打开!!!!!!!!

要用的话等vnc建立连接了再开

jetson的有线连接会断的,我也说不清到底怎么解决的(我重装了jetson的vnc也重置了电脑的网络),arp -a直接丢失jetson的ip了.

如果需要传文件可以再装一个mobaxterm,用法一样的,

 点左上方那个向上的箭头传文件

1.4 pip换源和安装

1似乎不带pip,如果你不用虚拟环境,就在本地装个pip

sudo python3 get-pip.py 

也要装packaging

pip3 install packaging

pip换个源可更快

sudo mkdir .pipcd .pip

创建pip.config文件并进入

sudo touch pip.confsudo gedit pip.conf

  写入如下内容即可

[global]timeout = 6000index-url = https://pypi.doubanio.com/simpletrusted-host = pypi.doubanio.com

1.5 pycharm安装

Download PyCharm: Python IDE for Professional Developers by JetBrains

下载aarch64用的压缩包

pycharm依赖java,根据你装的pycharm的版本分为openjdk-8-jdk或者openjdk-11-jdk

我这里装的是新版的,所以需要openjdk-11-jdk

虽然有点卡不过买新不买旧对吧 

apt-cache search openjdksudo apt-get install openjdk-11-jdk

接下来,配置环境变量,指令如下:

sudo gedit ~/.bashrc

然后将下面的代码写入配置文件的最下方:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-arm64export JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=${JAVA_HOME}/bin:$PATH

到此,open-jdk就配置完成了,接下来解压pycharm,通过指令或图形界面的解压工具都可以,然后在terminal里面定位到解压的文件夹,找到pycharm文件夹里面的bin文件夹,cd到bin文件夹,在bin文件夹里面执行:

$ sh ./pycharm.sh

执行之后,jetpack5.1用的ubuntu20.04不支持一键把pycharm锁到菜单,所以你要打开pycharm,点左下角的设置

 点create desktop entry就行了,创建一个快捷方式

2 pytorch环境搭建

装pytorch发生了不少插曲,在这里总结一下

首先,请安装这个连接下的torch

PyTorch for Jetson - Jetson & Embedded Systems / Jetson Nano - NVIDIA Developer Forums

按照这个链接,我们可以使用torch1.11和1.12 ,如果你需要更高版本,官方提供了torch2.0.0的container:

NVIDIA L4T PyTorch | NVIDIA NGC

在安装torch1.12后我发现torchvision0.13.0的不匹配问题(没错他又来了,github给的版本对应又错了):

torchvision 0.13.0 requires requests, which is not installed.

但是torch1.11和torchvision0.12.0放一起没啥问题,建议用这个

如果你需要jetson上装更低版本的pytorch,那么你需要装python3.6并面对这样一个bug:

libmpi.so.20: cannot open shared object file: No such file or directory

网上有人尝试解决,但是我去库网站找这个文件已经找不到了,应该是python3.6的问题

所以还是用torch1.11和torchvision0.12.0

如果你一意孤行想要指定的torch和python,这里有

Releases · KumaTea/pytorch-aarch64 (github.com)

个人建立的whl包,但是这个包的torch不能用cuda,也就是torch.cuda.is_available()返回false

作者也给出了解决办法:pytorch-aarch64/torch.sh at main · KumaTea/pytorch-aarch64 (github.com)

自己给你自己编译一个属于你的库吧,我没试过

2.1 安装miniforge建立虚拟环境

这里还是要用虚拟环境的,最好装好一个库就存个档

conda create -n 环境名 --clone 需要备份的环境名

现在安装miniforge:下载最新的miniforge-pypy3-linux-aarch64就行

Releases · conda-forge/miniforge · GitHub

下载好了去安装,在终端cd你下载的路径,

sh Miniforge-pypy3-version-Linux-aarch64.sh# version看文件名

全回车,默认不初始化的,咱们手动初始化:vim不会用自己搜

# 编辑环境变量vim ~/.bashrc# 增加环境变量, 将换成你的用户名export PATH=/home//miniforge-pypy3/bin:$PATH# 激活环境变量source ~/.bashrc# 显示(base)source activate  # 没有base显示(base)时使用

咱们不用base:

conda config --set auto_activate_base false

这样你打开终端是不带base的

然后来建立一个python3.8的虚拟环境

conda create -n 环境名 python=3.8

后面我们在这个虚拟环境装.

这里conda不换源的话有点慢,换不换我觉得都行

#更换下载源conda config --prepend channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/conda config --prepend channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/conda config --set show_channel_urls yes

2.2 torch,torchvision的安装

激活虚拟环境

source activate conda activate 环境名

前置处理: 

# 先把能更新的都更新了sudo apt-get updatesudo apt-get upgrade# 装上我们需要的环境包# 最好使用pip3,不然出错了不好排查sudo apt-get install python3-pip libopenblas-base libopenmpi-devpip3 install Cython

下载torch的whl文件,cd他的路径

pip3 install numpy torch-1.11.0-cp38-cp38m-linux_aarch64.whl

这样我们就装上了torch,装完了检验一下

python>> import torch>> torch.__version>> torch.cuda.is_available()

 然后我们装torchvision

$ sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev$ git clone --branch  https://github.com/pytorch/vision torchvision   # 我这里是0.12.0$ cd torchvision$ export BUILD_VERSION=0.x.0      # where 0.x.0 is the torchvision version  我这里是0.12.0$ python3 setup.py install --user

装完了torchvision也要import一下看看有没有报错

记得这里有个问题是装pillow的时候,他找不到你的cuda路径:

FileNotFoundError: [Errno 2] No such file or directory: ‘:/usr/local/cuda:/usr/local/cuda’: ‘:/usr/local/cuda:/usr/local/cuda-’

因为他有两个内置的cuda,你只需:

# 命令行输入export CUDA_HOME=/usr/local/cuda-11 #写11或者11.4,我选11.4

 重新装就好了

装numpy我超时了,解决办法懂得都懂,csdn不让发.但不要直接在jetson直接装,apt-get update会出现奇妙小bug. 报错:

E: The repository ‘https://repo.download.nvidia.com/jetson/common 20 r32.5 Release’ no longer has a Release file.N: Updating from such a repository can’t be done securely, and is therefore disabled by default.N: See apt-secure(8) manpage for repository creation and user configuration details.E: The repository ‘https://repo.download.nvidia.com/jetson/t210 11 r32.5 Release’ no longer has a Release file.N: Updating from such a repository can’t be done securely, and is therefore disabled by default.N: See apt-secure(8) manpage for repository creation and user configuration details.

我单独发了个博客,去那看怎么解决,这个烂bug废了我一整天. 所以请你们用 电脑 安装 那个东西 然后 使用局域网共享 共享给jetson

如果都顺利,基本的就这样

2.3 opencv的安装

这里系统自带了opencv和python3.8(这也是为什么我说最好用py3.8装torch,东西全啊)

如果你嫌弃他opencv没有cuda加速,网上有教程,但是使用gstreamer调用csi摄像头会出问题,gstreamer在你自己装的opencv下可没那么容易搞到虚拟环境里(你可以试试usb摄像头,我没有试)

如果你对速度没那么高追求,直接把系统的opencv给copy到虚拟环境就完事了

sudo cp /usr/lib/python3.8/dist-packages/cv2/python-3.8/cv2.cpython-38-aarch64-linux-gnu.so ~/miniforge-pypy3/envs/Torch8/lib/python3.8/site-packages/#自己根据虚拟环境位置调整指令

记得import cv2试一下哦

这个opencv自带gstreamer,稍后我会说道gstreamer的warning怎么处理

试了你会发现:

ImportError: /lib/x86_64-linux-gnu/libp11-kit.so.0: undefined symbol: ffi_type_pointer, version LIBFFI_BASE_7.0

有这么个报错!

简单的办法是:   但这样你pycharm还是用不了

export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libffi.so.7

感谢大佬给出了最佳解决办法:(63条消息) Conda虚拟环境下libp11-kit.so.0: undefined symbol: ffi_type_pointer...问题解决_Destinycjk的博客-CSDN博客给出解决办法:

#打开至conda虚拟环境下lib文件夹中cd /home/用户名/miniforge-pypy3/envs/虚拟环境名/lib

然后ls,可以看到有个叫libffi.so.7的文件

mv libffi.so.7 libffi_bak.so.7

改个名存一下,然后新建一个libffi.so.7就好了

sudo ln -s /usr/lib/aarch64-linux-gnu/libffi.so.7.1.0 libffi.so.7sudo ldconfig

这样再import就没问题了

2.4 安装tensorrt

jetpack5.1有点神奇小bug,就是....你在/usr/lib/python3.8/dist-packages/下面找不到trt

那咋办呢?英伟达也觉得有点小尴尬,给了个帖子

How to use tensorrt in python of AGX Xavier JetPack5.1 - Jetson AGX Xavier - NVIDIA Developer Forums

sudo apt install python3-libnvinfer*

 这样你的trt就出现了. jetpack5.1.1似乎改掉了这个问题

2023.4 如果后面出了新的tensorrt再说,目前trt8.5.2就是最新的,所以你可以直接

sudo cp -r /usr/lib/python3.8/dist-packages/tensorrt* /home/用户名/miniforge-pypy3/envs/Torch8/lib/python3.8/site-packages/

当然你软连接进去也是一样的

2.5 安装torch2trt

这个简单

git clone https://github.com/NVIDIA-AI-IOT/torch2trtcd torch2trtpython setup.py install

即可

如果遇到No module named packaging

那么

pip3 install packaging

 就可以了

3 摄像头处理

jetson可以用csi摄像头和usb摄像头,建议usb的,用起来简单方便

3.1csi摄像头

sudo apt install v4l-utils 

安装v4l-utils,然后

ls /dev/video* 

找摄像头.如果你同时csi和usb都插了,一般video0是csi. usb可能有多个视频流,像这样:

 后面这俩其实是一个usb摄像头,用

cap = cv2.VideoCapture(dev)

的时候dev=1. 用下面的指令看下csi能不能打开

nvgstcapture

安装gstreamer,但是5.1似乎已经装好了

sudo add-apt-repository universesudo add-apt-repository multiversesudo apt-get updatesudo apt-get install gstreamer1.0-tools gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libavsudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-bad1.0-dev

如下代码测试一下 

import cv2# 设置gstreamer管道参数def gstreamer_pipeline(    capture_width=1280, #摄像头预捕获的图像宽度    capture_height=720, #摄像头预捕获的图像高度    display_width=1280, #窗口显示的图像宽度    display_height=720, #窗口显示的图像高度    framerate=60,       #捕获帧率    flip_method=0,      #是否旋转图像):    return (        "nvarguscamerasrc ! "        "video/x-raw(memory:NVMM), "        "width=(int)%d, height=(int)%d, "        "format=(string)NV12, framerate=(fraction)%d/1 ! "        "nvvidconv flip-method=%d ! "        "video/x-raw, width=(int)%d, height=(int)%d, format=(string)BGRx ! "        "videoconvert ! "        "video/x-raw, format=(string)BGR ! appsink"        % (            capture_width,            capture_height,            framerate,            flip_method,            display_width,            display_height,        )    )if __name__ == "__main__":    capture_width = 1280    capture_height = 720    display_width = 1280    display_height = 720    framerate = 60# 帧数    flip_method = 0# 方向    # 创建管道    print(gstreamer_pipeline(capture_width,capture_height,display_width,display_height,framerate,flip_method))    #管道与视频流绑定    cap = cv2.VideoCapture(gstreamer_pipeline(flip_method=0), cv2.CAP_GSTREAMER)    if cap.isOpened():        window_handle = cv2.namedWindow("CSI Camera", cv2.WINDOW_AUTOSIZE)        # 逐帧显示        while cv2.getWindowProperty("CSI Camera", 0) >= 0:            ret_val, img = cap.read()            CV2.imshow("CSI Camera", img)            keyCode = cv2.waitKey(30) & 0xFF            if keyCode == 27:# ESC键退出                break        cap.release()        cv2.destroyAllWindows()    else:        print("打开摄像头失败") 

3.2 usb摄像头

就当正常摄像头一样用,VideoCapture的参数是你前面查的video编号

你会惊奇的发现很多gstreamer的warning,这个warning伴随我从jetpack4.4dp一直到5.1

GStreamer警告:无法查询视频位置: status=0,值=-1,时长=-1[ warn:0] global /home/ubuntu/build_opencv/opencv/modules/videoio/src/cap_gstreamer.cpp (1390) setproperty opencv | gstreamer warning: #然后balabala

解决办法:

capture = VideoCapture(0, cv.CAP_V4L2)

就好了

需要备份sd卡的兄弟们直接去搜sd卡系统镜像克隆就行,这东西如果崩了容易前功尽弃,最好存一个img系统镜像到电脑上

其他还有一些bug,如果我想起来会陆陆续续更新,应该都挺好处理的,因为我没印象了.有问题找我

来源地址:https://blog.csdn.net/Yvon_L/article/details/130136080

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯