---
# System prepended metadata

title: Pytorch模型轉TensorRT模型，使用Webcam realtime在jetson nano上推理

---

---
title: 'Project documentation template'
disqus: hackmd
---

Pytorch模型轉TensorRT模型，使用Webcam realtime在jetson nano上推理
===


## Jetpack4.6.1

[TOC]

## 安裝Jetson nano

下載Jetpack，裡面包含Linux os及gpu計算所需的套件

1. 到官網 https://developer.nvidia.com/embedded/jetpack-archive

2. 下載版本JetPack 4.6.5，或其他支援Jetson nano的版本，點選下載SD Card Image
![image](https://hackmd.io/_uploads/ryTeEFmiA.png)
![image](https://hackmd.io/_uploads/Hy1PNt7iA.png)

3. 準備容量64g或以上的SD卡，並下載官方建議的燒錄軟體 https://etcher.balena.io/#download-etcher ，選擇下載好的Jetpack資料夾、SD卡，並進行燒錄，這會需要一點時間
![image](https://hackmd.io/_uploads/BkQIvt7i0.png)

4. 燒錄完成後插上Jetson nano，即可開機

5.可接上hdmi外接螢幕，或使用遠端桌面，我是簡單使用teamviewer，若要求更快的畫面傳輸速度，可使用內網連接方式的nvc 


建立Docker虛擬環境、 建立環境
---

1. 安裝x11，複製以下指令到本機Terminal中
```
sudo apt-get install x11-apps
```

 
2. 選擇JetPack4安裝包，因為我們要添加其他功能，更改成以下內容，貼到主機Terminal中並執行，會下載ultralytics映像檔，並把Docker環境建立
https://docs.ultralytics.com/guides/nvidia-jetson/#jetpack-support-based-on-jetson-device
![image](https://hackmd.io/_uploads/rJhAccmoA.png)
 ```
 t=ultralytics/ultralytics:latest-jetson-jetpack4
 sudo docker pull $t
 sudo docker run -it \
    --privileged \
    --device /dev/gpiochip0 \
    --runtime=nvidia \
    --device=/dev/video0:/dev/video0 \
    --ipc=host \
    -v /home/jetson-nano/Desktop:/data \
    -e DISPLAY=$DISPLAY \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    ultralytics/ultralytics:latest-jetson-jetpack4
 ```
 :::info
   需要先插上usb網路攝影機才可正確執行，不須使用Webcam可把device=刪除
:::



 其他Docker常用指令
 ```
 #啟動一個已存在的 Docker 容器
 sudo docker start [myContainer_name]
 
 #進入正在運行的 Docker 容器的終端
 sudo docker exec -it [myContainer_name] /bin/bash
 
 #運行一個新的 Docker 容器
 sudo docker run -it --name my_container my_image
 
 #查看所有以建立的環境
 sudo docker ps -a
 
 #刪除指定的 Docker 容器
 sudo docker rm my_container
 
 #停止指定的 Docker 容器
 sudo docker stop my_container

 ```

載入pt模型，並轉換成TensorRT
---
1. 到本機終端輸入以下指令，把預先訓練好的pt檔案複製到你建立好的容器中
```
sudo docker cp ./Desktop/best.pt <container_id>:/best.pt
```
 :::info
   需更改你的pt檔案位置，以及你的容器id
:::
2.回到剛剛的虛擬環境中，執行以下指令，若成功會把pt轉換成engine檔，這會需要一點時間
```
yolo export model=/best.pt format=engine
```
 :::info
   過程中GPU可能會過熱，導致執行錯誤?? 可以使用以下指令開啟或關閉散熱風扇
   `sudo sh -c 'echo 255 > /sys/devices/pwm-fan/target_pwm'`
   `sudo sh -c 'echo 0 > /sys/devices/pwm-fan/target_pwm'`
:::
進行Webcam即時推理
---
允許容器連接到 X11在主機上，允許 Docker 容器連接到你的 X11 伺服器
在你的本機Terminal執行:
```
xhost +local:docker
```
複製以下指令到虛擬環境中
```
yolo predict model=/best.engine source=0 show=True
```
如成功，將打開你的Webcam進行推理
## 恭喜成功，成果展示




