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