转自 http://oszine.com/face-recognition-safe/
眨眨眼睛就能保住身家,好过记住密码或拿着钥匙,你的脸就是保险柜的钥匙!这个作品将展示给大家如何用树莓派和摄像头制作一个人脸识别的保险柜,当然,如果不慎毁容或整容,不好意思。。。直接拿锤子砸了吧
软件部分由开放源代码计算机视觉类库(OpenCV)提供的算法实现。用树莓派做这个作品再好不过,它能够运行OpenCV,体积小到能在任何地方安装。
零件/工具
- 树莓派B型
- 树莓派专用摄像头模组
- 玩具保险箱,我们选了一个钢制外壳,并有警报功能。尺寸为9x8x6英寸。
- 伺服电机
- 4节AAA电池盒
- 瞬时按钮开关
- 10千欧电阻,功率0.25瓦
- 接线盘
- 跳线,母座对母座接口
- 金属片,尺寸约为2×8英寸
- 机器螺丝,32英寸x0.75英寸,配有螺母
- 压铆螺母柱,1/8英寸x1/2英寸。从废旧圆珠笔上面能获得类似零件。(就是圆珠笔头)
-
束线扎带
-
电钻与钻头
- 电烙铁与焊锡
- 夹铁钳
- 台钳
- 锤子
- 凿子或电动高速打磨机
- 中心冲头
- 锉刀
- 螺丝刀
- 铆钉枪,配有铝制铆钉,1/8英寸x3/16英寸
第一步:安装树莓派
- 将树莓派放在保险柜门内,确定放在门锁结构外的最佳位置。
- 用一支深色记号笔标注两处固定树莓派的位置,然后小心钻出1/8英寸洞眼。
- 装上压铆螺母柱,用螺丝螺母将树莓派固定在上面。
第二步:折出个伺服电机支架
- 用记号笔在金属片中央画一个长方形。
- 钳住金属片,用凿子去掉标记好的区域,然后用锉子打磨平整。
- 再将另一边的金属片也如此弯曲,以贴合保险柜的锁头。它将用作伺服电机架,对应不同的保险柜有不同的尺寸。
- 用台钳钳住和支撑工件。如果金属片不易弯折,用锤子来帮忙。
第三步:安装保险柜门
- 在伺服电机架两端各钻一个1/8英寸洞眼。
- 将它放在门上,以记号笔标记门上相应的洞眼。
- 在记号上钻上1/8英寸洞眼。
第四步:安装舵机盘
- 选一个舵机盘,将它裁成图中所示。
- 拆开锁芯,使得当其中一个部件转动时,不会联动另一个。
- 在锁上滴一滴热熔胶,安上舵机盘。
第五步:安装伺服电机
- 在伺服电机架的长方形开口周边钻上四个1/8英寸洞眼,如图所示。
- 用束线扎带将伺服电机固定在架子上。
- 用铆钉枪将整个架子铆在保险柜门上。
第六步:安装摄象头
- 为摄像头钻一个1/4英寸洞眼。在开钻之前,确定摄像头电线能伸到洞的位置。
- 用个方形锉子将切割边缘磨平。
- 将摄像头电路板用双面胶固定,调整位置使摄像镜头能从门上的方形洞眼伸出来。
Step #7: Push button installation
安装按钮
用1/2英寸钻头为按钮钻个洞。这个按钮用于激活照相机,进行识别操作。
第八步:连接电子元件
- 将一个10千欧电阻和引脚头焊在接线板上,如图所示。
- 将伺服电机信号线连在树莓派的GPIO 18上面。伺服电机电源和地线皆在电池座的电源和接地端上。
- 将按钮其中一端接到树莓派GPIO 25,经过10千欧电阻连到3.3伏电源。
- 将按钮另一端和接到树莓派接地端上。
- 将电池和树莓派共地。
第九步:USB电源线
- 除了给伺服电机用的电源外,树莓派也需要一个独立电源。
- 在柜子侧面底部边角处做记号,钻洞,足够让USB电源线通过其大小。
- 注意:按钮的红线和黑线不连接,只用作拍摄用途。
第十步:配置安装软件
- 运行wget指令,从Github下载软件。指令如下:wget https://github.com/tdicola/pi-facerec-box/archive/master.zip
- 解压缩master.zip:unzip master.zip
- 切换到对应工作目录下:cd pi-facerec-box-master
- 运行安装指令,建立软件连接:sudo ./install_dependencies.sh
- 注意:这条指令能检查Raspbian系统是否需要升级到testing/”jessie”版本,在升级前会有确认信息。这一步大约需时一小时。
第十一步:安装树莓派摄像头模组
- 运行raspi-config,选择摄像头模组进行连线。sudo raspi-config
- 当设置好后,重启系统,摄像头就已连线了。只需做一次这样操作,系统就会配置好GPU。
第十二步:调试脸部识别
-
在树莓派终端部分,切换到软件目录下,运行以下指令开始输入识别信息:sudo python capture-positives.py
-
当调试代码正在运行时,你按一下在盒子外面的按钮,用树莓派摄像头照张相。程序代码会尝试在照片里识别出一张脸,将其储存在子目录./training/positive下。
-
这步骤需要约10分钟,以使图像筛选器能识别你的脸。每次照相时,信息都将写入capture.pgm中。你能用图像编辑器打开这个档案,查看树莓派摄像头抓取了什么图像,以帮助确定你的脸部信息。
-
用按钮大概抓取5次或以上的脸部正像调试图像。可以用不同角度和不同光线环境下获取图片。在图中可以看到我自己截取的正像调试图像。
-
注意:如果你有兴趣的话,可以在./training/negative文件夹内查看AT&T脸部识别数据库的调试数据,那里面有不允许开保险柜的人的脸部信息。(嗯,谁动过我的保险柜?)
-
最后当你弄好正像调试图像后,运行以下指令处理正像和反像调试图像,并调试脸部识别算法。这步骤需要约10分钟。指令为:python train.py
第十三步:配置伺服电机
- 找出驱动伺服电机上锁和开锁的脉宽值。运行以下指令:sudo python servo.py
- 遵照屏幕显示的指示,输入不同的脉宽值(从1000到2000),找出哪个值能使电机把门闩切换为上锁或开锁位置。
- 当你确定对应的值时,编辑config.py,将LOCK_SERVO_UNLOCKED和LOCK_SERVO_LOCKED这两个值对应于你在servo.py里找到的值。
第十四步:用吧!
- 现在所有配置已经完成,保险柜准备好运行。执行以下指令运行整个机构:sudo python box.py
- 柜子会自行反锁,直到按钮被按下,然后抓取摄影图片,和用户脸部信息进行比对,如果比对吻合则开锁。按钮能用于上锁,只要重复以上过程即可。
第十五步:故障调试
- 如果脸部识别不能很好工作,你需要为此照更多的正像图像进行识别调试,或者在config.py里面将POSITIVE_THRESHOLD值调高些,即调低它的灵敏度。
- 还是开不了锁的话,你只能暴力对待了。暴力开锁后,再次运行servo.py,输入解锁时电机脉宽电流值。(这下子该体会到有锁也会捉鸡的滋味了吧?)