基于免费人脸识别的闸机开发及源码分享
最近公司要開發一款人臉識別的閘機,就是在現有閘機上將一個小屏的識別裝置,人臉識別成功后將閘機打開。
項目源碼在 : 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/Zzz-/p/10454875.html
總結
以上是生活随笔為你收集整理的基于免费人脸识别的闸机开发及源码分享的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bat、sh等批处理文件(脚本文件)
- 下一篇: 使用 VirtualBox + Vagr