基于AdaBoost的人脸检测 含源码
需要完整源碼 聯系我QQ 1752744377@qq.com
基于AdaBoost的人臉檢測
一 、實驗目的
? 掌握利用AdaBoost及級聯分類器進行人臉檢測的基本方法,通過實驗加深對基本概念的理解。
二 實驗原理
人臉檢測是指對于任意一幅給定的圖像,采用一定的策略對其進行搜索以確定其中是否含有人臉,如果是則返回人臉的位置、大小和姿態。
Adaboost核心思想是通過訓練分類器得到檢測的目的,不僅僅是人臉,人的眼睛,人上身都可以作為檢測的對象,在Matlab以及OpenCV中都有相應的訓練結果可以調用,
大部分運行效率較高的只能算法都是通過提取高效以及利于識別和處理的特征實現的,而Adaboost算法也是一樣的。Adaboost(Adaptive Boosting)是Freund和Schapire在PAC(ProbablyApproximately Correct)模型基礎上提出的一種學習模型,它的算法思想是:通過對大量正樣本和負樣本的學習,通過學習的反饋,弱分類器在不知道先驗的訓練誤差的前提下,自適應的調整錯誤率以及相應的權重,直到強分類器達到預定的性能。
Viola等人將Adaboost算法應用于人臉檢測,同時將Haar特征和Cascade算法和Adaboost算法結合,大大提高了檢測的速度和檢測的精確率,其論文的主要工作是:①引入了一種計算簡單卻十分有效的矩形特征(Haar特征),用來描述人臉圖片的灰度分布情況,同時提出了積分圖的概念,矩形特征和積分圖的結合有助于檢測速度的提高。②利用 Adaboost優秀的數據挖掘能力從海量的Haar特征中,挑選出若干個具有最佳樣本分類能力的 Haar特征,將Haar特征轉化為弱分類器,最后以線性組合的方式得到最終的強分類器;③提出了一種由粗到精的檢測思路,構造了一個級聯人臉檢測器:先用簡單的強分類器的把圖片中大部分的背景區域剔除,再逐步遞增強分類器的復雜度(即構成它的弱分類器數量),不斷地過濾掉剩余的背景區域,最后通過所有強分類器的則為人臉窗口。這種檢測思路有效的提升了檢測速度。進行Adaboost算法之前,必須要得到的是Haar特征,從而得到提高計算效率的積分圖:
①trainCascadeObjectDetector函數可以使用Haar特征、梯度方向直方圖(Histograms of Oriented Gradients,HOG)、局部二進制模式(Local Binary Pattern,LBP)等實現目標檢測器的訓練,最后以xml格式的文件返回目標檢測器的結果。
②CascadeObjectDetector,該函數可以創建一個目標檢測器,它是通過Viola-Jones算法訓練實現的,通過對1中訓練得到的結果來實現對目標檢測器的創建,同時也可以使用工具箱中已經訓練好的文件實現檢測器的創建。還可以通過制定目標檢測模型指定生成的目標檢測器的模型,這里的模型實質目標檢測器具體適用的檢測目標,比如眼睛、耳朵、臉等,默認檢測目標是臉。
③檢測器的模型通過CasacdeObjectDetector(Model)指定,其中Model是通過輸入一行字符串得到的,Model的類型包括FrontalFace(CART)、Frontal Face(LBP)、Upper Body等,默認為FrontalFaceCART。
④BBOX = step(detector, I)可以返回的矩陣BBOX,其中矩陣的每一行可以指定檢測到目標的矩形區域,通過矩形左上角橫、縱坐標的以及矩形長、寬4個參數確定矩形區域。代表檢測到的目標個數
三 實驗步驟及程序
?1 實驗步驟
(1)創建一個人臉檢測系統對象
(2)讀入視頻的每一幀
(3)對每一幀視頻進行人臉檢測
(4)將檢測出的人臉在圖像上標出并顯示
(5)對每一幀視頻進行人臉檢測
(6)將檢測出的人臉在圖像上標出并顯示
(7) 對每一幀視頻進行人臉檢測
(8) 將檢測出的人臉在圖像上標出并顯示
?2 實驗流程圖
?
圖3-1 人臉檢測流程圖
3 實驗程序
%創建一個人臉檢測系統對象(system object)
faceDetector=vision.CascadeObjectDetector();
%讀入視頻的每一幀
videoFileReader=vision.VideoFileReader('C:\Users\mimos\Downloads\馬云.jpg');
videoFrame=step(videoFileReader);
%對每一幀視頻進行人臉檢測
bbox=step(faceDetector,videoFrame);
%將檢測出的人臉在圖像上標出并顯示
boxInserter =vision.ShapeInserter('BorderColor','Custom',...
? ? 'CustomBorderColor',[255 255 0]);
videoOut=step(boxInserter,videoFrame,bbox);
figure,imshow(videoOut),title('馬云');
videoFileReader=vision.VideoFileReader('C:\Users\mimos\Downloads\老詹.jpg');
videoFrame=step(videoFileReader);
%對每一幀視頻進行人臉檢測
bbox=step(faceDetector,videoFrame);
%將檢測出的人臉在圖像上標出并顯示
boxInserter =vision.ShapeInserter('BorderColor','Custom',...
? ? 'CustomBorderColor',[255 255 0]);
videoOut=step(boxInserter,videoFrame,bbox);
figure,imshow(videoOut),title('老詹');
videoFileReader=vision.VideoFileReader('C:\Users\mimos\Downloads\C羅.jpg');
videoFrame=step(videoFileReader);
%對每一幀視頻進行人臉檢測
bbox=step(faceDetector,videoFrame);
%將檢測出的人臉在圖像上標出并顯示
boxInserter =vision.ShapeInserter('BorderColor','Custom',...
? ? 'CustomBorderColor',[255 255 0]);
videoOut=step(boxInserter,videoFrame,bbox);
figure,imshow(videoOut),title('C羅');
videoFileReader=vision.VideoFileReader('C:\Users\mimos\Downloads\喬幫主.jpg');
videoFrame=step(videoFileReader);
%對每一幀視頻進行人臉檢測
bbox=step(faceDetector,videoFrame);
%將檢測出的人臉在圖像上標出并顯示
boxInserter =vision.ShapeInserter('BorderColor','Custom',...
? ? 'CustomBorderColor',[255 255 0]);
videoOut=step(boxInserter,videoFrame,bbox);
figure,imshow(videoOut),title('喬幫主');
videoFileReader=vision.VideoFileReader('C:\Users\mimos\Downloads\梅西.jpg');
videoFrame=step(videoFileReader);
%對每一幀視頻進行人臉檢測
bbox=step(faceDetector,videoFrame);
%將檢測出的人臉在圖像上標出并顯示
boxInserter =vision.ShapeInserter('BorderColor','Custom',...
? ? 'CustomBorderColor',[255 255 0]);
videoOut=step(boxInserter,videoFrame,bbox);
figure,imshow(videoOut),title('梅西');
videoFileReader=vision.VideoFileReader('C:\Users\mimos\Downloads\張國榮.jpg');
videoFrame=step(videoFileReader);
%對每一幀視頻進行人臉檢測
bbox=step(faceDetector,videoFrame);
%將檢測出的人臉在圖像上標出并顯示
boxInserter =vision.ShapeInserter('BorderColor','Custom',...
? ? 'CustomBorderColor',[255 255 0]);
videoOut=step(boxInserter,videoFrame,bbox);
figure,imshow(videoOut),title('張國榮');
videoFileReader=vision.VideoFileReader('C:\Users\mimos\Downloads\鳳姐.jpg');
videoFrame=step(videoFileReader);
%對每一幀視頻進行人臉檢測
bbox=step(faceDetector,videoFrame);
%將檢測出的人臉在圖像上標出并顯示
boxInserter =vision.ShapeInserter('BorderColor','Custom',...
? ? 'CustomBorderColor',[255 255 0]);
videoOut=step(boxInserter,videoFrame,bbox);
figure,imshow(videoOut),title('鳳姐 face');
videoFileReader=vision.VideoFileReader('C:\Users\mimos\Downloads\周立波.jpg');
videoFrame=step(videoFileReader);
%對每一幀視頻進行人臉檢測
bbox=step(faceDetector,videoFrame);
%將檢測出的人臉在圖像上標出并顯示
boxInserter =vision.ShapeInserter('BorderColor','Custom',...
? ? 'CustomBorderColor',[255 255 0]);
videoOut=step(boxInserter,videoFrame,bbox);
figure,imshow(videoOut),title('周立波');
videoFileReader=vision.VideoFileReader('C:\Users\mimos\Downloads\達康書記.jpg');
videoFrame=step(videoFileReader);
%對每一幀視頻進行人臉檢測
bbox=step(faceDetector,videoFrame);
%將檢測出的人臉在圖像上標出并顯示
boxInserter =vision.ShapeInserter('BorderColor','Custom',...
? ? 'CustomBorderColor',[255 255 0]);
videoOut=step(boxInserter,videoFrame,bbox);
figure,imshow(videoOut),title('達康書記');
videoFileReader=vision.VideoFileReader('C:\Users\mimos\Downloads\白百合.jpg');
videoFrame=step(videoFileReader);
%對每一幀視頻進行人臉檢測
bbox=step(faceDetector,videoFrame);
%將檢測出的人臉在圖像上標出并顯示
boxInserter =vision.ShapeInserter('BorderColor','Custom',...
? ? 'CustomBorderColor',[255 255 0]);
videoOut=step(boxInserter,videoFrame,bbox);
figure,imshow(videoOut),title('白百合');
videoFileReader=vision.VideoFileReader('C:\Users\mimos\Downloads\王思聰.jpg');
videoFrame=step(videoFileReader);
%對每一幀視頻進行人臉檢測
bbox=step(faceDetector,videoFrame);
%將檢測出的人臉在圖像上標出并顯示
boxInserter =vision.ShapeInserter('BorderColor','Custom',...
? ? 'CustomBorderColor',[255 255 0]);
videoOut=step(boxInserter,videoFrame,bbox);
figure,imshow(videoOut),title('王思聰');}
四 實驗結果與分析
運用AdoBoost算法對含有不同人不同場景的檢測如下圖所示。
?
圖4-1 多人臉圖像識別
? ? ? ?
圖4-2單人臉圖像檢測結果
?
從檢測結果可以看出,運用AdoBoost算法進行不同人不同場景下的人臉識別效果很好。但依舊存在一些問題,有時也會出現一些識別錯誤,比如多人識別時識別側臉時或有問題。此時我們需要處理好弱分類器閾值、特征值相差程度等,以降低區間率而同時達到較高的檢測率。 ??
基于圖像的人臉檢測方法具有很強的適應能力和魯棒性,但由于需要對所有
可能的檢測窗口進行窮舉搜索,因此計算復雜度高;而且這類方法需要消耗大量的時間和精力收集和訓練樣本,特別是非人臉樣本的選取仍存在很大的困難。
綜上所述,人們在人臉檢測領域做了大量工作,提出了許多方法,但現有的系統仍存在對限制條件要求較嚴格、魯棒性較差、誤檢率過高等缺點,這些也限制了人臉識別系統的應用范圍。所以進一步利用人臉的灰度分布、幾何形狀、膚色、紋理、運動等知識研究適應性強、分割精度高的快速算法仍是人們未來的工作,因而人臉檢測方法的發展方向是建立更有效的人臉描述和搜索計算策略模型。
總結
以上是生活随笔為你收集整理的基于AdaBoost的人脸检测 含源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android版局域网限速,局域网手机W
- 下一篇: linux tc 限速,TC限速