天天看點

人臉識别系統原理

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/zergskj/article/details/43374003

寫這篇文章,并不是要挑戰學術泰鬥,更不是要在這裡炫耀和說教知識。隻是前不久有個朋友問我能不能搞人臉識别,我說回來試試。想不到這裡頭的東西還挺多,不是三兩天就能做完的。就在這裡把我的實作思路寫出來,以表心迹。

圖像識别,一直是計算機領域研究的熱門,随着大資料的興起,更是讓圖像識别中的特殊分支人臉識别如魚得水,使得運算和樣本資料不再成為系統的掣肘。那麼具體來說,一個現代人臉識别系統(例如face++)是如何實作的呢?

這裡我不敢妄自猜測,我僅提供我自己的實作方法,拿出來與大家一起學習和探讨:

1.首先建立目标模型,分析出目标模型的特征值,也就是在檢索中所需要的KPI,我這裡隻是簡單的列了一下,結果發現太多了,而我又太懶,寫了一半沒動力寫下去了,人臉特征清單:

特征 KPI名額 特征描述 能否提取 特征值
整體 頭發密度 濃密、稀疏 0-100
頭發粗糙度 順滑、卷毛、散亂
頭發顔色 黑色、白色、棕色 0-255
皮膚材質 粗糙、細膩
皮膚顔色 棕褐色、嫩白色
人臉輪廓 圓臉、瓜子臉 0-10
額頭 額頭形狀 扁平、秃頭
額頭大小 寬闊、窄小
額頭材質 同整體
額頭顔色
眼睛 眉毛形狀 彎眉、劍眉、畫眉
眉毛顔色 黑、褐
眼睛大小
眼睛形狀
眼睛顔色
瞳孔大小
瞳孔顔色
眼袋大小
眼袋形狀
耳朵 耳朵形狀
耳朵大小
耳廓比例
耳垂比例
耳朵顔色
鼻子 鼻梁長度
鼻翼寬度
鼻子高度
鼻子紋理
鼻孔大小
鼻孔角度
鼻毛長度
嘴巴 嘴巴大小
嘴巴形狀
嘴巴顔色
上下嘴唇比例
嘴唇紋理
嘴唇高度
臉頰 臉頰大小
臉頰形狀
臉頰材質
臉頰顔色
下巴 下巴大小
下巴形狀
下巴材質
下巴顔色

 呵呵,确實不少,光整理KPI名額就得花1-2天吧,如果KPI列的越細,通過KPI值比對到的人臉自然越精确。

看到這裡,大家是不是已經隐約感到,人臉識别其實也不難了吧?

人臉識别系統原理

 ,錯了,道理其實不難,難的就在後繼的實作上。

2.提取圖像的KPI名額:

 提取圖像中的特征區域,關鍵在于計算出準确的Harris角點,多年以來,不少科學家和技術人員為了使得提取更精确,提出了很多計算角點的算法,而我們不得不對這些先驅心存感激之情,正是他們的不懈努力,才使得我們今天的工作變得輕而易舉。這裡就可以直接使用JavaCV裡提供的角點提取API,通過FaceExactor抽取類庫,很友善的找到圖像中的人臉。

不會這麼簡單吧?

人臉識别系統原理

 3.提取人臉中的特征區域:

 的确沒這麼簡單,真正困難的地方才剛剛開始,如果要找到人臉區域内的上述KPI,又該采用什麼政策呢?在這裡據我所知,業内是沒有很好的解決方案的,通常他們都是使用算法自動分類的手段。

什麼意思呢?也就是将圖像矩陣的二維資料,通過機器學習,從海量的樣本資料中找到規律,并自動将資料包分類。

這裡就有必要提一下時下比較流行的“支援向量機模型”,“支援向量機”就是将低維資料轉換為高維資料,發現資料的規律,并分類。

請注意:以上的這種手段是從純數學的角度找到的解決方案,并不符合人類識别物體的思維習慣,也就是說程式自動劃分的圖像的特征資料包,對人類來說,是沒有任何意義的!

好了,問題來了:

怎樣讓取得的圖像碎片資料包既能準确表述圖像的特征規律,又有文法上的意義?

這裡,我的解決方案就是人工幹預:将圖像碎片資料包以清單的形式在背景呈現出來,在Lucene的檢索字段中預先建立好了可以容納KPI的字段,比如:眼睛大小、鼻梁長度等。

每次樣本資料被“支援向量機”分類後,便讓管理者手工在背景進行标注,也就是給資料包打标簽

那麼,緊接着,大家會問:

這樣現實嗎?這麼海量的資料,人工操作到什麼時候?

幸運的是,我們并不需要重複标注,對于有意義的圖像碎片包,我們僅僅隻需标注一次即可,下次相似的圖像碎片就會自動配置設定到此标簽下,而管理者僅需剔除完全錯誤的碎片包即可,也就是說,系統運作後期,管理者隻是在做“内容檢查”

4.建立人臉識别的金字塔模型

好了,一切看似ok了,為什麼還要做第四步,這不是有點多餘嗎?

人臉識别系統原理

呵呵,還是那句話,沒這麼簡單。人臉識别系統最重要的也是系統運作的速度,通常資料都是TB為機關的,再通過CBIR将圖像分解為特征詞包, 那資料量會成倍增長,如果沒有科學的架構,再好的算法也是望洋興歎!

我們這裡先暫時設定金字塔的層次為3層,第一層隻有三個特征值,第二層有6特征值,第三層包含了所有特征值

如下表所示:

頭發材質

頭發

密度

粗糙

... 大小 形狀

選擇KPI名額時需要比較小心,上一層的KPI必須能涵蓋下一層的KPI,否則查找特征就容易丢失。

每次系統發起查找,實際隻用第一層的KPI進行比對,再從比對的結果集裡用第二層KPI進行比對,依次類推,直到找到最比對的結果。

5.性能及結果準确度測試

這裡的性能結果和準确度,隻能在系統真正實作了以後提供給大家了,在這裡就不寫了。

但是有一點是可以肯定的:系統的KPI設定的越合理,則系統查詢越快速越準确!

在這樣的體系結構下,打造一個可靠的人臉識别系統是完全有可能的! 

人臉識别系統原理
人臉識别系統原理

繼續閱讀