国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

OpenCV實現人臉識別

2020-02-23 04:31:37
字體:
來源:轉載
供稿:網友

主要有以下步驟:

1、人臉檢測

2、人臉預處理

3、從收集的人臉訓練機器學習算法

4、人臉識別

5、收尾工作

人臉檢測算法:

基于Haar的臉部檢測器的基本思想是,對于面部正面大部分區域而言,會有眼睛所在區域應該比前額和臉頰更暗,嘴巴應該比臉頰更暗等情形。它通常執行大約20個這樣的比較來決定所檢測的對象是否為人臉,實際上經常會做上千次。

基于LBP的人臉檢測器基本思想與基于Haar的人臉檢測器類似,但它比較的是像素亮度直方圖,例如,邊緣、角落和平坦區域的直方圖。

這兩種人臉檢測器可通過訓練大的圖像集找到人臉,這些圖像集在opencv中存在XML文件中以便后續使用。

這些級聯分類檢測器通常至少需使用1000個獨特的人臉圖像和10000個非人臉圖像作為訓練,訓練時間一般LBP要幾個小時,

Haar要一個星期。

項目中的關鍵代碼如下:

initDetectorsfaceCascade.load(faceCascadeFilename);eyeCascade1.load(eyeCascadeFilename1);eyeCascade2.load(eyeCascadeFilename2);initWebcamvideoCapture.open(cameraNumber);cvtColor(img, gray, CV_BGR2GRAY);//有需要則縮小圖片使檢測運行更快,之后要恢復原來大小resize(gray, inputImg, Size(scaledWidth, scaledHeight));equalizeHist(inputImg, equalizedImg);cascade.detectMultiScale(equalizedImg......);

人臉預處理:

實際中通常訓練(采集圖像)和測試(來自攝像機圖像)的圖像會有很大不同,受(如光照、人臉方位、表情等),

結果會很差,因此用于訓練的數據集很重要。

人臉預處理目的是減少這類問題,有助于提高整個人臉識別系統的可靠性。

人臉預處理的最簡單形式就是使用equalizeHist()函數做直方圖均衡,這與人臉檢測那步一樣。

實際中,為了讓檢測算法更可靠,會使用面部特征檢測(如,檢測眼睛、鼻子、嘴巴和眉毛),本項目只使用眼睛檢測。

使用OpenCV自帶的訓練好的眼部探測器。如,正面人臉檢測完畢后,得到一個人臉,在使用眼睛檢測器提取人臉的左眼區域和右眼區域,并對每個眼部區域進行直方圖均衡。

這步涉及的操作有以下內容:

1、幾何變換和裁剪

人臉對齊很重要,旋轉人臉使眼睛保持水平,縮放人臉使眼睛之間距離始終相同,平移人臉使眼睛總是在所需高度上水平居中,

裁剪人臉外圍(如圖像背景、頭發、額頭、耳朵和下巴)。

2、對人臉左側和右側分別用直方圖均衡

3、平滑

用雙邊濾波器來減少圖像噪聲

4、橢圓掩碼

將剩余頭發和人臉圖像背景去掉

項目中的關鍵代碼如下:

detectBothEyes(const Mat &face, CascadeClassifier &eyeCascade1, CascadeClassifier &eyeCascade2,Point &leftEye, Point &rightEye, Rect *searchedLeftEye, Rect *searchedRightEye);topLeftOfFace = face(Rect(leftX, topY, widthX, heightY));//在左臉區域內檢測左眼detectLargestObject(topLeftOfFace, eyeCascade1, leftEyeRect, topLeftOfFace.cols);//右眼類似,這樣眼睛中心點就得到了leftEye = Point(leftEyeRect.x + leftEyeRect.width/2, leftEyeRect.y + leftEyeRect.height/2);//再得到兩眼的中點,然后計算兩眼之間的角度Point2f eyesCenter = Point2f( (leftEye.x + rightEye.x) * 0.5f, (leftEye.y + rightEye.y) * 0.5f );//仿射扭曲(Affine Warping)需要一個仿射矩陣rot_mat = getRotationMatrix2D(eyesCenter, angle, scale);//現在可變換人臉來得到檢測到的雙眼出現在人臉的所需位置warpAffine(gray, warped, rot_mat, warped.size());//先對人臉左側和右側分開進行直方圖均衡equalizeHist(leftSide, leftSide);equalizeHist(rightSide, rightSide);//再合并,這里合并時左側1/4和右側1/4直接取像素值,中間的2/4區域像素值通過一定計算進行處理。//雙邊濾波bilateralFilter(warped, filtered, 0, 20.0, 2.0);//采用橢圓掩碼來刪除一些區域filtered.copyTo(dstImg, mask);            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 二手房| 桂阳县| 西乡县| 东乌珠穆沁旗| 塘沽区| 北川| 玉环县| 邛崃市| 大英县| 雷州市| 舞钢市| 光山县| 会昌县| 乌兰察布市| 抚远县| 大港区| 黔西县| 柳河县| 吉木乃县| 浦县| 门头沟区| 西平县| 靖西县| 贡山| 新河县| 顺昌县| 南昌县| 黄浦区| 阜阳市| 奉节县| 彭州市| 泉州市| 衡东县| 灌阳县| 宿州市| 红原县| 行唐县| 萝北县| 应城市| 伽师县| 嘉荫县|