人臉和眼瞼的實(shí)時(shí)檢測(cè)
1、LBP和HAAR特征級(jí)聯(lián)檢測(cè)器,實(shí)現(xiàn)人臉和眼睛的檢測(cè),首先介紹基于圖片的人臉檢測(cè),再引入JavaCameraVeiw,, 對(duì)Android端的相機(jī)調(diào)用和數(shù)據(jù)讀取,使用攝像頭數(shù)據(jù)流,進(jìn)行人臉和眼睛的實(shí)時(shí)檢測(cè)與跟蹤,
級(jí)聯(lián)分類器介紹
opencv中的人臉檢測(cè)是基于訓(xùn)練好的 LBP和 HAAR的特征級(jí)聯(lián)分類檢測(cè)器完成的
LBP特征: Local Binary Pattern 局部二值模式, LBP的應(yīng)用中, 如紋理分類、人臉分析等, 一般采用 LBP特征譜的統(tǒng)計(jì)直方圖作為特征向量用于分類識(shí)別.
HAAR特征: 一種反映圖像灰度變化的, 像素分模塊求差值的一種特征.
單個(gè) LBP或者 HAAR 特征都可以檢測(cè)分類邊緣、直線、角點(diǎn)等特征, 但是容易受到外界噪聲、像素混疊等各種干擾, 導(dǎo)致誤判, 所以他們單個(gè)都是弱分類器, 只有通過這些聯(lián)級(jí)分類器的特征點(diǎn)才會(huì)被保存, 否則會(huì)被拋棄, 然后再進(jìn)一步使用更多的強(qiáng)分類器聯(lián)級(jí)對(duì)特征區(qū)域記性候選檢測(cè), 知道滿足條件, 輸出檢測(cè)得到的最終結(jié)果.

人臉進(jìn)測(cè)
OpenCV自帶訓(xùn)練好的人臉檢測(cè)模型
HAAR和 LBP目錄位置
/OpenCV-android-sdk/sdk/etc/
加載預(yù)訓(xùn)練特征 xml 數(shù)據(jù), 在資源目錄下創(chuàng)建一個(gè)文件夾raw, 把/sdk/etc/下面的 lbpcascade_frontalface_improved.xml 復(fù)制到 raw文件中.
初始化聯(lián)級(jí)分類器的方法:
//cascadeClassifier 聯(lián)級(jí)分類器;
private void initClassifier(){
try{
InputStream si = getResources().openRawResource(R.raw.lbpcascade_frontalface_improved);
File cascadDir = getDir("cascade",Context.MODE_PRIVATE);
File cadcadFile = new File(cascadDir,"lbpcascade_frontalface_improved.xml");
FileOutputStream os = new FileOutputStream(cascadeFile);
byte[] buffer = new byte[4096];
int read;
while((read = is.read(buffer)) != -1){
os.write(buffer);
}
is.close();
os.close();
CascadeClassifier cascadeClassifier = new CascadeClassifier(cascadeFile.getAbsolutePath());
cascadeFile.delete();
cascadeDir.delete();
}catch(Exception e){
e.printStackTrace();
}
}
detectMultiScale方法的調(diào)用
初始化加載后, 就可以調(diào)用它的 detectMultiScale方法設(shè)置好相關(guān)參數(shù)以實(shí)現(xiàn)人臉檢測(cè)
/**
* img 輸入圖像
* objects 表示檢測(cè)到的對(duì)象個(gè)數(shù), 返回每個(gè)對(duì)象的矩形坐標(biāo)
* scaleFactor 尺度變換的比率 基本在 1.05 ~ 1.2 之間比較好
* minNeighbors 領(lǐng)域范圍內(nèi)符合條件的對(duì)象個(gè)數(shù), 它是輸出檢測(cè)最終 BOX的重要閾值, 太大則條件苛刻丟失檢測(cè)對(duì)象, 太小容易檢測(cè)錯(cuò)誤;
* flags OpenCV 2.x 使用
* minSize 對(duì)象檢測(cè)的最小范圍
* maxSize 對(duì)象檢測(cè)的最大范圍
**/
detectMultiScale(Mat img, MatOfPoint objects, double scaleFactor, int minNeighbors, int flags, Size minSize, Size maxSize)