當前位置:首頁 » 數據倉庫 » 人臉資料庫建立
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

人臉資料庫建立

發布時間: 2022-08-17 12:15:42

Ⅰ 怎樣建立人臉表情資料庫系統

介東西你要分人種、性別、年齡、臉型、表情、情緒等各種屬性

可以動態的生成各種表情的圖片

做起來應該是很好玩地說

Ⅱ 我國人臉識別技術發展現狀

人臉識別技術流程

人臉識別的技術原理主要包括三大步驟:首先是建立人臉圖像資料庫,其次是通過各種方式來獲得當前要進行識別的目標人臉圖像,最後是將目標人臉圖像與資料庫中既有的人臉圖像進行比對和篩選,其技術流程如下:



三維人臉識別技術是發展主流

從人臉識別技術發展過程來看,未來三維人臉識別是人臉識別主要技術手段,二維人臉識別只是人臉識別發展的過渡階段。實驗結果顯示,二維人臉識別系統在人臉左右偏轉達到40度識別率迅速下降到50%以下;而採用三維人臉識別後,識別率可以提高至少10-20個百分點。

——以上數據來源於前瞻產業研究院《中國人臉識別行業市場前瞻與投資戰略規劃分析報告》。

Ⅲ 如何建立人臉+虹膜資料庫

虹膜建庫是公安虹膜識別規模化應用的堅實基礎,目標是為各級公安機關提供虹膜身份核驗的統一出入口。只有先建立全國統一的虹膜原始圖像資料庫,依據圖像質量標准各地採集到圖像經檢查合格後入庫,隨後才能在重點場所建立試點,加快面向公共安全應用的產品定製和應用推廣,結合公關部門的應用需求,及時開展規模化應用。目前公安部向全國范圍內符合資質的虹膜識別產品供應商進行了虹膜採集設備送檢徵召,近幾周質檢中心檢測結果出爐,虹星科技此次送檢的專為公安虹膜採集建庫定製的虹膜人臉信息採集設備——W200手持式虹膜人臉信息採集設備及S300-UC桌面式虹膜人臉信息採集設備,完全符合《用於刑事偵查業務的虹膜採集設備技術要求》(用於千萬級刑專子系統虹膜庫建設)的各項指標要求,成功過檢並入選合格產品及公安部《虹膜數據採集終端合格產品及製造商名錄》。

Ⅳ 掃描人臉得到識別數據並建立資料庫,這一過程主要涉及信息的攝取是對的嗎

(1)攝像機的鏡頭是一個凸透鏡,凸透鏡對光線有會聚作用,利用了當U>2f時,凸透鏡成倒立、縮小的實像原理製成.凸透鏡的焦距是10cm,當人臉和攝像頭的距離大於二倍焦距,也就是大於20cm時,能成倒立、縮小的實像,故選項ABD正確.
(2)矯正近視眼的鏡片是凹透鏡,不是凸透鏡,故C錯誤.
故選C.

Ⅳ 怎樣使用OpenCV進行人臉識別

友情提示,要看懂代碼前,你得先知道OpenCV的安裝和配置,會用C++,用過一些OpenCV函數。基本的圖像處理和矩陣知識也是需要的。[gm:我是簫鳴的注釋]由於我僅僅是翻譯,對於六級才過的我,肯定有一些翻譯錯的或者不當的地方,所以請大家糾錯。

1.1.介紹Introction

從OpenCV2.4開始,加入了新的類FaceRecognizer,我們可以使用它便捷地進行人臉識別實驗。本文既介紹代碼使用,又介紹演算法原理。(他寫的源代碼,我們可以在OpenCV的opencv\moles\contrib\doc\facerec\src下找到,當然也可以在他的github中找到,如果你想研究源碼,自然可以去看看,不復雜)目前支持的演算法有

Eigenfaces特徵臉createEigenFaceRecognizer()

Fisherfaces createFisherFaceRecognizer()

LocalBinary Patterns Histograms局部二值直方圖 createLBPHFaceRecognizer()

下面所有的例子中的代碼在OpenCV安裝目錄下的samples/cpp下面都能找到,所有的代碼商用或者學習都是免費的。1.2.人臉識別Face Recognition

