2010-11-13 26 views
3

我想在Python中編碼面部識別程序(我將應用k-nn算法分類)。從Python的圖像創建一個數據集用於臉部識別

首先,我轉換圖像轉換成灰度,然後我創建了一個長列向量(通過使用opencv的圖象 - 數據功能)與圖像的像素(128×128 = 16384特徵總數)

所以我有一個像數據集以下(最後一列是類標籤,我只顯示了數據集的前7個特徵而不是16384)。

176, 176, 175, 175, 177, 173, 178, 1 
162, 161, 167, 162, 167, 166, 166, 2 

但是,當我將k-nn應用到這個數據集時,我得到了一些尷尬的結果。我是否需要將其他進程應用於此數據集,而不是將圖像轉換爲像素表示形式?

謝謝。

+1

你能描述*尷尬的結果*更詳細一點嗎?另外,你有多少圖片? – 2010-11-13 10:26:34

回答

0

這條消息怎麼打印?你嘗試使用重塑功能嗎?它將2D圖像轉換爲帶有/不帶多個通道的1D圖像。

此外,圖像的像素不是features。臉部後面可以有許多不同的物體 - 窗簾,書本和其他臉部等等。臉部的邊界,眼睛之間的距離等等對於這種事情更加不變。

+0

爲什麼選擇負面投票? – 2010-11-17 04:31:07

1

如果你希望它運行良好,是的,你需要做一個功能轉換。

PCA或LDA工作良好。 PCA將採集一組輸入矢量(在這種情況下爲您的矢量化圖像)並找到跨越輸入集的特徵臉。然後,在測試過程中,將輸入向量(即圖像)投影到這組特徵臉上,並將結果座標向量用作特徵向量。有關更多信息,請參閱[Turk and Pentland, 1991]。

我在PIE database上使用這種基本的PCA方法的個人實驗是成功的。

1

您可能需要對準眼睛,鼻尖和嘴巴。

您可能還需要更復雜的圖像表示方法。例如,梯度和自商圖像的方向將是很好的起點。

1

通常,人臉識別流水線需要幾個階段才能生效。某種程度的幾何歸一化對精度至關重要。您可能需要手動標記基準點並獲取每個圖像的變換,或者自動檢測基準點,其中有開源基準點檢測器。嘗試opencv的getAffineTransform函數。此外,照明差異會導致嚴重問題。您可以嘗試照明標準化技術(例如,自商標圖像),因爲它們對於漫反射和陰影(沒有太多鏡面反射)非常適用。對於降維,主成分分析(PCA)或線性判別分析(LDA)是很好的起點。不過,您可能會考慮更有意義的功能,如LBP,HOG或SIFT。而且,使用更復雜(更復雜)的分類器(如SVM),您將能夠獲得比KNN更高的準確性。