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