對人類來說,人臉識別很容易。文獻[Tu06]告訴我們,僅僅是才三天的嬰兒已經可以區分周圍熟悉的人臉了。那麼對於計算機來說,到底有多難?其實,迄今為止,我們對於人類自己為何可以區分不同的人所知甚少。是人臉內部特徵(眼睛、鼻子、嘴巴)還是外部特徵(頭型、發際線)對於人類識別更有效?我們怎麼分析一張圖像,大腦是如何對它編碼的?David Hubel和TorstenWiesel向我們展示,我們的大腦針對不同的場景,如線、邊、角或者運動這些局部特徵有專門的神經細胞作出反應。顯然我們沒有把世界看成零散的塊塊,我們的視覺皮層必須以某種方式把不同的信息來源轉化成有用的模式。自動人臉識別就是如何從一幅圖像中提取有意義的特徵,把它們放入一種有用的表示方式,然後對他們進行一些分類。基於幾何特徵的人臉的人臉識別可能是最直觀的方法來識別人臉。第一個自動人臉識別系統在[Kanade73]中又描述:標記點(眼睛、耳朵、鼻子等的位置)用來構造一個特徵向量(點與點之間的距離、角度等)。通過計算測試和訓練圖像的特徵向量的歐氏距離來進行識別。這樣的方法對於光照變化很穩健,但也有巨大的缺點:標記點的確定是很復雜的,即使是使用最先進的演算法。一些幾何特徵人臉識別近期工作在文獻[Bru92]中有描述。一個22維的特徵向量被用在一個大資料庫上,單靠幾何特徵不能提供足夠的信息用於人臉識別。特徵臉方法在文獻[TP91]中有描述,他描述了一個全面的方法來識別人臉:面部圖像是一個點,這個點是從高維圖像空間找到它在低維空間的表示,這樣分類變得很簡單。低維子空間低維是使用主元分析(Principal Component Analysis,PCA)找到的,它可以找擁有最大方差的那個軸。雖然這樣的轉換是從最佳重建角度考慮的,但是他沒有把標簽問題考慮進去。[gm:讀懂這段需要一些機器學習知識]。想像一個情況,如果變化是基於外部來源,比如光照。軸的最大方差不一定包含任何有鑒別性的信息,因此此時的分類是不可能的。因此,一個使用線性鑒別(Linear Discriminant Analysis,LDA)的特定類投影方法被提出來解決人臉識別問題[BHK97]。其中一個基本的想法就是,使類內方差最小的同時,使類外方差最大。

近年來,各種局部特徵提取方法出現。為了避免輸入的圖像的高維數據,僅僅使用的局部特徵描述圖像的方法被提出,提取的特徵(很有希望的)對於局部遮擋、光照變化、小樣本等情況更強健。有關局部特徵提取的方法有蓋伯小波(Gabor Waelets)([Wiskott97]),離散傅立葉變換(DiscreteCosinus Transform,DCT)([Messer06]),局部二值模式(LocalBinary Patterns,LBP)([AHP04])。使用什麼方法來提取時域空間的局部特徵依舊是一個開放性的研究問題,因為空間信息是潛在有用的信息。

1.3.人臉庫Face Database

