基于ESP32的機器人可使用BallyBot的人臉檢測
讓我們通過集成面部檢測將現(xiàn)有的網(wǎng)絡(luò)攝像頭服務(wù)器提升到一個新的水平。使用我們基于ESP32的機器人,我們可以突出人臉!
在本課中,我們將通過在視頻流中添加實時人臉檢測來增強BallyBot的相機功能。使用機器學(xué)習(xí)模型,你的機器人將檢測人臉并在視頻饋送中突出顯示。這是邁向未來交互式機器人項目的基礎(chǔ)一步。
步驟0:從上一課開始編寫代碼
而不是從頭開始創(chuàng)建這個項目,我們將使用第7課:視頻流與BallyBots相機的代碼為基礎(chǔ)。
步驟1:添加人臉檢測庫
我們將使用兩種模型進行面部檢測:
?HumanFaceDetectMSR01:檢測人臉區(qū)域。
?HumanFaceDetectMNP01:提高檢測精度。
在現(xiàn)有內(nèi)容之后添加這些行:
步驟2:創(chuàng)建人臉檢測對象
要使用人臉查找?guī)?,我們需要從每個庫的類中創(chuàng)建一個對象。我們稱它們?yōu)閟1和s2
S1和S2保存庫的函數(shù),如用于面部檢測的infer()。
?S1配置為高靈敏度(低置信閾值),但可能產(chǎn)生更多誤報。
?S2是更嚴(yán)格的(更高的置信閾值),以精煉S1的結(jié)果。
在setup()函數(shù)之前創(chuàng)建這些面部檢測類的實例:
步驟3:修改攝像頭配置
相機目前捕獲JPEG格式的圖像,但我們需要RBG圖像來讓infer()工作。我們可以通過更新相機設(shè)置來解決這個問題,以RGB565格式而不是JPEG格式捕獲圖像。
具體來說,更新CameraSetup()以輸出RGB565像素格式的幀:
步驟4:將檢測集成到視頻循環(huán)中
現(xiàn)在我們可以添加s1和s2的infer()命令來執(zhí)行面部檢測。在循環(huán)中,我們將對相機的幀緩沖區(qū)變量fb調(diào)用infer()
一旦完成,我們現(xiàn)在就可以執(zhí)行Serial.println()來告訴我們它是否檢測到人臉:
然后,我們需要將RGB565幀緩沖區(qū)轉(zhuǎn)換為JPEG格式,以流式傳輸?shù)娇蛻舳藶g覽器。JPEG的使用效率更高,因為它的文件大小要小得多,因此更容易發(fā)送數(shù)據(jù)。
C++
步驟5:在幀緩沖區(qū)中突出顯示臉部
之前的代碼將檢測人臉,但在發(fā)送的視頻中沒有明顯的差異!我們需要在它檢測到我們發(fā)送的視頻中的人臉的地方添加一個正方形。
要在幀緩沖區(qū)中檢測到的面周圍繪制矩形,我們將使用fb_gfx庫的fb_gfx_drawFastHLine()命令。
步驟6:測試人臉檢測
?上傳代碼。
?連接到BallyBot的WiFi。
?在瀏覽器中打開192.168.4.1。
?攝像機視圖中的人臉現(xiàn)在應(yīng)該有黃色邊框了!
步驟7:最終代碼:
以下是本課程的完整代碼,供將來的項目參考:
故障排除
?無框可見:確保相機的像素格式設(shè)置為RGB565。
?延遲流:在CameraSetup()中將幀大小減小為FRAMESIZE_QVGA。
?誤報:調(diào)整檢測參數(shù)(步驟5)。
結(jié)論
你的BallyBot現(xiàn)在可以看到人臉了!這為以下方面打開了大門:
?安全:觸發(fā)告警或日志檢測。
?交互:當(dāng)人臉出現(xiàn)時,讓機器人揮手或說話。
?導(dǎo)航:自動跟蹤人臉。
本文編譯自hackster.io