虹软人脸识别的闸机开发经验及源码分享[通俗易懂]

虹软人脸识别的闸机开发经验及源码分享[通俗易懂]虹软人脸识别的闸机开发经验及源码分享

大家好,又见面了,我是你们的朋友全栈君。

最近公司要开发一款人脸识别的闸机,就是在现有闸机上将一个小屏的识别装置,人脸识别成功后将闸机打开。
项目源码在 : https://gitee.com/panmingzhi/ArcSoftFace.git

使用了虹软的最新人脸识别技术完成开发

1、首先我们选择的是windows 64位的动态库,因为这个我熟悉,上手快。使用的是官方的开发库,这里的是官方在github的url : https://github.com/steponteam/FaceRecognization 官方有简单的例子,是最快上手的。但仅仅只是例子,现实使用还有很多坎。

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

3、在每200ms间隔识别时,先判断一下当前的paint 人脸追踪有没有追踪到人脸,如果当前没有追踪到人脸,就可以略过当前这些的人脸识别了。

4、在识别到人脸后,不要立马开闸,要做一下限制,同一个人在不停的验证人脸时,2秒内可以不用处理。不然连续识别成功会导致语音报没完又接着重新放了一遍语音。

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

6、悲剧总会来,开发电脑性能很强劲,视频很流畅,一点也没有卡的意思,但放在闸机上时,问题就后接踵而来了。

首先,闸机上的工供机是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帧左右。

7、在NewFrame事件中取当前帧来做人脸识别,经常会出现bitmap内存被损坏。这个问题最难搞的,甚至一度让我重新选择emgucv来实现USB相机采集,但问题还是依旧的。后来我反思了一下,使用 videoSourcePlayer 控件时没有这个问题,为什么使用pictureBox会发生,所以又回过头重新看一下videoSourcePlayer这个控件的实现。后来发现在取当前帧做人脸认别时,当前帧的图片有可能正在被绘制到pictureBox,而pictureBox.image=xxx这个方法不是立即绘制,是异步的,这就导致bitmap被同时在使用,找到问题后,加了一个lock锁就搞定了,又测试跑了一个星期,杠杠的。

8、window电脑会有一个屏幕休眠,当有人脸追踪到时,要调用windows自身的api来点亮屏幕。这个休眠是人为设定的,因为屏幕老亮着,给人感觉就是浪费电,一般设置30分钟自动屏幕关闭,软件追踪到人后,调用windows的鼠标滚珠事件来模拟有鼠标移动,达到点亮屏幕的目的。
更多内容欢迎来这里看

人脸识别的闸机开发经验及源码分享
是我这两周的折腾了,语言组织不好,但愿能给正在使用window做人脸识别一点帮助。

转载于:https://www.cnblogs.com/KEAIILINN/p/10614465.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106906.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月21日 下午9:40
下一篇 2022年4月21日 下午10:00


相关推荐

  • 计算机中的逻辑运算(与、或、非、异或、同或、与非、或非)

    计算机中的逻辑运算(与、或、非、异或、同或、与非、或非)计算机中的逻辑运算又被称作为 布尔运算 分别为 逻辑与运算 逻辑或运算 逻辑非运算 逻辑异或运算 此外在门电路中还有 同或运算 与非运算 或非运算 共七种

    2026年3月19日
    2
  • 数据库系统的特点_关系数据模型只能表示

    数据库系统的特点_关系数据模型只能表示数据结构化:数据库系统实现整体数据的结构化,是数据库的主要特征之一,也是数据库系统与文件系统的本质区别。“整体”结构化是指在数据库中的数据不再仅仅针对某一应用,而是面向全组织,不仅数据内部结构化,

    2022年8月2日
    9
  • php fastcgi,配置apache以fastcgi运行php[通俗易懂]

    php fastcgi,配置apache以fastcgi运行php[通俗易懂]apache默认是用自带的mod_php模块运行php,现在我们介绍使用fastcgi来执行php脚本。先说下fastcgi的优点:Fastcgi的优点:从稳定性上看,fastcgi是以独立的进程池运行来cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑.·从安全性上看,Fastcgi支持分布式运算.fastcgi和宿主的server完全独立,fastc…

    2022年7月11日
    28
  • Informatica ETL开发入门实例

    Informatica ETL开发入门实例Informatica客户端工具:5个Designer——定义源及目标结构设计转换规则,生成ETL映射RepositoryManager——元数据资料库,依赖性分析,安全性管理等RepositoryServerAdministratorConsole——Repository的建立与维护WorkflowManager——合理的实现复杂的ETL工作流基于时间或事件的作业高度WorkflowMonitor——监控workflow和session,生成工作日志及报告…

    2022年6月11日
    38
  • java是面向对象还是面向过程_面向对象和面向过程最本质的区别是什么?

    java是面向对象还是面向过程_面向对象和面向过程最本质的区别是什么?面向对象和面向过程最本质的区别在于考虑问题的出发点不同,面向过程是以事件流程为考虑问题的出发点,而面向对象则是以参与事件的角色(对象)为考虑问题的出发点,所以面向对象在处理问题时更加灵活。目前,面向过程的语言更多被用于处理底层业务,而面向对象编程则更多用于实现一些业务逻辑复杂的大型系统。从结构上来说,面向过程的特点是模块化和流程化,而面向对象的特点是封装、继承和多态,这里面就有本质的区别了。面向过…

    2022年7月7日
    22
  • matlab如何导入txt数据画图形_matlab画复杂函数图像

    matlab如何导入txt数据画图形_matlab画复杂函数图像MATLAB读取txt文件数据绘制图像现有data.txt文件存储由数据采集卡读取到的6000000个数据。下面记录最基础的用MATLAB读取txt文件数据并绘制图像的代码。%关闭所有的Figure窗口closeall;%清除工作空间的所有变量,函数,和MEX文件clearall;%加载数据文件,并命名为AA=load(‘data.txt’);%矩阵A的规模,[行,列][m,n]=size(A);%绘制txt文件第一列的数据figure(1);plo

    2025年9月20日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号