我們先獲取一些數據來進行實驗吧。我不想在這里做一個幼稚的例子。我們在研究人臉識別,所以我們需要一個真的人臉圖像!你可以自己創建自己的數據集,也可以從這里(http://face-rec.org/databases/)下載一個。

AT&TFacedatabase又稱ORL人臉資料庫,40個人,每人10張照片。照片在不同時間、不同光照、不同表情(睜眼閉眼、笑或者不笑)、不同人臉細節(戴眼鏡或者不戴眼鏡)下採集。所有的圖像都在一個黑暗均勻的背景下採集的,正面豎直人臉(有些有有輕微旋轉)。YaleFacedatabase A ORL資料庫對於初始化測試比較適合,但它是一個簡單的資料庫,特徵臉已經可以達到97%的識別率,所以你使用其他方法很難得到更好的提升。Yale人臉資料庫是一個對於初始實驗更好的資料庫,因為識別問題更復雜。這個資料庫包括15個人(14個男人,1個女人),每一個都有11個灰度圖像,大小是320*243像素。資料庫中有光照變化(中心光照、左側光照、右側光照)、表情變化(開心、正常、悲傷、瞌睡、驚訝、眨眼)、眼鏡(戴眼鏡或者沒戴)。

壞消息是它不可以公開下載,可能因為原來的伺服器壞了。但我們可以找到一些鏡像(比如 theMIT)但我不能保證它的完整性。如果你需要自己剪裁和校準圖像,可以閱讀我的筆記(bytefish.de/blog/fisherfaces)。ExtendedYale Facedatabase B 此資料庫包含38個人的2414張圖片,並且是剪裁好的。這個資料庫重點是測試特徵提取是否對光照變化強健,因為圖像的表情、遮擋等都沒變化。我認為這個資料庫太大,不適合這篇文章的實驗,我建議使用ORL資料庫。

1.3.1. 准備數據
我們從網上下了數據,下了我們需要在程序中讀取它,我決定使用CSV文件讀取它。一個CSV文件包含文件名,緊跟一個標簽。

/path/to/image.ext;0

假設/path/to/image.ext是圖像,就像你在windows下的c:/faces/person0/image0.jpg。最後我們給它一個標簽0。這個標簽類似代表這個人的名字,所以同一個人的照片的標簽都一樣。我們對下載的ORL資料庫進行標識,可以獲取到如下結果:

./at/s1/1.pgm;0
./at/s1/2.pgm;0
...
./at/s2/1.pgm;1
./at/s2/2.pgm;1
...
./at/s40/1.pgm;39
./at/s40/2.pgm;39
想像我已經把圖像解壓縮在D:/data/at下面,而CSV文件在D:/data/at.txt。下面你根據自己的情況修改替換即可。一旦你成功建立CSV文件,就可以像這樣運行示常式序:

facerec_demo.exe D:/data/at.txt
1.3.2 Creating the CSV File

你不需要手工來創建一個CSV文件,我已經寫了一個Python程序來做這事。

[gm:說一個我實現的方法

如果你會cmd命令,或者稱DOS命令,那麼你打開命令控制台。假設我們的圖片放在J:下的Faces文件夾下,可以輸入如下語句:

J:\Faces\ORL>dir /b/s *.bmp > at.txt
然後你打開at.txt文件可能看到如下內容(後面的0,1..標簽是自己加的):

。。。。
J:\Faces\ORL\s1\1.bmp;0
J:\Faces\ORL\s1\10.bmp;0
J:\Faces\ORL\s1\2.bmp;0
J:\Faces\ORL\s1\3.bmp;0
J:\Faces\ORL\s1\4.bmp;0
J:\Faces\ORL\s1\5.bmp;0
J:\Faces\ORL\s1\6.bmp;0
J:\Faces\ORL\s1\7.bmp;0
J:\Faces\ORL\s1\8.bmp;0
J:\Faces\ORL\s1\9.bmp;0
J:\Faces\ORL\s10\1.bmp;1
J:\Faces\ORL\s10\10.bmp;1
J:\Faces\ORL\s10\2.bmp;1
J:\Faces\ORL\s10\3.bmp;1
J:\Faces\ORL\s10\4.bmp;1
J:\Faces\ORL\s10\5.bmp;1
J:\Faces\ORL\s10\6.bmp;1
。。。。
自然還有c++編程等方法可以做得更好,看這篇文章反響,如果很多人需要,我就把這部分的代碼寫出來。(遍歷多個文件夾,標上標簽)

]

特徵臉Eigenfaces

我們講過,圖像表示的問題是他的高維問題。二維灰度圖像p*q大小,是一個m=qp維的向量空間,所以一個100*100像素大小的圖像就是10,000維的圖像空間。問題是,是不是所有的維數空間對我們來說都有用?我們可以做一個決定,如果數據有任何差異,我們可以通過尋找主元來知道主要信息。主成分分析(Principal Component Analysis,PCA)是KarlPearson (1901)獨立發表的,而 Harold Hotelling (1933)把一些可能相關的變數轉換成一個更小的不相關的子集。想法是,一個高維數據集經常被相關變數表示,因此只有一些的維上數據才是有意義的,包含最多的信息。PCA方法尋找數據中擁有最大方差的方向,被稱為主成分。

演算法描述Algorithmic Description
令 2 表示一個隨機特徵,其中 3 .

計算均值向量 4
5


計算協方差矩陣 S
6


計算 的特徵值7 和對應的特徵向量 8 9


對特徵值進行遞減排序,特徵向量和它順序一致. K個主成分也就是k個最大的特徵值對應的特徵向量。
x的K個主成份:

10其中11 .

PCA基的重構:

12其中 13 .

然後特徵臉通過下面的方式進行人臉識別:

A. 把所有的訓練數據投影到PCA子空間

B. 把待識別圖像投影到PCA子空間

C. 找到訓練數據投影後的向量和待識別圖像投影後的向量最近的那個。

還有一個問題有待解決。比如我們有400張圖片,每張100*100像素大小,那麼PCA需要解決協方差矩陣 14的求解,而X的大小是10000*400,那麼我們會得到10000*10000大小的矩陣,這需要大概0.8GB的內存。解決這個問題不容易,所以我們需要另一個計策。就是轉置一下再求,特徵向量不變化。文獻 [Duda01]中有描述。

[gm:這個PCA還是自己搜著看吧,這里的講的不清楚,不適合初學者看]OpenCV中使用特徵臉Eigenfaces in OpenCV
給出示常式序源代碼

#include "opencv2/core/core.hpp"
#include "opencv2/contrib/contrib.hpp"
#include "opencv2/highgui/highgui.hpp"

#include <iostream>
#include <fstream>
#include <sstream>

usingnamespace cv;
usingnamespace std;

static Mat norm_0_255(InputArray _src) {
Mat src = _src.getMat();
// 創建和返回一個歸一化後的圖像矩陣:
Mat dst;
switch(src.channels()) {
case1:
cv::normalize(_src, dst, 0,255, NORM_MINMAX, CV_8UC1);
break;
case3:
cv::normalize(_src, dst, 0,255, NORM_MINMAX, CV_8UC3);
break;
default:
src.To(dst);
break;
}
return dst;
}
//使用CSV文件去讀圖像和標簽,主要使用stringstream和getline方法
staticvoid read_csv(const string& filename, vector<Mat>& images, vector<int>& labels, char separator =';') {
std::ifstream file(filename.c_str(), ifstream::in);
if (!file) {
string error_message ="No valid input file was given, please check the given filename.";
CV_Error(CV_StsBadArg, error_message);
}
string line, path, classlabel;
while (getline(file, line)) {
stringstream liness(line);
getline(liness, path, separator);
getline(liness, classlabel);
if(!path.empty()&&!classlabel.empty()) {
images.push_back(imread(path, 0));
labels.push_back(atoi(classlabel.c_str()));
}
}
}

int main(int argc, constchar*argv[]) {
// 檢測合法的命令,顯示用法
// 如果沒有參數輸入則退出!.
if (argc <2) {
cout <<"usage: "<< argv[0]<<" <csv.ext> <output_folder> "<< endl;
exit(1);
}
string output_folder;
if (argc ==3) {
output_folder = string(argv[2]);
}
//讀取你的CSV文件路徑.
string fn_csv = string(argv[1]);
// 2個容器來存放圖像數據和對應的標簽
vector<Mat> images;
vector<int> labels;
// 讀取數據. 如果文件不合法就會出錯
// 輸入的文件名已經有了.
try {
read_csv(fn_csv, images, labels);
} catch (cv::Exception& e) {
cerr <<"Error opening file \""<< fn_csv <<"\". Reason: "<< e.msg << endl;
// 文件有問題,我們啥也做不了了,退出了
exit(1);
}
// 如果沒有讀取到足夠圖片,我們也得退出.
if(images.size()<=1) {
string error_message ="This demo needs at least 2 images to work. Please add more images to your data set!";
CV_Error(CV_StsError, error_message);
}
// 得到第一張照片的高度. 在下面對圖像
// 變形到他們原始大小時需要
int height = images[0].rows;
// 下面的幾行代碼僅僅是從你的數據集中移除最後一張圖片
//[gm:自然這里需要根據自己的需要修改,他這里簡化了很多問題]
Mat testSample = images[images.size() -1];
int testLabel = labels[labels.size() -1];
images.pop_back();
labels.pop_back();
// 下面幾行創建了一個特徵臉模型用於人臉識別,
// 通過CSV文件讀取的圖像和標簽訓練它。
// T這里是一個完整的PCA變換
//如果你只想保留10個主成分,使用如下代碼
// cv::createEigenFaceRecognizer(10);
//
// 如果你還希望使用置信度閾值來初始化,使用以下語句:
// cv::createEigenFaceRecognizer(10, 123.0);
//
// 如果你使用所有特徵並且使用一個閾值,使用以下語句:
// cv::createEigenFaceRecognizer(0, 123.0);
//
Ptr<FaceRecognizer> model = createEigenFaceRecognizer();
model->train(images, labels);
// 下面對測試圖像進行預測,predictedLabel是預測標簽結果
int predictedLabel = model->predict(testSample);
//
// 還有一種調用方式,可以獲取結果同時得到閾值:
// int predictedLabel = -1;
// double confidence = 0.0;
// model->predict(testSample, predictedLabel, confidence);
//
string result_message = format("Predicted class = %d / Actual class = %d.", predictedLabel, testLabel);
cout << result_message << endl;
// 這里是如何獲取特徵臉模型的特徵值的例子,使用了getMat方法:
Mat eigenvalues = model->getMat("eigenvalues");
// 同樣可以獲取特徵向量:
Mat W = model->getMat("eigenvectors");
// 得到訓練圖像的均值向量
Mat mean = model->getMat("mean");
// 現實還是保存:
if(argc==2) {
imshow("mean", norm_0_255(mean.reshape(1, images[0].rows)));
} else {
imwrite(format("%s/mean.png", output_folder.c_str()), norm_0_255(mean.reshape(1, images[0].rows)));
}
// 現實還是保存特徵臉:
for (int i =0; i < min(10, W.cols); i++) {
string msg = format("Eigenvalue #%d = %.5f", i, eigenvalues.at<double>(i));
cout << msg << endl;
// 得到第 #i個特徵
Mat ev = W.col(i).clone();
//把它變成原始大小,為了把數據顯示歸一化到0~255.
Mat grayscale = norm_0_255(ev.reshape(1, height));
// 使用偽彩色來顯示結果,為了更好的感受.
Mat cgrayscale;
applyColorMap(grayscale, cgrayscale, COLORMAP_JET);
// 顯示或者保存:
if(argc==2) {
imshow(format("eigenface_%d", i), cgrayscale);
} else {
imwrite(format("%s/eigenface_%d.png", output_folder.c_str(), i), norm_0_255(cgrayscale));
}
}
// 在一些預測過程中,顯示還是保存重建後的圖像:
for(int num_components =10; num_components <300; num_components+=15) {
// 從模型中的特徵向量截取一部分
Mat evs = Mat(W, Range::all(), Range(0, num_components));
Mat projection = subspaceProject(evs, mean, images[0].reshape(1,1));
Mat reconstruction = subspaceReconstruct(evs, mean, projection);
// 歸一化結果,為了顯示:
reconstruction = norm_0_255(reconstruction.reshape(1, images[0].rows));
// 顯示或者保存:
if(argc==2) {
imshow(format("eigenface_reconstruction_%d", num_components), reconstruction);
} else {
imwrite(format("%s/eigenface_reconstruction_%d.png", output_folder.c_str(), num_components), reconstruction);
}
}
// 如果我們不是存放到文件中,就顯示他,這里使用了暫定等待鍵盤輸入:
if(argc==2) {
waitKey(0);
}
return0;
}

Ⅵ 人臉識別的發展歷史是怎樣的

人臉識別是一個被廣泛研究著的熱門問題,大量的研究論文層出不窮,在一定程度上有泛濫成「災」之嫌。為了更好地對人臉識別研究的歷史和現狀進行介紹,本文將AFR的研究歷史按照研究內容、技術方法等方面的特點大體劃分為三個時間階段,如表1所示。該表格概括了人臉識別研究的發展簡史及其每個歷史階段代表性的研究工作及其技術特點。下面對三個階段的研究進展情況作簡單介紹:

第一階段(1964年~1990年)

這一階段人臉識別通常只是作為一個一般性的模式識別問題來研究,所採用的主要技術方案是基於人臉幾何結構特徵(Geometricfeature based)的方法。這集中體現在人們對於剪影(Profile)的研究上,人們對面部剪影曲線的結構特徵提取與分析方面進行了大量研究。人工神經網路也一度曾經被研究人員用於人臉識別問題中。較早從事AFR研究的研究人員除了布萊索(Bledsoe)外還有戈登斯泰因(Goldstein)、哈蒙(Harmon)以及金出武雄(Kanade Takeo)等。金出武雄於1973年在京都大學完成了第一篇AFR方面的博士論文,直到現在,作為卡內基-梅隆大學(CMU)機器人研究院的一名教授,仍然是人臉識別領域的活躍人物之一。他所在的研究組也是人臉識別領域的一支重要力量。總體而言,這一階段是人臉識別研究的初級階段,非常重要的成果不是很多,也基本沒有獲得實際應用。

第二階段(1991年~1997年)

這一階段盡管時間相對短暫,但卻是人臉識別研究的高潮期,可謂碩果累累:不但誕生了若干代表性的人臉識別演算法,美國軍方還組織了著名的FERET人臉識別演算法測試,並出現了若干商業化運作的人臉識別系統,比如最為著名的Visionics(現為Identix)的FaceIt系統。

美國麻省理工學院(MIT)媒體實驗室的特克(Turk)和潘特蘭德(Pentland)提出的「特徵臉」方法無疑是這一時期內最負盛名的人臉識別方法。其後的很多人臉識別技術都或多或少與特徵臉有關系,現在特徵臉已經與歸一化的協相關量(NormalizedCorrelation)方法一道成為人臉識別的性能測試基準演算法。

這一時期的另一個重要工作是麻省理工學院人工智慧實驗室的布魯內里(Brunelli)和波基奧(Poggio)於1992年左右做的一個對比實驗,他們對比了基於結構特徵的方法與基於模板匹配的方法的識別性能,並給出了一個比較確定的結論:模板匹配的方法優於基於特徵的方法。這一導向性的結論與特徵臉共同作用,基本中止了純粹的基於結構特徵的人臉識別方法研究,並在很大程度上促進了基於表觀(Appearance-based)的線性子空間建模和基於統計模式識別技術的人臉識別方法的發展,使其逐漸成為主流的人臉識別技術。

貝爾胡米爾(Belhumeur)等提出的Fisherface人臉識別方法是這一時期的另一重要成果。該方法首先採用主成分分析(PrincipalComponent Analysis,PCA,亦即特徵臉)對圖像表觀特徵進行降維。在此基礎上,採用線性判別分析(LinearDiscriminant Analysis, LDA)的方法變換降維後的主成分以期獲得「盡量大的類間散度和盡量小的類內散度」。該方法目前仍然是主流的人臉識別方法之一,產生了很多不同的變種,比如零空間法、子空間判別模型、增強判別模型、直接的LDA判別方法以及近期的一些基於核學習的改進策略。

麻省理工學院的馬哈丹(Moghaddam)則在特徵臉的基礎上,提出了基於雙子空間進行貝葉斯概率估計的人臉識別方法。該方法通過「作差法」,將兩幅人臉圖像對的相似度計算問題轉換為一個兩類(類內差和類間差)分類問題,類內差和類間差數據都要首先通過主成分分析(PCA)技術進行降維,計算兩個類別的類條件概率密度,最後通過貝葉斯決策(最大似然或者最大後驗概率)的方法來進行人臉識別。

人臉識別中的另一種重要方法——彈性圖匹配技術(Elastic GraphMatching,EGM) 也是在這一階段提出的。其基本思想是用一個屬性圖來描述人臉:屬性圖的頂點代表面部關鍵特徵點,其屬性為相應特徵點處的多解析度、多方向局部特徵——Gabor變換[12]特徵,稱為Jet;邊的屬性則為不同特徵點之間的幾何關系。對任意輸入人臉圖像,彈性圖匹配通過一種優化搜索策略來定位預先定義的若乾麵部關鍵特徵點,同時提取它們的Jet特徵,得到輸入圖像的屬性圖。最後通過計算其與已知人臉屬性圖的相似度來完成識別過程。該方法的優點是既保留了面部的全局結構特徵,也對人臉的關鍵局部特徵進行了建模。近來還出現了一些對該方法的擴展。

局部特徵分析技術是由洛克菲勒大學(RockefellerUniversity)的艾提克(Atick)等人提出的。LFA在本質上是一種基於統計的低維對象描述方法,與只能提取全局特徵而且不能保留局部拓撲結構的PCA相比,LFA在全局PCA描述的基礎上提取的特徵是局部的,並能夠同時保留全局拓撲信息,從而具有更佳的描述和判別能力。LFA技術已商業化為著名的FaceIt系統,因此後期沒有發表新的學術進展。

由美國國防部反毒品技術發展計劃辦公室資助的FERET項目無疑是該階段內的一個至關重要的事件。FERET項目的目標是要開發能夠為安全、情報和執法部門使用的AFR技術。該項目包括三部分內容:資助若干項人臉識別研究、創建FERET人臉圖像資料庫、組織FERET人臉識別性能評測。該項目分別於1994年,1995年和1996年組織了3次人臉識別評測,幾種最知名的人臉識別演算法都參加了測試,極大地促進了這些演算法的改進和實用化。該測試的另一個重要貢獻是給出了人臉識別的進一步發展方向:光照、姿態等非理想採集條件下的人臉識別問題逐漸成為熱點的研究方向。

柔性模型(Flexible Models)——包括主動形狀模型(ASM)和主動表觀模型(AAM)是這一時期內在人臉建模方面的一個重要貢獻。ASM/AAM將人臉描述為2D形狀和紋理兩個分離的部分,分別用統計的方法進行建模(PCA),然後再進一步通過PCA將二者融合起來對人臉進行統計建模。柔性模型具有良好的人臉合成能力,可以採用基於合成的圖像分析技術來對人臉圖像進行特徵提取與建模。柔性模型目前已被廣泛用於人臉特徵對准(FaceAlignment)和識別中,並出現了很多的改進模型。

總體而言,這一階段的人臉識別技術發展非常迅速,所提出的演算法在較理想圖像採集條件、對象配合、中小規模正面人臉資料庫上達到了非常好的性能,也因此出現了若干知名的人臉識別商業公司。從技術方案上看, 2D人臉圖像線性子空間判別分析、統計表觀模型、統計模式識別方法是這一階段內的主流技術。

第三階段(1998年~現在)

FERET』96人臉識別演算法評估表明:主流的人臉識別技術對光照、姿態等由於非理想採集條件或者對象不配合造成的變化魯棒性比較差。因此,光照、姿態問題逐漸成為研究熱點。與此同時,人臉識別的商業系統進一步發展。為此,美國軍方在FERET測試的基礎上分別於2000年和2002年組織了兩次商業系統評測。

基奧蓋蒂斯(Georghiades)等人提出的基於光照錐 (Illumination Cones) 模型的多姿態、多光照條件人臉識別方法是這一時期的重要成果之一,他們證明了一個重要結論:同一人臉在同一視角、不同光照條件下的所有圖像在圖像空間中形成一個凸錐——即光照錐。為了能夠從少量未知光照條件的人臉圖像中計算光照錐,他們還對傳統的光度立體視覺方法進行了擴展,能夠在朗博模型、凸表面和遠點光源假設條件下,根據未知光照條件的7幅同一視點圖像恢復物體的3D形狀和表面點的表面反射系數(傳統光度立體視覺能夠根據給定的3幅已知光照條件的圖像恢復物體表面的法向量方向),從而可以容易地合成該視角下任意光照條件的圖像,完成光照錐的計算。識別則通過計算輸入圖像到每個光照錐的距離來完成。

以支持向量機為代表的統計學習理論也在這一時期內被應用到了人臉識別與確認中來。支持向量機是一個兩類分類器,而人臉識別則是一個多類問題。通常有三種策略解決這個問題,即:類內差/類間差法、一對多法(one-to-rest)和一對一法(one-to-one)。

布蘭茲(Blanz)和維特(Vetter)等提出的基於3D變形(3D Morphable Model)模型的多姿態、多光照條件人臉圖像分析與識別方法是這一階段內一項開創性的工作。該方法在本質上屬於基於合成的分析技術,其主要貢獻在於它在3D形狀和紋理統計變形模型(類似於2D時候的AAM)的基礎上,同時還採用圖形學模擬的方法對圖像採集過程的透視投影和光照模型參數進行建模,從而可以使得人臉形狀和紋理等人臉內部屬性與攝像機配置、光照情況等外部參數完全分開,更加有利於人臉圖像的分析與識別。Blanz的實驗表明,該方法在CMU-PIE(多姿態、光照和表情)人臉庫和FERET多姿態人臉庫上都達到了相當高的識別率,證明了該方法的有效性。

2001年的國際計算機視覺大會(ICCV)上,康柏研究院的研究員維奧拉(Viola)和瓊斯(Jones)展示了他們的一個基於簡單矩形特徵和AdaBoost的實時人臉檢測系統,在CIF格式上檢測准正面人臉的速度達到了每秒15幀以上。該方法的主要貢獻包括:1)用可以快速計算的簡單矩形特徵作為人臉圖像特徵;2)基於AdaBoost將大量弱分類器進行組合形成強分類器的學習方法;3)採用了級聯(Cascade)技術提高檢測速度。目前,基於這種人臉/非人臉學習的策略已經能夠實現准實時的多姿態人臉檢測與跟蹤。這為後端的人臉識別提供了良好的基礎。

