最近公司要開發一款人臉識別的閘機,就是在現有閘機上將一個小屏的識別裝置,人臉識別成功後將閘機打開。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