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