https://blog.csdn.net/pleasescanf/article/details/133189245
有jetpack没有cuda(一般都配套)

# 准备工作

# 一、先确认版本

head -n 1 /etc/nv_tegra_release

输出类似:

# R35 (release), REVISION: 5.0, GCID: 35531747, BOARD: t186ref, EABI: aarch64, DATE: Thu May  9 07:57:12 UTC 2024

R35.3 → JetPack 5.1.2

# 二、手动添加源

sudo bash -c 'echo "deb https://repo.download.nvidia.com/jetson/common r35.5 main" > /etc/apt/sources.list.d/nvidia-l4t.list'
sudo bash -c 'echo "deb https://repo.download.nvidia.com/jetson/t234 r35.5 main" >> /etc/apt/sources.list.d/nvidia-l4t.list'

注意修改版本信息如r35.3

sudo apt update

只要 JetPack 版本匹配,安装 nvidia-jetpack 不会破坏系统,也不会导致混乱

sudo apt install nvidia-jetpack

# 三、验证

nvcc -V
dpkg -l | grep tensorrt
dpkg -l | grep cudnn

# 四、pytorch和torchvision

这个简单,随便搜资料都有

# 五、opencv cuda版本

https://blog.csdn.net/weixin_45306341/article/details/127926178
j不要用满,不然会崩

make -j4

# 最后添加环境变量:

先找路径

sudo find /usr/local/lib -name "cv2*.so"

打开 Python3,然后输入:

import sys
print(sys.path)

检查路径在不在,不在就source

echo 'export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.8/site-packages' >> ~/.bashrc
source ~/.bashrc

# tensorrt

# 准备:

训练.pt文件
如果不兼容,运行转换脚本

import torch
from pathlib import PosixPath

# 注册 WindowsPath 以兼容反序列化
import pathlib
temp = pathlib.WindowsPath
pathlib.WindowsPath = PosixPath

# 加载模型(此时能正常加载)
model = torch.load('best.pt', map_location='cpu')

# 保存为兼容Linux的版本
torch.save(model, 'best_linux.pt')

print("✅ 模型已重新保存为 best_linux.pt,可在 Linux/Jetson 上正常使用。")

# 1. pt ->onnx ->engine

https://zhuanlan.zhihu.com/p/1948876311662670336
较高的yolo版本支持直接导出
1.建立文件

from ultralytics import YOLO

def main():
    # 1️⃣ 加载YOLOv5模型权重(你也可以改成自己的.pt文件路径)
    model = YOLO("best_linux.pt")

    # 2️⃣ 导出为TensorRT引擎
    model.export(
        format="engine",   # 导出格式:TensorRT
        device="cuda",     # 使用GPU
        half=True,         # 使用FP16半精度加速
        dynamic=False,     # 固定输入尺寸(默认640x640),一般更稳定
        imgsz=640          # 可改为你训练时的输入尺寸
    )

    print("\n✅ 导出完成!文件已保存为 yolov5s.engine")

if __name__ == "__main__":
    main()

2.测试文件

from ultralytics import YOLO
import cv2
import time

def main():
    # 加载 TensorRT 引擎
    model = YOLO("yolov5nu.engine")

    # 打开摄像头(0 表示第一个摄像头)
    cap = cv2.VideoCapture(0)
    if not cap.isOpened():
        print("❌ 无法打开摄像头")
        return

    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
    print("✅ 摄像头已打开,开始检测,按 Q 退出。")

    prev_time = 0

    while True:
        ret, frame = cap.read()
        if not ret:
            print("⚠️ 无法读取帧")
            break

        # TensorRT 推理(禁用窗口显示以避免闪烁)
        results = model(frame, imgsz=640, verbose=False)

        # 获取检测结果
        boxes = results[0].boxes.xyxy.cpu().numpy()  # [x1, y1, x2, y2]
        confs = results[0].boxes.conf.cpu().numpy()  # 置信度
        clss = results[0].boxes.cls.cpu().numpy()    # 类别

        # 逐个绘制框
        for (box, conf, cls_id) in zip(boxes, confs, clss):
            x1, y1, x2, y2 = map(int, box)
            label = f"{model.names[int(cls_id)]} {conf:.2f}"
            cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
            cv2.putText(frame, label, (x1, y1 - 5),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)

        # 计算 FPS
        curr_time = time.time()
        fps = 1 / (curr_time - prev_time) if prev_time != 0 else 0
        prev_time = curr_time

        cv2.putText(frame, f"FPS: {fps:.2f}", (10, 30),
                    cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)

        # 显示结果
        cv2.imshow("YOLOv5 TensorRT Detection", frame)

        # 按 Q 退出
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()


if __name__ == "__main__":
    main()

3.可能要加swap交换空间

sudo swapoff -a
sudo fallocate -l 6G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

再执行

sudo nano /etc/fstab

最后一行添加

/swapfile swap swap defaults 0 0

# 2.pt ->wts ->engine

https://www.cnblogs.com/Fish0403/p/18218385#_label4
github:
https://github.com/wang-xinyu/tensorrtx