一、super模式刷机
可以照着这个视频做
【创乐博 NVIDIA Jetson Orin Nano 和 Orin NX 开发套件快速升级成Super模式手把手视频教程 秒变性能怪兽】https://www.bilibili.com/video/BV1udwNeZENB?vd_source=342079de7c07f82982956aad8662b467
使用下面命令安装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开启硬件编解码加速-开发者社区-阿里云
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
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环境以及相关换源
bash
wget http://fishros.com/install -O fishros && . fishros
七、yolo(jetpack 6.2版本,Tensorrt10.3)
ultralytics官网:
ultralytics/ultralytics:Ultralytics YOLO 🚀 --- ultralytics/ultralytics: Ultralytics YOLO 🚀
如果是使用jetpack5的,可以参考这个TensorRT-YOLO11/C++/detect at main · emptysoal/TensorRT-YOLO11
关于yolo网络结构相关文献:
1.YOLO环境搭建
在conda环境下
bash
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple
GPU加速Pytorch使用下面这个安装
.whl 这些是属于离线包,Python的pip安装是需要从网络下载.whl文件的,我们可以线下手动下载,然后在上传到板子上,这样子就非常快了,不需要板子去科学上网
相关的whl包在下面
安装好了之后,用下面这个代码测试一下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版本

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)

对应的推理代码如下:
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
相关问题问题
关于Tensorrt int8量化
官方这里说可以导出.engine模型,不过这个模型是有问题的,不能,目前我个人测试只能在ultralytics下的Python代码去跑,使用下面这个Tensorrt指令打印的结果是报错的。
bash
trtexec --loadEngine=./yolov8n.engine

所以建议使用其他方式去进行导出
jetson关于视频解码问题


下面是官方的回应
