jetson orin nano super开发指南

一、super模式刷机

可以照着这个视频做

【创乐博 NVIDIA Jetson Orin Nano 和 Orin NX 开发套件快速升级成Super模式手把手视频教程 秒变性能怪兽】https://www.bilibili.com/video/BV1udwNeZENB?vd_source=342079de7c07f82982956aad8662b467

02.烧录Jetson纯净系统

03.安装Jetson组件环境

使用下面命令安装Jtop:

bash 复制代码
sudo apt update && sudo apt upgrade
sudo apt install python3-pip -y
sudo pip3 install -U jetson-stats

注意:安装完成后需要重启系统!

最佳性能模式

启用MAX功率模式

bash 复制代码
sudo nvpmodel -m 2 # Jetson Orin Nano
sudo nvpmodel -m 0 # Jetson Orin NX

启用Jetson时钟:CPU、GPU内核都以最大频率运行

bash 复制代码
sudo jetson_clocks

安装jetpack(如果SDK软件无法使用就直接使用指令去安装CUDA,Tensorrt这些)

sudo apt upgrade

sudo apt update

sudo apt dist-upgrade

sudo reboot

sudo apt install nvidia-jetpack #这一步时间可能稍长

完成后输入sudo jetson_release查询,也可以输入jtop,移动到info查询

使用Jtop工具查看系统信息

相关bug可以参考这个

【工具安装使用-Jetson】Jetson Orin Nano 刷机和踩坑总结_orin nano jetpack安装-CSDN博客

Jetson Orin Nano安装(烧录)Ubuntu22.04.4LTS(并配置基础环境)-CSDN博客

二、GPU ffmpeg编译安装

Jetson编译FFmpeg开启硬件编解码加速-开发者社区-阿里云

Keylost/jetson-ffmpeg:NVIDIA Jetson 上的 ffmpeg 支持 --- Keylost/jetson-ffmpeg: ffmpeg support on nvidia jetson

bash 复制代码
CFLAGS="-fPIC" CXXFLAGS="-fPIC" ./configure \
  --enable-gpl \
  --enable-nonfree \
  --enable-neon \
  --enable-shared \
  --enable-pic \
  --enable-nvmpi \
  --prefix=/usr/local

三、编译CUDA版本opencv

Releases · opencv/opencv · GitHub

Release 4.10.0 · opencv/opencv_contrib · GitHub

下载video编解码器,参考下面那个博客

C++------调用OpenCV和NVIDIA Video Codec SDK库实现使用GPU硬解码MP4视频文件_nvidia video codec sdk 安装-CSDN博客

视频编解码器 SDK - 入门指南 | NVIDIA 开发者 --- Video Codec SDK - Get Started | NVIDIA Developer

bash 复制代码
cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \
-D WITH_CUDA=ON \
-D WITH_CUDEV=ON \
-D WITH_NVCUVID=ON \
-D CUDA_ARCH_BIN=8.7 \
-D CUDA_ARCH_PTX="" \
-D ENABLE_FAST_MATH=ON \
-D CUDA_FAST_MATH=ON \
-D WITH_CUBLAS=ON \
-D WITH_CUFFT=ON \
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D BUILD_opencv_cudacodec=ON \
-D WITH_LIBV4L=ON \
-D WITH_GSTREAMER=ON \
-D WITH_FFMPEG=ON \
-D WITH_TBB=ON \
-D WITH_GTK=ON \
-D WITH_OPENGL=ON \
-D ENABLE_NEON=ON \
-D ENABLE_VFPV4=ON \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_EXAMPLES=OFF \
-D BUILD_opencv_python3=ON \
-D PYTHON3_EXECUTABLE=/usr/bin/python3 \
-D PYTHON3_INCLUDE_DIR=$(python3 -c "from sysconfig import get_paths; print(get_paths()['include'])") \
-D PYTHON3_LIBRARY=$(python3 -c "import sysconfig; print(sysconfig.get_config_var('LIBDIR') + '/' + sysconfig.get_config_var('LDLIBRARY'))") \
-D PYTHON3_NUMPY_INCLUDE_DIRS=$(python3 -c "import numpy; print(numpy.get_include())") \
-D PYTHON3_PACKAGES_PATH=$(python3 -c "import site; print(site.getsitepackages()[0])") \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D BUILD_opencv_python_bindings_generator=ON \
-D CUDA_NVCC_FLAGS="--expt-relaxed-constexpr" \
..
bash 复制代码
# 进入构建目录
cd ~/arm64_build/opencv-4.10.0/build

