使用 esp32-cam 搭配 opencv 实现人脸识别
前提摘要
之前介绍了如何通过 esp32-cam 实现一个家用监控。但是光有监控没有智能识别总少了点味道,所以本文主要是探索人脸识别 + 物体识别的功能。
原理很简单,这里需要一个上位机和一个下位机。上位机用来算法处理接受到的数据,下位机用来接收处理完之后的内容。并通过构建一个可视化窗口展示结果。
这里的上位机就是香橙派,下位机就是 esp32。我们可以理解成esp32 拍摄的数据就是没加字幕的电影,而 orangePI 就是加字幕工具,加好字幕之后呈现在我们面前的就是所谓的熟肉。
本文主要的难点就是捕获esp32 的视频流数据,然后对原始视频流进行二次加工的过程。
准备
- esp32-cam x 1
- 香橙派 zero3 x1 (这个按需求来,只要是服务器就行)
- 杜邦线若干
环境搭建
在这个案例中需要注意的是我们需要了解一些关于 python 相关的知识。环境部分为 esp32-cam 部分和 opencv 部分。编辑器都是统一用的 vscode(我就是它的脑残粉)
1. esp32-cam 部分
这个可以参考我之前的案例,其它的基本没有什么大的改动,照抄就行。
2. opencv部分
重点是这个部分,我们需要安装一个 python 环境来支持这个功能的使用。安装 python 直接上官网下载自己需要的平台,下载最新的就好(3.0 版本的)。然后通过控制台输入以下命令:
1 | python --version |
如果输出版本号就说明安装成功了。
接下来就安装 opencv 的依赖包了。输入以下命令:
1 | pip install opencv-python requests |
这里安装接下来需要用到的两个依赖包。
然后在当前摄像头项目根目录下新建一个文件,代码如下:
1 | import cv2 |
很简单的操作。
拓展
对于之前 esp32-cam 的代码由于使用的是示例代码没有什么好讲的。填好 wifi 信息,然后通过控制台打印的 ip 地址访问即可。
但是示例代码里面的几个 api 我们可以了解一下,比如 /status 这个 api,通过这个 api 我们可以获取在示例代码的环境下可以修改的参数。以下是可以修改的所有参数。
1 | { |
里面的所有参数都可以通过调用 post 请求 /control?var=xx&val=xx 这样的形式来修改回调画面的显示情况。例如:
1 | control?var=hmirror&val=1 |
快点动手试试吧。
小结
总体使用下来,发现 opencv 识别的人脸模型不够精确,并且对像素要求比较高,也可能是我的模型不够精准。所以后面我又重新找了 tensorflow 的方案替代。这个就留着下篇在分享吧。
使用 esp32-cam 搭配 opencv 实现人脸识别