树莓派4B之零基础实战人脸考勤系统(保姆级全流程)

📅 发布时间:2026/7/3 6:40:25 👁️ 浏览次数:
树莓派4B之零基础实战人脸考勤系统(保姆级全流程)
1. 为什么选择树莓派4B做人脸考勤系统树莓派4B作为一款信用卡大小的微型电脑性能却不容小觑。我实测下来它的四核Cortex-A72处理器搭配4GB内存完全能流畅运行OpenCV的人脸识别算法。相比动辄上万元的商业考勤机这套方案成本不到500元特别适合学校实验室、小型办公室或者创客爱好者。去年我给朋友的公司部署过这个系统最让我惊喜的是它的稳定性——连续运行3个月没重启过。关键硬件就三样树莓派主板、官方摄像头模块和5V3A电源。摄像头建议用树莓派原装的虽然贵点约150元但成像质量确实比30块的杂牌好很多在光线不足的走廊也能准确识别人脸。2. 十分钟完成基础环境搭建2.1 系统烧录避坑指南新手最容易栽在系统镜像上。推荐直接用Raspberry Pi Imager工具官网免费下载烧录64位Bullseye系统。我对比过多个版本这个系统对OpenCV4.5的支持最稳定。具体步骤插入至少16GB的TF卡实测32GB更稳妥选择Raspberry Pi OS (64-bit)镜像点击烧录按钮等待完成有个细节要注意烧录完成后别急着拔卡用读卡器打开boot分区新建一个名为ssh的空文件这样才能远程连接。第一次开机记得接网线WiFi配置稍后再说。2.2 OpenCV极简安装法网上很多教程让你编译OpenCV动辄三四个小时。其实用pip就能一键安装sudo apt update sudo apt install python3-opencv测试是否安装成功import cv2 print(cv2.__version__) # 应该显示4.5.x如果要用到更高级的dnn模块建议用这个命令安装完整版pip install opencv-contrib-python4.5.5.643. 考勤系统核心代码解析3.1 人脸检测的两种实现方式Haar级联虽然简单但已经过时我推荐用Dlib的HOG特征检测准确率更高。下面是改进后的代码片段import dlib detector dlib.get_frontal_face_detector() faces detector(gray_image, 1) # 第二个参数表示放大倍数如果要处理多人同时打卡的情况需要增加帧率检测逻辑。我在项目里是这样实现的from collections import deque face_queue deque(maxlen10) # 保存最近10帧的检测结果 while True: ret, frame cap.read() faces detector(frame) face_queue.append(len(faces)) # 当连续5帧都检测到1个人脸时才确认 if list(face_queue).count(1) 5: record_attendance()3.2 考勤记录存储方案千万别用txt文件存记录SQLite才是王道。这是我设计的数据库表结构import sqlite3 conn sqlite3.connect(attendance.db) c conn.cursor() c.execute(CREATE TABLE IF NOT EXISTS records (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, image_path TEXT))保存人脸图片时有个技巧用时间戳员工ID命名避免重复from datetime import datetime filename f{emp_id}_{datetime.now().strftime(%Y%m%d_%H%M%S)}.jpg cv2.imwrite(filename, face_roi)4. 提升识别率的实战技巧4.1 光线补偿方案在楼道这种光线不稳定的环境可以这样自动调整亮度def auto_brightness(img): lab cv2.cvtColor(img, cv2.COLOR_BGR2LAB) l, a, b cv2.split(lab) clahe cv2.createCLAHE(clipLimit3.0, tileGridSize(8,8)) limg cv2.merge([clahe.apply(l),a,b]) return cv2.cvtColor(limg, cv2.COLOR_LAB2BGR)4.2 最佳安装位置实测经过多个场景测试摄像头安装高度在1.5米左右效果最好与人脸呈15度俯角。如果是玻璃门场景记得加装偏振镜消除反光。我在某公司前台部署时发现早上逆光会导致识别失败后来加了块遮光板就解决了。5. 系统优化与功能扩展5.1 开机自启动配置编辑rc.local文件实现插电即用sudo nano /etc/rc.local在exit 0之前添加su pi -c python3 /home/pi/attendance/main.py 5.2 微信消息通知用Server酱实现识别提醒需注册免费APIimport requests def send_wechat(msg): url fhttps://sc.ftqq.com/YOUR_KEY.send?text{msg} requests.get(url)6. 常见问题解决方案摄像头报错VIDEOIO ERROR多半是权限问题用这个命令解决sudo usermod -a -G video pi内存不足时可以启用zram交换分区sudo apt install zram-tools echo ALGOzstd | sudo tee /etc/default/zramswap sudo systemctl restart zramswap树莓派死机问题我遇到过几次后来发现是电源质量导致的。建议用官方电源或者小米45W充电头杂牌电源容易导致主板重启。还有个隐藏技巧在/etc/rc.local里添加echo 1 /proc/sys/vm/drop_caches可以定期清理缓存。