1、首先就是數(shù)據(jù)的準(zhǔn)備,你要從網(wǎng)絡(luò)上下載一些人臉庫,后面用來訓(xùn)練人臉識別模型。人臉檢測模型opencv是自帶的,但是識別模型需要自己訓(xùn)練。下載人臉庫之后需要對人臉進(jìn)行標(biāo)記,這是一個繁瑣的工作,不過網(wǎng)上有腳本或者自己寫個程序簡化工作量。
2、把數(shù)據(jù)標(biāo)記好之后就是opencv的事情。訓(xùn)練的函數(shù)非常簡單。只有下面這三句:
Ptr model = ();
model->train(images, labels);
model->save("MyFacePCAModel.xml");
3、然后打開攝像頭進(jìn)行人臉檢測,就是框出人臉的位置。人臉檢測模型是opencv自帶的。
CascadeClassifier cascade;
cascade.load("haarcascade_frontalface_alt.xml");
這是加載的方法。
cascade.detectMultiScale(gray, faces,
1.1, 2, 0
//|CV_HAAR_FIND_BIGGEST_OBJECT
//|CV_HAAR_DO_ROUGH_SEARCH
| CV_HAAR_SCALE_IMAGE,
Size(30, 30));
這是檢測的方法。這里檢測得到的就是一個一個的人臉的矩形框,然后用畫矩形的方法把它們畫出來就行了。
4、然后就是對檢測到的人臉進(jìn)行識別了,用我們剛才訓(xùn)練好的人臉模型。加載:
Ptr modelPCA = ();
modelPCA->load("MyFacePCAModel.xml");
預(yù)測:
int predictPCA = 0;
if (face.rows >= 120)
{
resize(face, face_test, Size(92, 112));
}
if (!face_test.empty())
{
predictPCA = modelPCA->predict(face_test);
}
openCV具備人臉識別的解決方案,但openCV仿佛是一道坎,我始終不能安排跨過這道坎的計劃。
很早以前在processing官網(wǎng)中找到了Face Detect(這個鏈接需要代理才能打開)這個為processing提供人臉識別功能的lib,今天終于靜下心來仔細(xì)閱讀了它的說明文檔,下面是其基本使用方法說明: 首先下載pFaceDetect.zip,在processing的libraries文件夾中新建一個名為pFaceDetect的文件夾,再將壓縮包內(nèi)的library文件夾拷貝到這個文件夾中。 其次,F(xiàn)ace Detect需要openCV的支持,但并不必須安裝openCV到計算機(jī)中,只要把openCV的cxcore100.dll 、cv100.dll 、libguide40.dll 三個文件拷貝到processing根目錄就行了。
pFaceDetect是對PImage對象進(jìn)行識別,下面的范例中是通過JMyron來獲取視頻,并將像素信息復(fù)制到PImage對象中,因此,運行下面的范例還需要安裝JMyron。 重啟processing,新建一個項目并保存,把壓縮包內(nèi)的data文件夾拷貝到當(dāng)前項目的存檔目錄中。
不要忘記連接好攝像頭。
調(diào)用opencv訓(xùn)練好的分類器和自帶的檢測函數(shù)檢測人臉人眼等的步驟簡單直接:
1.加載分類器,當(dāng)然分類器事先要放在工程目錄中去。分類器本來的位置是在*\opencv\sources\data\haarcascades(harr分類器,也有其他的可以用,也可以自己訓(xùn)練)
2.調(diào)用detectMultiScale()函數(shù)檢測,調(diào)整函數(shù)的參數(shù)可以使檢測結(jié)果更加精確。
3.把檢測到的人臉等用矩形(或者圓形等其他圖形)畫出來。
1.介紹Introduction
從OpenCV2.4開始,加入了新的類FaceRecognizer,我們可以使用它便捷地進(jìn)行人臉識別實驗。本文既介紹代碼使用,又介紹算法原理。(他寫的源代碼,我們可以在OpenCV的opencv\modules\contrib\doc\facerec\src下找到,當(dāng)然也可以在他的github中找到,如果你想研究源碼,自然可以去看看,不復(fù)雜)
目前支持的算法有
Eigenfaces特征臉()
Fisherfaces ()
LocalBinary Patterns Histograms局部二值直方圖 ()
下面所有的例子中的代碼在OpenCV安裝目錄下的samples/cpp下面都能找到,所有的代碼商用或者學(xué)習(xí)都是免費的。
1.2.人臉識別Face
Recognition
對人類來說,人臉識別很容易。文獻(xiàn)[Tu06]告訴我們,僅僅是才三天的嬰兒已經(jīng)可以區(qū)分周圍熟悉的人臉了。那么對于計算機(jī)來說,到底有多難?其實,迄今為止,我們對于人類自己為何可以區(qū)分不同的人所知甚少。是人臉內(nèi)部特征(眼睛、鼻子、嘴巴)還是外部特征(頭型、發(fā)際線)對于人類識別更有效?我們怎么分析一張圖像,大腦是如何對它編碼的?David Hubel和TorstenWiesel向我們展示,我們的大腦針對不同的場景,如線、邊、角或者運動這些局部特征有專門的神經(jīng)細(xì)胞作出反應(yīng)。顯然我們沒有把世界看成零散的塊塊,我們的視覺皮層必須以某種方式把不同的信息來源轉(zhuǎn)化成有用的模式。自動人臉識別就是如何從一幅圖像中提取有意義的特征,把它們放入一種有用的表示方式,然后對他們進(jìn)行一些分類。基于幾何特征的人臉的人臉識別可能是最直觀的方法來識別人臉。第一個自動人臉識別系統(tǒng)在[Kanade73]中又描述:標(biāo)記點(眼睛、耳朵、鼻子等的位置)用來構(gòu)造一個特征向量(點與點之間的距離、角度等)。通過計算測試和訓(xùn)練圖像的特征向量的歐氏距離來進(jìn)行識別。這樣的方法對于光照變化很穩(wěn)健,但也有巨大的缺點:標(biāo)記點的確定是很復(fù)雜的,即使是使用最先進(jìn)的算法。一些幾何特征人臉識別近期工作在文獻(xiàn)[Bru92]中有描述。一個22維的特征向量被用在一個大數(shù)據(jù)庫上,單靠幾何特征不能提供足夠的信息用于人臉識別。
昨天剛回答過,修改下錯別字放上來了。
不知道你說的人臉識別是識別出來是某個人還是只是在圖像中檢測出人臉。
剛用opencv完成對自己的人臉識別,但是還需要繼續(xù)優(yōu)化。說一下大致步驟吧:
1、首先就是數(shù)據(jù)的準(zhǔn)備,你要從網(wǎng)絡(luò)上下載一些人臉庫,后面用來訓(xùn)練人臉識別模型。人臉檢測模型opencv是自帶的,但是識別模型需要自己訓(xùn)練。下載人臉庫之后需要對人臉進(jìn)行標(biāo)記,這是一個繁瑣的工作,不過網(wǎng)上有腳本或者自己寫個程序簡化工作量。
2、把數(shù)據(jù)標(biāo)記好之后就是opencv的事情。訓(xùn)練的函數(shù)非常簡單。只有下面這三句:
Ptr<FaceRecognizer> model = ();
model->train(images, labels);
model->save("MyFacePCAModel.xml");
3、然后打開攝像頭進(jìn)行人臉檢測,就是框出人臉的位置。人臉檢測模型是opencv自帶的。
CascadeClassifier cascade;
cascade.load("haarcascade_frontalface_alt.xml");
這是加載的方法。
cascade.detectMultiScale(gray, faces,
1.1, 2, 0
//|CV_HAAR_FIND_BIGGEST_OBJECT
//|CV_HAAR_DO_ROUGH_SEARCH
| CV_HAAR_SCALE_IMAGE,
Size(30, 30));
這是檢測的方法。這里檢測得到的就是一個一個的人臉的矩形框,然后用畫矩形的方法把它們畫出來就行了。
4、然后就是對檢測到的人臉進(jìn)行識別了,用我們剛才訓(xùn)練好的人臉模型。加載:
Ptr<FaceRecognizer> modelPCA = ();
modelPCA->load("MyFacePCAModel.xml");
預(yù)測:
int predictPCA = 0;
if (face.rows >= 120)
{
resize(face, face_test, Size(92, 112));
}
if (!face_test.empty())
{
predictPCA = modelPCA->predict(face_test);
}
如果預(yù)測結(jié)果等于標(biāo)記結(jié)果,說明識別正確。
大致流程就這樣了,如果你對opencv有了一定的了解,應(yīng)該能看懂了。
openCV具備人臉識別的解決方案,但openCV仿佛是一道坎,我始終不能安排跨過這道坎的計劃。很早以前在processing官網(wǎng)中找到了Face Detect(這個鏈接需要代理才能打開)這個為processing提供人臉識別功能的lib,今天終于靜下心來仔細(xì)閱讀了它的說明文檔,下面是其基本使用方法說明:
首先下載pFaceDetect.zip,在processing的libraries文件夾中新建一個名為pFaceDetect的文件夾,再將壓縮包內(nèi)的library文件夾拷貝到這個文件夾中。
其次,F(xiàn)ace Detect需要openCV的支持,但并不必須安裝openCV到計算機(jī)中,只要把openCV的cxcore100.dll 、cv100.dll 、libguide40.dll 三個文件拷貝到processing根目錄就行了。
pFaceDetect是對PImage對象進(jìn)行識別,下面的范例中是通過JMyron來獲取視頻,并將像素信息復(fù)制到PImage對象中,因此,運行下面的范例還需要安裝JMyron。
重啟processing,新建一個項目并保存,把壓縮包內(nèi)的data文件夾拷貝到當(dāng)前項目的存檔目錄中。
不要忘記連接好攝像頭。
聲明:本網(wǎng)站尊重并保護(hù)知識產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請在一個月內(nèi)通知我們,我們會及時刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁面生成時間:2.584秒