在Jetson Nano上十行代码实现目标检测(jetson_inference)
網上有一個10行代碼搞定目標檢測的視頻教程
參考網址:https://www.bilibili.com/video/av91150116/
經測非常實用,通過10行代碼實現目標檢測,在Jetson Nano上迅速搭建一個目標識別的示例和開發環境。
視頻例程使用Jetson官方的深度學習庫(jetson_inference)進行目標檢測程序實現
項目鏈接:https://github.com/dusty-nv/jetson-inference
項目介紹頁面中Building the Project from Source給出了從源代碼進行安裝和配置的指南
指南鏈接:https://github.com/dusty-nv/jetson-inference/blob/master/docs/building-repo-2.md
概要步驟如下
建議在進行安裝之前先進行系統環境配置,如apt、pip的源設置,中文輸入等。
一、jetson-inference下載和安裝
步驟如下
1.?預安裝軟件
首先安裝需要用到的軟件包
$ sudo apt instal git cmake libpython3-dev python3-numpy
假定apt update在系統配置時已經運行過了,這里不再重復。
2. 下載代碼庫
然后下載軟件源代碼庫
$ git clone --recursive https://github.com/dusty-nv/jetson-inference
這一步比較費事,這是一個遞歸的源代碼庫,包含多個子代碼庫,因為國內外網絡環境的問題,從Github下載會出現連接不穩定,不能下載全的情況。這種情況建議多嘗試幾次,或者從其它地方進行下載。
3. 編譯安裝
之后進入代碼目錄進行編譯安裝
$ cd jetson-inference
創建一個cmake編譯目錄
$ mkdir build
$ cd build
進行cmake
$ cmake ..
在cmake過程中會彈出對話框讓選擇下載模型和安裝pytorch,因為國內連接國外不穩定,建議選擇不安裝(通過TAB鍵選擇Quit和Skip,按回車),后面進行離線下載和安裝。
cmake完成之后,進行編譯和安裝
$ make -j4
$ sudo make install
這樣jetson-inference庫就安裝完成了。編譯之后會在build目錄下生成jetson-inference庫相關文件,包括頭文件、庫文件、幫助文件、腳本工具、示例程序等。make install會把相關的文件復制到對應的系統目錄。
其中download-model.sh和install-pytorch.sh文件分別是下載模型和安裝pytorch的腳本文件,可以查看參考文件,進行離線下載和安裝。
其中會生成一個aarch64目錄,里面包含jetson-inference庫的相關文件,目錄結構如下
其中lib目錄包含庫文件,include目錄包含頭文件,bin目錄包含一些圖像分類、目標識別等相關的命令和工具。
4. 測試
安裝完成之后,build/aarch64/bin目錄包含了一些圖像分類、目標識別等方面的執行文件,如下?
可以用這些程序進行目標識別的測試。在bin目錄下運行
$ ./imagenet.py --network=resnet-18 images/jellyfish.jpg images/test/output_jellyfish.jpg
就可以對imags/jellyfish.jpg圖片進行分類識別。識別結果輸出在images/test/output_jellyfish.jpg文件。
因為安裝時沒有選擇在線下載模型,這個程序運行不能成功。可以自己下載模型和建立python文件來進行基于jetson-inference庫的例程開發。
5. 模型下載
Github提供了離線下載模型的方法,通過
模型下載鏈接:https://github.com/dusty-nv/jetson-inference/releases
可以根據需要下載對應的模型,下載到data/networks目錄,然后解壓,比如
$ tar -zxvf SSD-Mobilenet-v2.tar.gz
常見的有GoogleNet,ResNet,SSD-Mobilenet等,如下
下載和解壓到data/networks目錄之后,就可以在程序中使用jetson-inference庫調用這些模型了。
二、例程編寫和測試
這里用一個10行代碼的例程來實現目標識別。參考視頻,代碼如下
import jetson.inference import jetson.utilsnet = jetson.inference.detectNet('SSD-Mobilenet-v2', threshold=0.5) camera = jetson.utils.gstCamera(1280,720,'0') display = jetson.utils.glDisplay()while display.IsOpen():img, width, height = camera.CaptureRGBA()detections = net.Detect(img, width, height)display.RenderOnce(img, width, height)display.SetTitle('Object Detection | Network %.1f FPS'%net.GetNetworkFPS())采用SSD-Mobilenet-v2網絡對攝像頭視頻進行在線目標識別。假定命名程序文件detect_net.py,然后運行
$ python3 detect_net.py
程序結果就會出現攝像頭的畫面和在線識別的結果,如下?
實際測試響應效果良好,能夠達到20多fps的幀率,沒有滯后感。
總結
以上是生活随笔為你收集整理的在Jetson Nano上十行代码实现目标检测(jetson_inference)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嵌入式的技术竞争力
- 下一篇: 目标检测 Chapter1 传统目标检测