前言
在去年十月的時候參加了一個小比賽,做了一個人臉識別程序並很意外地獲得省里面的一等獎,視頻演示鏈接在這里,有同學想要做這方面的畢業設計or課程設計,發一篇博客來分享一下當時的開發過程。
項目簡介
可以看一下我的這個博客
開發流程
一:安裝Dlib的環境
這部分有點麻煩,不論是Windows還是linux,我都花了一段時間去配置,部分python依賴包需要連接外網才能順利下載下來,這部分就靠自己摸索吧,多試試就可以成功了!
Linux的我找不到當時配置時參考的博客了
二:閱讀Dlib庫的接口、使用方法
這里我沒有閱讀Dlib的官方文檔,我直接閱讀了ageitgey的Github的源碼部分、以及他的文檔,參考他的源碼去調用Dlib的人臉識別接口的,最終包裝成自己的庫。
自己封裝的庫文件地址,可以參考一下,里面有詳盡的注釋(寫的不好,輕噴)
三:開發
這部分就看自己的需求啦
這里可以提一點小見解:
- 做簡單一點的人臉識別,直接用人臉檢測算子+人臉編碼然后對比人像編碼的距離就可以了。
- 我開發的時候是為了盡量避免角度對人臉造成的影響,就在Dlib官方的基礎上加入了人臉矯正功能
- 我做的是一個比較low、但確實有用的人臉矯正算法
- 就是基於眼睛、鼻子上檢測到的關鍵點,對圖像進行簡單的水平旋轉
- 矯正后理論上可以提升編碼的穩定性(因為盡可能排除角度因素了)
- 這部分的代碼在
Faces.py
的330行左右
- 對於一些人頭偏移角度過大可能造成人臉檢測算子檢測不到的問題,因為我的使用場景特殊,是100%有人臉,所以我會在檢測不到人像的時候對圖像旋轉幾個角度再檢測,我管它叫旋轉魯棒性(其實是當時看到一篇論文的題目有這個字眼,自己就搬過來用了)。至於是否采用這樣的操作,可以結合自己的使用場景來決定。