攝像頭與人臉資料採集
videocapture類使用
使用haar 級聯檢測器實現人臉檢測
對檢測的人臉資料寫入檔案儲存
刪除錯誤資料與資料對齊
採集資料注意點
資料訓練與測試
基於eigenface演算法實現資料訓練與測試
實時人臉識別
檢測人臉
識別人臉
實時顯示人臉識別結果
整體流程:
人臉資料採集與處理->人臉資料訓練與測試->實時人臉檢測->人臉識別->顯示結果/繼續讀取下一幀->選擇終止->結束
tips:
訓練與檢測的影象必須大小一致,型別為灰度
videocatpture類使用
haar人臉檢測
資料採集通過眼睛標定實現資料一致
#include
#include
#include
using
namespace std;
using
namespace cv;
using
namespace cv::face;
string face_filename =
"haarcascade_frontalface_alt.xml"
;//opencv自帶訓練好的人臉識別haar級聯器
//string face_filename = "lbpcascade_frontalface.xml";//opencv自帶訓練好的人臉識別lbp級聯器
cascadeclassifier face_cascade;
//haar人臉檢測級聯分類器
intmain
(int argc,
char
** ar**)
string line, path, classlabel;
vector images;
//存放影象資料
vector<
int> labels;
//存放影象標籤
char separator =
';';
//分號
while
(getline
(file, line)
)//getline(cin,inputline)//cin 是正在讀取的輸入流,而 inputline 是接收輸入字串的 string 變數的名稱}if
(images.
size()
<=
1|| labels.
size()
<=1)
//如果沒有讀到足夠多的
int height = images[0]
.rows;
//得到第一張的高度,在下面對影象變形得到他們原始大小時需要
int width = images[0]
.cols;
cout <<
"讀取的高度為:"
<< height << endl <<
"讀取的寬度為:"
<< width << endl;
//從資料集 中移除最後一張,用於做測試,需要根據自己的需要進行修改
mat testsample = images[images.
size()
-1];
//獲取最後一張**
int testlabel = labels[labels.
size()
-1];
//獲取最後乙個標籤
images.
pop_back()
;//移除最後一張
labels.
pop_back()
;//移除最後乙個標籤
/* 特徵臉eigenfaces
影象表示的問題是他的高維問題。
二維灰度影象p*q大小,是乙個m=q*p維的向量空間,所以乙個100*100畫素大小的影象就是10,000維的影象空間。
但是不是所有的維數空間對我們來說都有用?我們可以做乙個決定,如果資料有任何差異,我們可以通過尋找主元來知道主要資訊。
主成分分析(principal component analysis,pca)是把一些可能相關的變數轉換成乙個更小的不相關的子集。
乙個高維資料集經常被相關變數表示,因此只有一些的維上資料才是有意義的,包含最多的資訊。
pca方法尋找資料中擁有最大方差的方向,被稱為主成分。
*///建立乙個特徵臉模型用於人臉識別
//通過txt檔案讀取的影象和標籤 訓練它
//這裡是乙個完整的pca變換
ptr model = eigenfacerecognizer::
create()
; model-
>
train
(images, labels)
;//人臉識別
//判斷是否成功讀取級聯器if(
!face_cascade.
load
(face_filename));
videocapture capture(0
);mat frame;
//用來接capture
mat frame_gray;
vector faces;
//人臉區域
while
(capture.
read
(frame)
)imshow
("人臉識別"
, frame)
;char c =
waitkey(30
);if(c ==27)
}waitkey(0
);return0;
}
輸出結果:
成功檢測人臉,並在人臉處繪製黃色圓;
當識別到標籤10的人臉時,會出現紅色字"handsome boy";否則出現"who』re you?"
OpenCv人臉識別
在進行人臉識別時候,為了達到效果,我們使用opencv的分類器。進行對進行識別。include include include include using namespace cv using namespace std void detectanddraw mat img,cascadeclass...
opencv人臉識別
在python環境下利用opencv實現人臉識別,接下來一步一步動手操作。預備知識 一 環境準備 如果已經準備好了請跳過。0,第一步安裝numpy和matplotlib pip install upgrade setuptools pip install numpy matplotlib 1,pip...
實時人臉識別
我們將逐步學習如何使用picam實時識別人臉 這個專案是由這個出色的 開源計算機視覺庫 opencv完成的。在本教程中,我們將重點介紹raspberry pi 因此,raspbian為os 和python,但是我也在my mac上測試了 並且效果也不錯。opencv旨在提高計算效率,並且非常注重實時...