2012-04-22 94 views
28

如何在iPhone上進行臉部識別?有人可以向我提供參考資料/文章,以便我指出正確的方向嗎?我已經完成了研究並意識到我需要首先進行人臉檢測以提取圖像,然後通過將其與數據庫中的其他圖像進行比較來進行面部識別。iPhone上的臉部識別

我已經意識到我已經通過使用OpenCV或使用iOS 5.0及更高版本來檢測人臉進行人臉檢測。我不確定面部識別(我計劃將圖像存儲在遠程數據庫上,然後與遠程數據庫進行比較)。

+1

[OpenCV中的人臉識別](http://stackoverflow.com/questions/4856929/face-recognition-in-opencv) – karlphillip 2012-04-22 22:09:41

+1

也可能出現[如何使用OpenCV進行人臉識別?](http ://stackoverflow.com/questions/7949​​494/how-to-do-face-recognition-using-opencv)等等。 – karlphillip 2012-04-22 22:10:49

+1

可能的重複[如何在iOS上執行面部識別?](http://stackoverflow.com/questions/8020842/how-can-i-perform-facial-recogntion-on-ios) – Monolo 2012-07-17 05:34:41

回答

14

人臉檢測

我會用開放的簡歷提供的Haarcascades進行快速,準確的人臉檢測。

http://opencv.willowgarage.com/wiki/FaceDetection

人臉識別

我會使用的方法,如主成分分析(PCA)a.k.a特徵臉。

http://www.cognotics.com/opencv/servo_2007_series/part_5/index.html

該鏈接顯示瞭如何獲得與OpenCV的工作教程 - 我認爲這是C寫的,但我敢肯定,你可以得到它的基本JIST。

你也可以看看自己實現它,如果你覺得勇敢(這是不是太糟糕了)...

http://www.face-rec.org/algorithms/PCA/jcn.pdf

http://blog.zabarauskas.com/eigenfaces-tutorial/

數據庫

我真的做到了與你類似,儘管在PC上不是iPhone,但它仍然是一個概念。我將所有圖像作爲Blob數據類型存儲在數據庫中,然後在必要時將它們加載到我的程序中。

編輯

數據庫是系統的一個特別棘手的部分,因爲這是其中最大的瓶頸是。在我的應用程序,我會去通過以下步驟...

  1. 開放的應用和搶訓練從數據庫圖像
  2. 基於這些圖像訓練集
  3. 一旦1和2已完成系統非常快,因爲它只是對訓練集進行識別。

幸運的是,我的數據庫服務器位於局域網中,因此速度不是問題,但是我可以看到爲什麼有一個問題,因爲在移動設備上您的數據連接有限(速度/帶寬)。您可以壓縮圖像,但這可能會導致較差的識別率,這是由於圖像質量下降,您還必須在設備上進行解碼。還有如何將遠程數據庫公開給應用程序的問題,但我相信這可以使用PHP和JSON(以及其他技術,見下文)。

Retrieving data from a remote database

也許從而使圖像在手機上緩存,你可以做與數據庫的初始同步?無論如何,我認爲你可能不得不在手機上放置圖像。

找出在數據庫中存儲識別數據/圖像的最佳方式是我面臨的最大挑戰之一,所以如果您找到一個好的方法,我會很感興趣。

+0

非常感謝您的答覆。關於數據庫,程序是否連接到數據庫,然後下載所有的圖像,然後對每個圖像執行識別?這對我來說很有用,因爲它將是一個功能有限的移動設備。 (即時通訊可能是錯誤的,所以請糾正我,我正處於即將試圖找出算法/ psudo代碼如何處理事情的階段)。 – 2012-04-25 15:53:57

+0

@RoryLester嗨,我已經更新了答案,希望能夠回答你的一些問題。祝你好運! – TomP89 2012-04-26 20:49:35

+0

@ TomP89人臉識別鏈接不再工作了......如果您知道一些用於人臉識別的新鏈接,那麼更新答案將會很棒。 – Dave 2015-06-25 12:14:31

2

人臉識別可以實現爲機器學習算法。 This book有一章描述了這個任務以及如何實現它。值得閱讀!

它使用單值分解(SVD),更具體地Tensor SVD method

12

正如您所指出的,iOS 5和CoreImage.framework的第一步(檢測臉部)很容易。簡單的例子:

CIImage *image = [CIImage imageWithCGImage:image_ref]; 
NSDictionary *options = [NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh forKey:CIDetectorAccuracy]; 
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace context:nil options:options]; 
NSArray *features = [detector featuresInImage:image]; 

for (CIFaceFeature *feature in features) 
{ 
    CGRect face_bounds = [feature bounds]; 
    CGPoint mouth_position = [feature mouthPosition]; 
    // do something with these values 
} 

至於你的問題(即面部識別)的第二部分,我將留給別人更有資格比我自己來回答。 :)

+10

這是臉**檢測**,不**識別**。 – UIAdam 2012-04-23 01:27:11

+1

@UIAdam:很好的一點,我已經編輯,在我的答案中澄清。這個問題表明,選舉委員會了解這兩項任務,並相應修改了答案。 – 2012-04-23 02:41:53

9

您可能想看看Pedro Centieiro的midian項目,該項目使用OpenCV在iOS 5上執行人臉識別。這是在GitHub上的:

它使用的我libfacerec部分,所以它支持特徵臉,費舍爾和局部二值模式的直方圖進行人臉識別。

1

我們有以下的面部識別API: -

1. OpenCV 

2. Kairos 

3. CraftarAR 

4. AAFaceDetection 

5. MoodMe 

,在我看來,如果你想在離線應用程序中使用CraftAR是好的,如果你想在網上使用再Kairos是最好的。而OpenCV也是一個着名和可靠的選項。

OPENCV的最大優點是它是開源的。

請在google上搜索以獲取更多詳細信息,並查看github示例,瞭解這些API如何工作。