# 查看所有 CMake 变量
cat CMakeCache.txt

# 或使用 less 查看
less CMakeCache.txt

# 搜索特定选项
grep -i "cuda" CMakeCache.txt
grep -i "python" CMakeCache.txt
grep -i "nvcu" CMakeCache.txt  # 查看 NVCUVID
grep -i "opencv_extra" CMakeCache.txt

# 查看关键选项
grep -E "WITH_CUDA|WITH_NVCUVID|BUILD_opencv_cudacodec|WITH_CUDEV" CMakeCache.txt

如果重新编译opencv,然后要删除系统原本的opencv相关内容的话,使用下面这个

bash 复制代码
sudo rm -rf /usr/local/include/opencv*
sudo rm -rf /usr/local/lib/libopencv*
sudo rm -rf /usr/local/share/opencv*

# 更新系统库缓存
sudo ldconfig

四、英伟达官网jetpack开发资料

whl包大全(CUDA12.6):

jp6/cu126 index
https://elinux.org/Jetson_Zoo

https://developer.nvidia.com/embedded-computing

https://developer.nvidia.com/embedded/community/jetson-projects?sortBy=jetson_community_projects%2Fsort%2Fdate_added%3Adesc

TensorRT SDK | NVIDIA 开发者 --- TensorRT SDK | NVIDIA Developer

JetPack SDK | NVIDIA 开发者 --- JetPack SDK | NVIDIA Developer

五、Tensorrt

1.环境配置

jetson@jetson-orin-nano:~/projects/yolo$ trtexec

-bash: trtexec: command not found

bash 复制代码
echo 'export PATH=$PATH:/usr/src/tensorrt/bin' >> ~/.bashrc
source ~/.bashrc

链接到当前conda环境中

bash 复制代码
ln -s /usr/lib/python3.10/dist-packages/tensorrt \
      $CONDA_PREFIX/lib/python3.10/site-packages/

ln -s /usr/lib/python3.10/dist-packages/tensorrt-10.3.0.dist-info \
      $CONDA_PREFIX/lib/python3.10/site-packages/

ln -s /usr/lib/python3.10/dist-packages/tensorrt_dispatch \
      $CONDA_PREFIX/lib/python3.10/site-packages/

ln -s /usr/lib/python3.10/dist-packages/tensorrt_dispatch-10.3.0.dist-info \
      $CONDA_PREFIX/lib/python3.10/site-packages/

ln -s /usr/lib/python3.10/dist-packages/tensorrt_lean \
      $CONDA_PREFIX/lib/python3.10/site-packages/

ln -s /usr/lib/python3.10/dist-packages/tensorrt_lean-10.3.0.dist-info \
      $CONDA_PREFIX/lib/python3.10/site-packages/

2.导出模型

trtexec导出指令

TensorRT教程3:使用trtexec工具转engine_trtexec.exe yolov5s.onnx 转 yolov5s.engine-CSDN博客

六、ros环境以及相关换源

选自鱼香ros:【ROS2机器人入门到实战】3.动手安装ROS2_ros2rumendaoshijian-CSDN博客

bash 复制代码
wget http://fishros.com/install -O fishros && . fishros

七、yolo(jetpack 6.2版本,Tensorrt10.3)

