在本教程系列的第一部分中,您將學習如何使用樹莓派AI攝像頭來檢測不同的樹莓派型號。本系列由David Plowman創建,他是樹莓派工程師,專注于圖像處理硬件、攝像頭軟件和算法研究。
您可以將AI攝像頭對準樹莓派4,屏幕上會顯示“Raspberry Pi 4”;對準樹莓派Zero時顯示“Raspberry Pi Zero”,依此類推。
組裝在樹莓派5上的樹莓派AI攝像頭
這是一個強大的示例,展示如何訓練樹莓派進行實時目標檢測推理。這也是探索樹莓派AI攝像頭API(應用程序接口)以及模型與推理之間關系的好方法。
設置AI攝像頭
將您的樹莓派 AI 相機連接到兼容的樹莓派電腦。我們用的是樹莓派5,但是AI相機兼容所有樹莓派型號。更多信息可以閱讀AI相機數據表。
樹莓派AI相機采用索尼IMX500圖像傳感器,為相機應用提供低延遲、高性能的AI能力,而無需AI HAT+(或AI Kit)。它在IMX500傳感器上運行定制的神經網絡模型。
樹莓派AI智能相機包含一個具有AI推理能力的索尼IMX500傳感器
確保系統已更新,然后安裝IMX500固件:
$sudo apt install imx500-all
此命令會:
安裝操作IMX500傳感器所需的固件文件imx500_loader.fpk和imx500_firmware.fpk
將多個神經網絡模型文件放入/usr/share/imx500-models/
安裝IMX500后處理軟件到rpicam-apps
安裝索尼網絡模型打包工具
現在重啟樹莓派:
$sudo reboot
讓我們來測試一下是否一切正常。以下命令運行帶有對象檢測后處理的rpicam-hello:
$rpicam-hello -t 0s --post-process-file/usr/share/rpi-camera-assets/imx500_mobilenet_ssd.json --viewfinder-width 1920 --viewfinder-height 1080 --framerate 30
以下命令運行rpicam-hello并進行姿態估計后處理:
$rpicam-hello -t 0s --post-process-file/usr/share/rpi-camera-assets/imx500_posenet.json --viewfinder-width 1920 --view
獲取代碼
現在你的AI相機設置好了,你需要代碼。對于本教程,最好從從GitHub復制文件開始。在終端中,輸入:
$gitclonehttps://github.com/davidplowman/pi_classifier.git
進入pi_classifier目錄,查看一下里面的內容:
$cdpi_classifier$ls
進入pi_classifier目錄,您將看到三個文件:
demo.py:Python主程序
labels.txt:包含不同樹莓派型號的標簽
network.rpk:預訓練的神經網絡模型文件(針對IMX500傳感器優化)
運行代碼:
$python demo.py
屏幕會顯示攝像頭預覽窗口。將樹莓派對準攝像頭,預覽窗口會根據labels.txt中的選項顯示對應型號。
它是如何工作的
讓我們在Thonny(或您選擇的代碼編輯器)中打開demo.py代碼并查看一下:
$thonny demo.py
parse_and_draw_classification_result
這個函數是作為回調函數提供給相機系統的,這意味著每當一個新的幀從相機到達時,它就會被自動調用,而不需要我們(應用程序)做任何額外的事情。因為我們使用的是索尼IMX500傳感器,所以我們不僅獲得了通常的相機圖像,還獲得了一個輸出張量,列出了對圖像運行神經網絡的結果。
我們需要使用 parse_classification_result 解析神經網絡結果,然后使用 draw_classification_result 將它們繪制到相機圖像上。
parse_classification_result
這將分析IMX500傳感器產生的輸出張量,并確定圖像是否屬于網絡訓練的類別之一。有幾件事需要注意。
檢測樹莓派3
首先,并不總是有輸出張量。如果神經網絡加速器沒有及時完成對幀的處理,就會發生這種情況。當這種情況發生時,我們應該重用前一幀的結果;另一個框架,張量再次可用,將很快出現!
接下來,我們返回具有最高置信度值的類別。一些網絡可能會告訴我們,我們應該對輸出值使用softmax運算,以獲得每個類的更真實的概率。
draw_classification_result
這里,我們在攝像機圖像上繪制一個標簽,指示設備類別和置信度值,但前提是置信度值足夠高。
我們使用Picamera2的MappedArray以通常的方式訪問實際的相機圖像像素(而不是它的副本)。我們測量類別標簽和置信度值將占據的框的大小,然后將圖像的這一部分變暗,以便當我們隨后將文本寫在頂部時,它會更突出。
檢測樹莓派Zero
if __name__ == “__main__”
這部分代碼只涉及配置IMX500、上傳神經網絡固件文件(network.rpk)以及讓攝像機運行。有幾件事需要指出:
1.我們首先創建IMX500相機輔助對象。這將為我們上傳網絡,并告訴我們IMX500是哪個攝像頭。
2.NetworkIntrinsics對象是網絡的助手,它會推薦我們可以使用的合適的幀速率,該幀速率應該與IMX500上的網絡推斷速率相匹配。
3.在啟動相機之前,我們應該告訴IMX500助手,我們希望看到網絡上傳的進度條——否則很容易認為它可能卡住了!回想一下,網絡固件在后續情況下上傳更快,因為更多的固件塊已經緩存在設備中。
4.最后,我們讓腳本永遠運行,所有的相機處理都在后臺線程中進行。
下載樹莓派分類器的完整demo.py代碼。
https://github.com/themagpimag/rpimag-issue154/blob/master/pi_classifier/demo.py
原文地址:
https://www.raspberrypi.com/news/build-a-raspberry-pi-classifier-detect-different-raspberry-pi-models/
-
分類器
+關注
關注
0文章
153瀏覽量
13433 -
樹莓派
+關注
關注
121文章
1986瀏覽量
107275
發布評論請先 登錄
樹莓派的種類_樹莓派安裝教程
樹莓派3wifi配置_樹莓派3開啟wifi熱點_樹莓派3的wifi使用教程
樹莓派3硬件配置_樹莓派3都能裝什么系統_樹莓派3系統安裝教程
樹莓派用什么語言編程_樹莓派python編程詳解
淺談香蕉派與樹莓派的不同
樹莓派控制步進電機

評論