沙蘇哈(Shashua)等於2001年提出了一種基於商圖像[13]的人臉圖像識別與繪制技術。該技術是一種基於特定對象類圖像集合學習的繪制技術,能夠根據訓練集合中的少量不同光照的圖像,合成任意輸入人臉圖像在各種光照條件下的合成圖像。基於此,沙蘇哈等還給出了對各種光照條件不變的人臉簽名(Signature)圖像的定義,可以用於光照不變的人臉識別,實驗表明了其有效性。

巴斯里(Basri)和雅各布(Jacobs)則利用球面諧波(Spherical Harmonics)表示光照、用卷積過程描述朗博反射的方法解析地證明了一個重要的結論:由任意遠點光源獲得的所有朗博反射函數的集合形成一個線性子空間。這意味著一個凸的朗博表面物體在各種光照條件下的圖像集合可以用一個低維的線性子空間來近似。這不僅與先前的光照統計建模方法的經驗實驗結果相吻合,更進一步從理論上促進了線性子空間對象識別方法的發展。而且,這使得用凸優化方法來強制光照函數非負成為可能,為光照問題的解決提供了重要思路。

FERET項目之後,涌現了若幹人臉識別商業系統。美國國防部有關部門進一步組織了針對人臉識別商業系統的評測FRVT,至今已經舉辦了兩次:FRVT2000和FRVT2002。這兩次測試一方面對知名的人臉識別系統進行了性能比較,例如FRVT2002測試就表明Cognitec, Identix和Eyematic三個商業產品遙遙領先於其他系統,而它們之間的差別不大。另一方面則全面總結了人臉識別技術發展的現狀:較理想條件下(正面簽證照),針對37437人121,589 幅圖像的人臉識別(Identification)最高首選識別率為73%,人臉驗證(Verification)的等錯誤率(EER[14])大約為6%。FRVT測試的另一個重要貢獻是還進一步指出了目前的人臉識別演算法亟待解決的若干問題。例如,FRVT2002測試就表明:目前的人臉識別商業系統的性能仍然對於室內外光照變化、姿態、時間跨度等變化條件非常敏感,大規模人臉庫上的有效識別問題也很嚴重,這些問題都仍然需要進一步的努力。

