八 OpenCV人臉識別 07 實時人臉識別

2021-10-02 22:51:42 字數 2910 閱讀 3805

攝像頭與人臉資料採集

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旨在提高計算效率,並且非常注重實時...