ultralytics官网:

配置 - Ultralytics YOLO 文档

ultralytics/ultralytics:Ultralytics YOLO 🚀 --- ultralytics/ultralytics: Ultralytics YOLO 🚀
如果是使用jetpack5的,可以参考这个TensorRT-YOLO11/C++/detect at main · emptysoal/TensorRT-YOLO11
关于yolo网络结构相关文献:

YOLO模型魔改指南:从原理到实战,替换Backbone、Neck和Head(战损版)_yolo魔改-CSDN博客

1.YOLO环境搭建

在conda环境下

bash 复制代码
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple

GPU加速Pytorch使用下面这个安装

.whl 这些是属于离线包,Python的pip安装是需要从网络下载.whl文件的,我们可以线下手动下载,然后在上传到板子上,这样子就非常快了,不需要板子去科学上网

Jetson 版 PyTorch - Jetson 及嵌入式系统 / 公告 - NVIDIA 开发者论坛 --- PyTorch for Jetson - Jetson & Embedded Systems / Announcements - NVIDIA Developer Forums

相关的whl包在下面

jp6/cu126 index

安装好了之后,用下面这个代码测试一下Pytorch是否正常

python 复制代码
import torch

# 判断 PyTorch 是否可以使用 CUDA
print("CUDA available:", torch.cuda.is_available())

# CUDA 设备数量
print("Number of CUDA devices:", torch.cuda.device_count())

# 当前 CUDA 设备索引
print("Current CUDA device index:", torch.cuda.current_device())

# 当前 CUDA 设备名称
if torch.cuda.is_available():
    print("Current CUDA device name:", torch.cuda.get_device_name(torch.cuda.current_device()))

yolov5 ultralytics版本

YOLOv5 快速入门 🚀 - Ultralytics YOLO 文档

2.参考的案例

1、使用TensorRT-YOLO的sdk(模型自带nms)

laugh12321/TensorRT-YOLO: 🚀 Easier & Faster YOLO Deployment Toolkit for NVIDIA 🛠️
laugh12321/TensorRT-YOLO at export

2、使用YOLO-TensorRT10-FrameWork导出(onnx模型无nms)

对应的推理代码如下:

WindowsChicago/YOLO-TensorRT10-FrameWork: TensorRT10 YOLO C++高性能推理框架 --- WindowsChicago/YOLO-TensorRT10-FrameWork: TensorRT10 YOLO C++高性能推理框架

shape = [1, 84, 8400],前 4 个通道不是 xyxy,而是 cx, cy, w, h

使用下面指令导出engine模型

bash 复制代码
trtexec --onnx=yolov8s.onnx --saveEngine=yolov8s_fp16_nms.engine --fp16
3、带nms的onnx导出**(模型自带nms)**

对应的推理代码如下:

zjmooon/yolo11_tensorrt10: AI模型工程化模板。包括基本的图像前后处理CUDA函数,TensorRT10版本的cuda API更新。用Yolo11作为示例。

八、音视频编解码

GStreamer+opencv视频解码

下面这个代码实现C++对一个mp4视频进行GStreamer读取并且使用解码器H264解码,然后放到gpu上去进行缩放的操作然后再下载回CPU进行后继操作。

cpp 复制代码
#include <iostream>
#include <string>
#include <chrono>
#include <opencv2/cudawarping.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/core/cuda.hpp>
#include <opencv2/cudacodec.hpp>

