前几天妹子送了个生日礼物——树莓派,想到公司门禁还是指纹解锁,随即说干就干,开始折腾个人脸门禁顺便入门吧。
0x00 思路
最开始我的想法是由树莓派独立完成摄像头图像捕捉、人脸检测、比对;转念一想,后期这玩意可以迎合公司项目,放到政企专网内部运作,还是 C/S 比较合适(更新方便、统一管理、Client 端平台无限制);后来受到公司另一个小伙伴的启发,既然采用 C/S 架构,那服务器端肯定是 x64 的 CPU,可以调用虹软人脸 SDK,避免使用开源算法头疼优化问题,所以最终的结构基本是这样的:
(凑合看吧……毕竟是自己整理思路的时候随手画的)
0x01 准备
硬件
- 树莓派 3B
- 罗技 C170 摄像头(街边电脑店买的)
- Linux 服务器一台(with x64 CPU)
软件
- C
- Node.js
- 虹软 SDK
0x02 折腾
树莓派: 安装系统
树莓派: USB 摄像头支持列表
树莓派: 连接摄像头
- fswebcam
- 罗技 C170 报错问题(不支持 RGB 通道,必须使用
-p YUYV
) - mplayer
树莓派: Node.js 连接摄像头
服务器(C): 编译虹软 SDK 例程
- error: ‘nullptr’ was not declared in this scope
- cannot open shared object file: No such file or directory
没错, 玩 C++ 最难的, 就是编译… 2333
服务器(C): 封装并编译动态链接库
服务器(Node): 调用动态链接库
服务器(Bash): 图片转 YUV 通道原始数据
服务器(Node): 实现人脸 HTTP API
树莓派: 调用人脸 API
其它
- OpenCV and Pi Camera Board
- 树莓派人脸识别门禁系统代码以及代码分析——opencv 拍照调用 FACE++处理
- 【Raspberry Pi 3 试用体验】+Opencv+python 的人脸识别
- 使用树莓派进行简易人脸识别
- 树莓派一键部署系列之二:openface 人脸识别程序
0x03 成果
实时刷新:
单线程基本上每秒 2-3 帧, 因为识别在服务器, 所以几乎不存在性能问题, 只要带宽够, 有多少 frames 就能识别多少.
全家福:
原谅我不是个专业硬件工程师, 只会简洁的连线风格, lol.
0x04 后记
没有后记, 祝自己生日快乐的同时, 也希望 2018 大吉大利, 妹子到手 (正经脸).