写在前面

转载自AI Studio 项目链接https://aistudio.baidu.com/aistudio/projectdetail/3482497

对于jetson系列的板子,只有它玩你的状况。
我使用的是jetson4.5系列,镜像烧写用的是jdkmanager的方式。推荐大家在安装各种包的时候,尽量使用能一次性安装的方式安装,不要一个依赖一个依赖的自己安装,后者总会遇到很多问题
系统盘(不管是ssd还是sd)内存一定要在30G以上,因为安装系统和最基础的包就要花掉25G
板子和电脑的文件传输方法:u盘或者邮箱

首先先进行开发板镜像的烧写

由于我拿到的板子上的sd卡是直接焊接在板子上,没法拿下来,无法直接安装成sd卡的形式。于是,我采用了sdkmanager的安装方法,并踩了不少坑。

第一步,在电脑上安装ubuntu虚拟机

在项目目录的data文件夹下,ubuntu虚拟机文件夹下,有压缩包。将其解压,双击

VMware-workstation-full-15.5.6-16341506.exe
,然后一路next安装这个软件。
然后在主页,点击添加虚拟机

内容选择典型,光盘映像目录选择,本项目压缩包下

ubuntu-18.04.5-desktop-amd64.iso

接下来加载然后设置虚拟机密码

把压缩包里面的

sdkmanager_1.6.0-8170_amd64.deb

拖到虚拟机目录下,然后在包含sdkmanager_1.6.0-8170_amd64.deb的文件夹的目录下打开命令行使用

sudo apt install ./sdkmanager_1.6.0-8170_amd64.deb

安装,然后使用

sdkmanager

检查安装是否成功(不报错就是成功)

第二部,烧写镜像

用线短接如图所示地方(连接如图2,3处),告诉系统现在是烧写模式

sd卡插好(在开发板主卡区域)