int main() {
    // MP4文件路径
    std::string video_path = "/home/jetson/projects/yolo/my_test/source/1k.mp4";

    // 构建 GStreamer 管道字符串
    // 作用:读取文件 -> 解复用 -> 解析 -> 硬件解码(nvv4l2decoder) -> 格式转换(nvvidconv) -> 输出给OpenCV
    std::string pipeline = "filesrc location=" + video_path + " ! "
        "qtdemux ! h264parse ! nvv4l2decoder ! "
        "nvvidconv ! video/x-raw, format=(string)BGRx ! "
        "videoconvert ! video/x-raw, format=(string)BGR ! appsink";

    // 使用 GStreamer 后端打开
    cv::VideoCapture cap(pipeline, cv::CAP_GSTREAMER);

    if (!cap.isOpened()) {
        std::cerr << "无法通过 GStreamer 打开视频,请检查管道或文件路径。" << std::endl;
        return -1;
    }

    cv::Mat frame, r_frame;
    cv::cuda::GpuMat d_frame, d_resized_frame; // 如果需要 GPU Mat,后续再 upload

    // 帧率计算相关变量
    int frame_count = 0;
    auto last_time = std::chrono::steady_clock::now();
    auto start_time = std::chrono::steady_clock::now();
    double fps = 0.0;

    // 获取原始视频尺寸
    int original_width = static_cast<int>(cap.get(cv::CAP_PROP_FRAME_WIDTH));
    int original_height = static_cast<int>(cap.get(cv::CAP_PROP_FRAME_HEIGHT));
    std::cout << "原始视频尺寸: " << original_width << "x" << original_height << std::endl;

    double scale_factor = 0.5;
    int target_width = static_cast<int>(original_width * scale_factor);
    int target_height = static_cast<int>(original_height * scale_factor);

    while (true) {
        if (!cap.read(frame)) {
            break;
        }

        frame_count++;

        // 获取当前时间
        auto current_time = std::chrono::steady_clock::now();

        // 计算距离上次打印的时间间隔(秒)
        double time_diff = std::chrono::duration<double>(current_time - last_time).count();

        // 每秒打印一次帧率
        if (time_diff >= 1.0) {
            fps = frame_count / time_diff;
            std::cout << "当前帧率: " << fps << " FPS" << std::endl;

            // 重置计数器和时间
            frame_count = 0;
            last_time = current_time;
        }

        // 此时 frame 已经在 CPU 内存中,且是解码好的
        // 如果后续必须用 CUDA 处理:
        d_frame.upload(frame);
        // GPU上的图像缩放
        cv::cuda::resize(d_frame, d_resized_frame,
            cv::Size(target_width, target_height),
            0, 0, cv::INTER_LINEAR);

        d_frame.download(r_frame);
    }

    return 0;
}

webrtc

jetson-inference/docs/webrtc-server.md at master · dusty-nv/jetson-inference --- jetson-inference/docs/webrtc-server.md at master · dusty-nv/jetson-inference

相关问题问题

关于Tensorrt int8量化

官方这里说可以导出.engine模型,不过这个模型是有问题的,不能,目前我个人测试只能在ultralytics下的Python代码去跑,使用下面这个Tensorrt指令打印的结果是报错的。

bash 复制代码
trtexec --loadEngine=./yolov8n.engine

所以建议使用其他方式去进行导出

jetson关于视频解码问题

下面是官方的回应

相关推荐
---学无止境---1 小时前
TSS(Task-State Segment)任务状态段详解
linux
8278209371 小时前
python scp 备份
开发语言·python
未来之窗软件服务1 小时前
服务器运维(十七)web服务对比和选择——东方仙盟炼气期
运维·服务器·服务器运维·仙盟创梦ide·东方仙盟
poggioxay1 小时前
JAVA零基础入门知识3(持续更新中)
java·开发语言·python
雪影风痕1 小时前
华为安全防火墙部署
服务器·网络协议·tcp/ip·网络安全
serve the people1 小时前
TensorFlow 基础训练循环(简化版 + 补全代码)
人工智能·python·tensorflow
木里先森1 小时前
解决报错:/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32‘ not found
linux·python
爱打代码的小林2 小时前
numpy库数组笔记
笔记·python·numpy
shizhan_cloud2 小时前
IF 条件语句的知识与实践
linux·运维