基于免费人脸识别的闸机开发及源码分享
最近公司要開發(fā)一款人臉識(shí)別的閘機(jī),就是在現(xiàn)有閘機(jī)上將一個(gè)小屏的識(shí)別裝置,人臉識(shí)別成功后將閘機(jī)打開。
項(xiàng)目源碼在 : https://gitee.com/panmingzhi/ArcSoftFace.git
使用了虹軟的最新人臉識(shí)別技術(shù)完成開發(fā)
1、首先我們選擇的是windows 64位的動(dòng)態(tài)庫,因?yàn)檫@個(gè)我熟悉,上手快。使用的是官方的開發(fā)庫,這里的是官方在github的url : https://github.com/steponteam/FaceRecognization 官方有簡(jiǎn)單的例子,是最快上手的。但僅僅只是例子,現(xiàn)實(shí)使用還有很多坎。
2、取攝像頭視頻可以用opencv或者afroge,我使用的是afroge,因?yàn)檫@個(gè)庫很小,僅僅只有幾mb。使用afroge插入視頻也有兩種處理方式:1 使用videoSourcePlayer控件,重寫他的paint事件,在paint事件中調(diào)用人臉追蹤庫,并畫出方框。另外,軟件啟動(dòng)時(shí),再開一個(gè)Task,每間隔200ms取當(dāng)前幀videoSourcePlayer.getCurrentFrame(),對(duì)當(dāng)前這一幀進(jìn)行人臉識(shí)別,如果識(shí)別在成功,就可以開閘了。
3、在每200ms間隔識(shí)別時(shí),先判斷一下當(dāng)前的paint 人臉追蹤有沒有追蹤到人臉,如果當(dāng)前沒有追蹤到人臉,就可以略過當(dāng)前這些的人臉識(shí)別了。
4、在識(shí)別到人臉后,不要立馬開閘,要做一下限制,同一個(gè)人在不停的驗(yàn)證人臉時(shí),2秒內(nèi)可以不用處理。不然連續(xù)識(shí)別成功會(huì)導(dǎo)致語音報(bào)沒完又接著重新放了一遍語音。
5、上述是最初一版的開發(fā)過程,在開發(fā)電腦上運(yùn)行很流暢,也沒有內(nèi)存問題。而且模擬放了一個(gè)小品做測(cè)試,放了一個(gè)星期,內(nèi)存始終保存在100-300左右,累計(jì)識(shí)別了25w次,這個(gè)量基本到項(xiàng)目上可以用一個(gè)月了。
6、悲劇總會(huì)來,開發(fā)電腦性能很強(qiáng)勁,視頻很流暢,一點(diǎn)也沒有卡的意思,但放在閘機(jī)上時(shí),問題就后接踵而來了。
首先,閘機(jī)上的工供機(jī)是win7,要先安裝.net 4.5.2,其次軟件會(huì)加載不到libs下的dll,要安裝 vcredist_x64.exe ,其次,請(qǐng)不要用ghost ,請(qǐng)不要用ghost,請(qǐng)不要用ghost,重要的事情3遍。否則會(huì)在系統(tǒng)事件中提示缺失dll,這個(gè)很抓狂,system32下己存在,但就是不斷的提示缺失dll。
其次,工供機(jī)性能底,使用videoSourcePlayer不能控制FPS,導(dǎo)致畫面有延時(shí),大概有2秒,很可怕,查很多資料也都沒用。后來就不使用videoSourcePlayer控件,直接使用NewFrame事件,然后繪制到picturebox。接收NewFrame傳來的圖片時(shí),可以適當(dāng)?shù)姆艞壱徊繋瑏硖岣吡鲿扯?#xff0c;用Stopwatch來控制FPS始終保持在20幀左右。
7、在NewFrame事件中取當(dāng)前幀來做人臉識(shí)別,經(jīng)常會(huì)出現(xiàn)bitmap內(nèi)存被損壞。這個(gè)問題最難搞的,甚至一度讓我重新選擇emgucv來實(shí)現(xiàn)USB相機(jī)采集,但問題還是依舊的。后來我反思了一下,使用 videoSourcePlayer 控件時(shí)沒有這個(gè)問題,為什么使用pictureBox會(huì)發(fā)生,所以又回過頭重新看一下videoSourcePlayer這個(gè)控件的實(shí)現(xiàn)。后來發(fā)現(xiàn)在取當(dāng)前幀做人臉認(rèn)別時(shí),當(dāng)前幀的圖片有可能正在被繪制到pictureBox,而pictureBox.image=xxx這個(gè)方法不是立即繪制,是異步的,這就導(dǎo)致bitmap被同時(shí)在使用,找到問題后,加了一個(gè)lock鎖就搞定了,又測(cè)試跑了一個(gè)星期,杠杠的。
8、window電腦會(huì)有一個(gè)屏幕休眠,當(dāng)有人臉追蹤到時(shí),要調(diào)用windows自身的api來點(diǎn)亮屏幕。這個(gè)休眠是人為設(shè)定的,因?yàn)槠聊焕狭林?#xff0c;給人感覺就是浪費(fèi)電,一般設(shè)置30分鐘自動(dòng)屏幕關(guān)閉,軟件追蹤到人后,調(diào)用windows的鼠標(biāo)滾珠事件來模擬有鼠標(biāo)移動(dòng),達(dá)到點(diǎn)亮屏幕的目的。
更多內(nèi)容歡迎來這里看
人臉識(shí)別的閘機(jī)開發(fā)經(jīng)驗(yàn)及源碼分享
是我這兩周的折騰了,語言組織不好,但愿能給正在使用window做人臉識(shí)別一點(diǎn)幫助。
這是軟件的截圖,
?
轉(zhuǎn)載于:https://www.cnblogs.com/Zzz-/p/10454875.html
總結(jié)
以上是生活随笔為你收集整理的基于免费人脸识别的闸机开发及源码分享的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bat、sh等批处理文件(脚本文件)
- 下一篇: 使用 VirtualBox + Vagr