将开发版连上电脑,选择jetson连接的是虚拟机(注意不是电脑主机!!!
然后虚拟机打开sdkmanager(这里会让注册英伟达开发者账号,还要填写个人信息。注意一定要注册完账号后及时填写个人信息没有填个人信息的话,后面登录会报错,会显示没有开发者权限,不让用sdkmanager
填写完后会出现这个界面

host可选可不选(建议别选,不然相当于在虚拟机上安装同样的环境,没用还耽误时间
linux可以选择其他版本,sdkmanager可能会提示更新也可以更新

之后是这个界面

注意此时不要选择jetson sdk components,不然安装镜像会出问题
然后点continue就可以烧写镜像了,等到镜像下载完并且create OS image ready(也就是两个进度条上面的出现对号了),就可以拔掉短接线了。 注意烧写过程中板子会很热,但风扇因为没有驱动无法转,此时建议给板子物理降温。还有结尾的时候,也就是instaling到99%的时候,可能还需要再等半个小时甚至一个小时,这个时候千万别关

当风扇开始转的时候说明烧写完了。

然后把你的ssd插上(当然如果你的sd卡内存够大也可以不插。但ssd启动快,且内存大),重启开发板,然后将开发板连上显示屏,用ubuntu的disk磁盘处理器,将ssd格式化然后分区然后设置为第一启动盘,具体可以参考work目录下的word教程

一般的教程到这里就已经结束了,接下来就得自己去安装各种库。

但如果自己安装opencv的话

sudo apt-get install libopencv-dev python-opencv

你会发现你无法用opencv打开你的摄像头。但这不是你摄像头的原因,因为

nvgstcapture

可以打开csi摄像头。
但如果你用以下常规的测试摄像头的代码尝试打开摄像头,会出现,程序没有任何反映的情况,而且不会有任何报错

import cv2
 
 
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,
        )
    )
 
 
def show_camera():
    cap = cv2.VideoCapture(gstreamer_pipeline(flip_method=0), cv2.CAP_GSTREAMER)
 
    while cap.isOpened():
        flag, img = cap.read()
        cv2.imshow("CSI Camera", img)
        kk = cv2.waitKey(1)
 
        # do other things
 
        if kk == ord('q'):  # 按下 q 键,退出
            break
 
    cap.release()
    cv2.destroyAllWindows()
    
 
if __name__ == "__main__":
    show_camera()

这个问题困扰了我好久,问过好多人都说可能是opencv的问题。于是我检查opencv的版本问题,发现系统里面的opencv是4.1.1,而python里面的确是3.2。可能是版本不匹配?
于是我卸载了全部的opencv,并下载了4.1.1的源码进行编译安装,一顿操作后,问题如初,没有解决。因此应该是操作过程中,没有将两个opencv建立联系。此时jetson的环境已经乱的不成样子,因为源码配置4.1.1各种问题层出不穷

我查了很多文章,发现他们的nano或者NX都是用电脑将一个各种依赖都装好的镜像写入sd卡,然后插上sd卡即可。于是,我重新进行了刷机,想试试能不能在安装的时候选择components,一起装上,这样应该没问题了。但因为sd卡内存不够,并且在安装完镜像后出现了死机(刷机三次都死机,怎么降温都没用),因此我只能选择只安装镜像。

但使用sdkmanager安装时,好像可以只选择component不选image,也就是第一遍短接安装镜像,第二遍不短接只安装component(只选择component),于是我想,可以先将镜像安装到sd卡里,然后sd卡的系统复制到ssd里,然后再y用ssd所带的环境为基础安装各种依赖,如是操作

安装完成后,终于成功,此时opencv在系统里和python上都一样,为4.1.1

后面的安装可以选择更改apt的镜像,也可以不改。反正我板子上apt直接安装也很快

安装nccl

先不要设置cuda环境变量,先安装nccl库,过程很漫长,有像报错一样的东西不要管他

sudo apt-get install libnccl2 libnccl-dev

配置cuda环境变量

如果你是远程电脑操作

sudo vim ~/.bashrc

如果你是用jetson显示屏操作

sudo gedit ~/.bashrc

文件最后添加

export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda

刷新环境变量

source ~/.bashrc

安装pip

sudo apt install python3-pip

安装paddle-infer

从这个网站下载你想要安装paddle的版本.一定要看好cp后面的python版本和jetson版本以及cuda和cudnn,tensorrt的版本
可以使用

python3
查看当前的python是3.6还是3.7
然后把下载好的whl包放到jetson的home文件下并安装

pip3 install [你下载的包的名字]

检查安装成功了吗?

!python3
import paddle.fluid
查安装成功了吗?



```python
!python3
import paddle.fluid
paddle.fluid.install_check.run_check()

出现Your Paddle Fluid is installed successfully!则成功

测试padde-infer

测试所用代码参考:这篇文章
下载本项目work文件下的inference_model.rar,解压。
然后下载本项目work文件下的a.py,将上面的解压后得到的文件和a.py放到jetson NX的同一目录下
执行

!python3 a.py

应该会编译一会,因为要加载tensorrt

如果遇到如下报错:

Traceback (most recent call last):
File "a.py", line 108, in <module>
predictor = predict_config(model_file, params_file)
File "a.py", line 53, in predict_config
predictor = create_paddle_predictor(config)
paddle.fluid.core_noavx.EnforceNotMet:
C++ Traceback (most recent call last):
0 std::unique_ptr<paddle::PaddlePredictor, std::default_delete<paddle::PaddlePredictor> > paddle::CreatePaddlePredictor<paddle::AnalysisConfig>(paddle::AnalysisConfig const&)
1 std::unique_ptr<paddle::PaddlePredictor, std::default_delete<paddle::PaddlePredictor> > paddle::CreatePaddlePredictor<paddle::AnalysisConfig, (paddle::PaddleEngineKind)2>(paddle::AnalysisConfig const&)
2 paddle::AnalysisPredictor::Init(std::shared_ptr<paddle::framework::Scope> const&, std::shared_ptr<paddle::framework::ProgramDesc> const&)
const&, paddle::framework::AttributeMap, bool)
8 paddle::platform::GetCurrentTraceBackStringabi:cxx11
Error Message Summary:
Error: Operator multiclass_nms3 has not been registered
[Hint: op_info_ptr should not be null.] (at /home/nx/Paddle-release-2.0-beta/paddle/fluid/framework/op_info.h:140)

则因为paddle版本低,下载2.2版本可以解决

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