總體而言,目前非理想成像條件下(尤其是光照和姿態)、對象不配合、大規模人臉資料庫上的人臉識別問題逐漸成為研究的熱點問題。而非線性建模方法、統計學習理論、基於Boosting[15]的學習技術、基於3D模型的人臉建模與識別方法等逐漸成為備受重視的技術發展趨勢。

總而言之, 人臉識別是一項既有科學研究價值,又有廣泛應用前景的研究課題。國際上大量研究人員幾十年的研究取得了豐碩的研究成果,自動人臉識別技術已經在某些限定條件下得到了成功應用。這些成果更加深了我們對於自動人臉識別這個問題的理解,尤其是對其挑戰性的認識。盡管在海量人臉數據比對速度甚至精度方面,現有的自動人臉識別系統可能已經超過了人類,但對於復雜變化條件下的一般人臉識別問題,自動人臉識別系統的魯棒性和准確度還遠不及人類。這種差距產生的本質原因現在還不得而知,畢竟我們對於人類自身的視覺系統的認識還十分膚淺。但從模式識別和計算機視覺等學科的角度判斷,這既可能意味著我們尚未找到對面部信息進行合理采樣的有效感測器(考慮單目攝像機與人類雙眼系統的差別),更可能意味著我們採用了不合適的人臉建模方法(人臉的內部表示問題),還有可能意味著我們並沒有認識到自動人臉識別技術所能夠達到的極限精度。但無論如何,賦予計算設備與人類似的人臉識別能力是眾多該領域研究人員的夢想。相信隨著研究的繼續深入,我們的認識應該能夠更加准確地逼近這些問題的正確答案。

