基于ESP32的机器人可使用BallyBot的人脸检测
扫描二维码
随时随地手机看文章
让我们通过集成面部检测将现有的网络摄像头服务器提升到一个新的水平。使用我们基于ESP32的机器人,我们可以突出人脸!
在本课中,我们将通过在视频流中添加实时人脸检测来增强BallyBot的相机功能。使用机器学习模型,你的机器人将检测人脸并在视频馈送中突出显示。这是迈向未来交互式机器人项目的基础一步。
步骤0:从上一课开始编写代码
而不是从头开始创建这个项目,我们将使用第7课:视频流与BallyBots相机的代码为基础。
步骤1:添加人脸检测库
我们将使用两种模型进行面部检测:
•HumanFaceDetectMSR01:检测人脸区域。
•HumanFaceDetectMNP01:提高检测精度。
在现有内容之后添加这些行:
步骤2:创建人脸检测对象
要使用人脸查找库,我们需要从每个库的类中创建一个对象。我们称它们为s1和s2
S1和S2保存库的函数,如用于面部检测的infer()。
•S1配置为高灵敏度(低置信阈值),但可能产生更多误报。
•S2是更严格的(更高的置信阈值),以精炼S1的结果。
在setup()函数之前创建这些面部检测类的实例:
步骤3:修改摄像头配置
相机目前捕获JPEG格式的图像,但我们需要RBG图像来让infer()工作。我们可以通过更新相机设置来解决这个问题,以RGB565格式而不是JPEG格式捕获图像。
具体来说,更新CameraSetup()以输出RGB565像素格式的帧:
步骤4:将检测集成到视频循环中
现在我们可以添加s1和s2的infer()命令来执行面部检测。在循环中,我们将对相机的帧缓冲区变量fb调用infer()
一旦完成,我们现在就可以执行Serial.println()来告诉我们它是否检测到人脸:
然后,我们需要将RGB565帧缓冲区转换为JPEG格式,以流式传输到客户端浏览器。JPEG的使用效率更高,因为它的文件大小要小得多,因此更容易发送数据。
C++
步骤5:在帧缓冲区中突出显示脸部
之前的代码将检测人脸,但在发送的视频中没有明显的差异!我们需要在它检测到我们发送的视频中的人脸的地方添加一个正方形。
要在帧缓冲区中检测到的面周围绘制矩形,我们将使用fb_gfx库的fb_gfx_drawFastHLine()命令。
步骤6:测试人脸检测
•上传代码。
•连接到BallyBot的WiFi。
•在浏览器中打开192.168.4.1。
•摄像机视图中的人脸现在应该有黄色边框了!
步骤7:最终代码:
以下是本课程的完整代码,供将来的项目参考:
故障排除
•无框可见:确保相机的像素格式设置为RGB565。
•延迟流:在CameraSetup()中将帧大小减小为FRAMESIZE_QVGA。
•误报:调整检测参数(步骤5)。
结论
你的BallyBot现在可以看到人脸了!这为以下方面打开了大门:
•安全:触发告警或日志检测。
•交互:当人脸出现时,让机器人挥手或说话。
•导航:自动跟踪人脸。
本文编译自hackster.io