ESP32-CAM + MicroPython 人脸识别(拍照上传 + 电脑识别)
架构:ESP32-CAM (MicroPython) 定时拍照 → WiFi 局域网上传 → 电脑(Flask + face_recognition) 识别 → 识别成功 ESP32 板载 LED 亮 3 秒。
项目结构
face-recognition-cam/
├── esp32/ # 烧录到 ESP32-CAM 的文件
│ ├── boot.py # 连 WiFi
│ ├── main.py # 定时拍照上传 + LED
│ └── config.json # WiFi / 服务器IP / 拍照间隔
└── server/ # 电脑端
├── server.py # 识别服务 (端口 5000)
├── enroll.py # 人脸录入工具
├── faces/ # 人脸库 (.npy)
└── captures/ # 上传照片与识别日志
一、电脑端部署
- 安装 Python 3.9+(勾选 Add to PATH)。
- 安装依赖:
cd E:\Zcode\face-recognition-cam\server
pip install flask opencv-contrib-python
本项目支持两种识别后端,启动时自动选择:
- LBPH(默认):只需上面的依赖,纯 pip 安装,精度中等,已在本机验证可用。
- face_recognition(dlib,精度更高):
pip install face_recognition。 注意:dlib 在 Python 3.13 下无预编译包,安装失败就继续用默认 LBPH 即可。
- 查看本机局域网 IP:
ipconfig→ IPv4 地址(当前为192.168.1.106)。 - Windows 防火墙放行 5000 端口(首次运行 Flask 时弹窗勾选”专用网络”允许即可,或:
netsh advfirewall firewall add rule name="FaceServer" dir=in action=allow protocol=TCP localport=5000)。
二、网页管理台(推荐,录入人脸 / 查看记录 / 生成配置 一站完成)
cd server
python server.py
浏览器打开 http://127.0.0.1:5000 即可使用:
- 概览:系统状态、已录入人脸(可删除)、识别记录(10 秒自动刷新)
- 人脸录入:用电脑浏览器摄像头直接采集,输入姓名后点”采集一张”(建议 5 张),完成后点”完成并生效”
- 抓拍照片:查看 ESP32 上传的所有照片(文件名 = 识别结果_时间)
- ESP32 配置生成:填 WiFi 信息一键生成 config.json 内容,复制后粘贴到板子上
命令行录入工具 enroll.py 仍保留可用。
三、烧录 ESP32-CAM
1. 烧录带摄像头驱动的 MicroPython 固件
必须使用内置 camera 模块的固件(lemariva 版)。 注意:该项目的固件不在 Releases 页面,而是放在仓库的 firmware/ 目录中, 本项目已下载好:firmware/micropython_v1.21.0_camera_no_ble.bin (来源: https://github.com/lemariva/micropython-camera-driver/tree/master/firmware )
用 esptool 烧录(需安装 pip install esptool):
# 先擦除 (GPIO0 接 GND 进入烧录模式后按一下 RST)
esptool.py --port COMx erase_flash
esptool.py --port COMx --baud 921600 write_flash 0x1000 micropython_v1.21.0_camera_no_ble.bin
2. FTDI 接线(AI-Thinker ESP32-CAM)
| ESP32-CAM | FTDI |
|---|---|
| 5V | 5V(必须 5V,供电要足 2A,不要用 3.3V) |
| GND | GND |
| U0R | TX |
| U0T | RX |
| GPIO0 | GND(仅烧录时接,运行时断开) |
烧录/传文件时 GPIO0 接 GND 后按一下 RST;运行时断开 GPIO0 再按 RST。
3. 上传代码
用 Thonny(推荐,选解释器为 MicroPython)或 ampy/mpremote 把 esp32/boot.py、esp32/main.py、esp32/config.json 三个文件上传到板子根目录。
4. 修改配置
编辑板上 config.json:
【测试内容】这是一条通过自动化操作发布的测试文章,发布时间:2026年8月18日。
wifi_ssid/wifi_password:你的 WiFi(需 2.4GHz,ESP32 不支持 5GHz)server_host:电脑局域网 IP(当前192.168.1.106)photo_interval_sec:拍照间隔秒数
四、运行
- 电脑先运行
python server.py; - ESP32-CAM 断开 GPIO0 接线,按 RST 复位,即自动开始定时上传;
- 识别成功 → 板载红色 LED(GPIO33)亮 3 秒;server 控制台同步打印结果。
常见问题
- 拍照失败/花屏:供电不足,换 5V 2A 电源;确认固件启用了 PSRAM。
- 上传失败:检查电脑防火墙、IP 是否变化(DHCP 建议给电脑绑定静态 IP)、手机热点需在”允许网络发现”。
- 识别不准:多录入几张不同光照/角度的照片;可调小
server.py中MATCH_THRESHOLD(更严格)。 - WiFi 连接失败:确认是 2.4GHz 频段 WiFi。