Ⅶ 人臉識別軟體系統是怎樣運作的

1、首先建立一個人臉資料庫(人臉庫)。
2、比對,根據特徵點編輯演算法比對。

至於你說的什麼系統——可以用很多種語言實現演算法比對,也可以運行在很多種伺服器上。
比如海鑫人臉識別SDK

一、簡介
人臉識別SDK 是專為開發者設計的一個本地化的人臉識別開發包,基於北京海鑫科金高科技股份有限公司具有完全自主知識產權的國際領先人臉識別核心技術開發,包含當今國際領先的人臉檢測、人臉特徵抽取及人臉比對技術,可以用於1:1的身份確認和1:N的身份識別。
人臉識別SDK 為開發者提供完整的技術文檔和開發示例代碼,節省系統開發周期,減輕系統開發成本。

二、主要功能
人臉注冊、人臉檢測、人臉識別
圖像質量檢測
多種圖像採集方式:實時視頻採集(DirectShow、VFW) 、掃描設備(TWain)、數碼圖片(BMP、JPG、PNG、GIF等)
數據存儲方式:文件存儲、資料庫
支持比對方式:1:1,1:N
輸出候選人名單、置信度及人臉位置
支持單人臉單模板,單人臉多模板

三、系統環境
開發環境:Microsoft Visual Studio 6或更高
操作系統:Windows 2000+SP、Windows XP+SP2
最低硬體要求:CPU:P4 3.0GHz,內存:512MB,硬碟:400MB

四、開發幫助
完整的技術文檔
VC++示例代碼