人脸识别 闸机开发分享

最近公司要开发一款人脸识别的闸机,就是在现有闸机上将一个小屏的识别装置,人脸识别成功后将闸机打开。git

项目源码在 : https://gitee.com/panmingzhi/ArcSoftFace.gitgithub

使用了虹软的最新人脸识别技术完成开发
一、首先咱们选择的是windows 64位的动态库,由于这个我熟悉,上手快。使用的是官方的开发库,这里的是官方在github的url : https://github.com/steponteam/FaceRecognization 官方有简单的例子,是最快上手的。但仅仅只是例子,现实使用还有不少坎。redis

二、取摄像头视频能够用opencv或者afroge,我使用的是afroge,由于这个库很小,仅仅只有几mb。使用afroge插入视频也有两种处理方式:1 使用videoSourcePlayer控件,重写他的paint事件,在paint事件中调用人脸追踪库,并画出方框。另外,软件启动时,再开一个Task,每间隔200ms取当前帧videoSourcePlayer.getCurrentFrame(),对当前这一帧进行人脸识别,若是识别在成功,就能够开闸了。windows

三、在每200ms间隔识别时,先判断一下当前的paint 人脸追踪有没有追踪到人脸,若是当前没有追踪到人脸,就能够略过当前这些的人脸识别了。api

四、在识别到人脸后,不要立马开闸,要作一下限制,同一我的在不停的验证人脸时,2秒内能够不用处理。否则连续识别成功会致使语音报没完又接着从新放了一遍语音。异步

五、上述是最初一版的开发过程,在开发电脑上运行很流畅,也没有内存问题。并且模拟放了一个小品作测试,放了一个星期,内存始终保存在100-300左右,累计识别了25w次,这个量基本到项目上能够用一个月了。ide

六、悲剧总会来,开发电脑性能很强劲,视频很流畅,一点也没有卡的意思,但放在闸机上时,问题就后接踵而来了。
首先,闸机上的工供机是win7,要先安装.net 4.5.2,其次软件会加载不到libs下的dll,要安装 vcredist_x64.exe ,其次,请不要用ghost ,请不要用ghost,请不要用ghost,重要的事情3遍。不然会在系统事件中提示缺失dll,这个很抓狂,system32下己存在,但就是不断的提示缺失dll。
其次,工供机性能底,使用videoSourcePlayer不能控制FPS,致使画面有延时,大概有2秒,很可怕,查不少资料也都没用。后来就不使用videoSourcePlayer控件,直接使用NewFrame事件,而后绘制到picturebox。接收NewFrame传来的图片时,能够适当的放弃一部帧来提升流畅度,用Stopwatch来控制FPS始终保持在20帧左右。性能

七、在NewFrame事件中取当前帧来作人脸识别,常常会出现bitmap内存被损坏。这个问题最难搞的,甚至一度让我从新选择emgucv来实现USB相机采集,但问题仍是依旧的。后来我反思了一下,使用 videoSourcePlayer 控件时没有这个问题,为何使用pictureBox会发生,因此又回过头从新看一下videoSourcePlayer这个控件的实现。后来发如今取当前帧作人脸认别时,当前帧的图片有可能正在被绘制到pictureBox,而pictureBox.image=xxx这个方法不是当即绘制,是异步的,这就致使bitmap被同时在使用,找到问题后,加了一个lock锁就搞定了,又测试跑了一个星期,杠杠的。
八、window电脑会有一个屏幕休眠,当有人脸追踪到时,要调用windows自身的api来点亮屏幕。这个休眠是人为设定的,由于屏幕老亮着,给人感受就是浪费电,通常设置30分钟自动屏幕关闭,软件追踪到人后,调用windows的鼠标滚珠事件来模拟有鼠标移动,达到点亮屏幕的目的。测试

更多内容欢迎来这里看
人脸识别的闸机开发经验及源码分享
是我这两周的折腾了,语言组织很差,希望能给正在使用window作人脸识别一点帮助。
这是软件的截图,
url

 


 

相关文章
相关标签/搜索