OpenCV人臉識別的原理 完整版程式碼
http://blog.csdn.net/yanming901012/article/details/8606183
- 本程式首先利用從攝像頭檢測到的人臉圖片,先進行直方圖均衡化
- 並縮放到92*112的圖片大小,然後根據train.txt的採集到的人臉模版
- 進行匹配識別(最好是在統一光照下,採集不同角度的人臉圖片各一張)
- 注意:影響的極大因素在於光照,模版若與採集的影象光照不一樣,識別率很低。
- 經測試,模板若與檢測的影象在同一光照下的話,側臉,仰臉,正臉均可識別,且識別率較高
- //
- #include <stdio.h>
-
#include <string.h>
- #include "cv.h"
- #include "cvaux.h"
- #include "highgui.h"
- #include <stdlib.h>
- #include <assert.h>
- #include <math.h>
- #include <float.h>
- #include <limits.h>
- #include <time.h>
- #include <ctype.h>
- ////定義幾個重要的全域性變數
-
IplImage ** faceImgArr = 0; // 指向訓練人臉和測試人臉的指標(在學習和識別階段指向不同)
- CvMat * personNumTruthMat = 0; // 人臉影象的ID號
- int nTrainFaces = 0; // 訓練影象的數目
- int nEigens = 0; // 自己取的主要特徵值數目
- IplImage * pAvgTrainImg = 0; // 訓練人臉資料的平均值
- IplImage ** eigenVectArr = 0; // 投影矩陣,也即主特徵向量
- CvMat * eigenValMat = 0; // 特徵值
-
CvMat * projectedTrainFaceMat = 0; // 訓練影象的投影
- char *filename[5]={"face1.jpg","face2.jpg","face3.jpg","face4.jpg","face5.jpg"};
- static CvMemStorage* storage = 0;
- static CvHaarClassifierCascade* cascade = 0;
- int j=0;//統計記錄的人臉數
- char a[512]={0};
- int a1,a2,a3,a4;
- time_t timeBegin, timeEnd;
- int timeuse;
- //// 函式原型
- void learn();
- void doPCA();
- void storeTrainingData();
- int loadTrainingData(CvMat ** pTrainPersonNumMat);
- int findNearestNeighbor(float * projectedTestFace);
- int loadFaceImgArray(char * filename);
- void printUsage();
- int detect_and_draw( IplImage* image );
- int recognize(IplImage *faceimg);
- //主函式,主要包括學習和識別兩個階段,需要執行兩次,通過命令列傳入的引數區分
- int main( int argc, char** argv )
- {
- CvCapture* capture = 0;
- IplImage *frame, *frame_copy = 0;
- int optlen = strlen("--cascade=");
- char *cascade_name = "H://opencv-2.4.3//opencv//data//haarcascades//haarcascade_frontalface_alt2.xml";
- //opencv裝好後haarcascade_frontalface_alt2.xml的路徑,
- //也可以把這個檔案拷到你的工程資料夾下然後不用寫路徑名cascade_name= "haarcascade_frontalface_alt2.xml";
- //或者cascade_name ="C:\\Program Files\\OpenCV\\data\\haarcascades\\haarcascade_frontalface_alt2.xml"
- cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
- if( !cascade )
- {
- fprintf( stderr, "ERROR: Could not load classifier cascade\n" );
- fprintf( stderr,
- "Usage: facedetect --cascade=\"<cascade_path>\" [filename|camera_index]\n" );
- return -1;
- }
- storage = cvCreateMemStorage(0);
- capture = cvCreateCameraCapture(-1);
- cvNamedWindow( "result", 1 );
- if( capture )
- { timeBegin = time(NULL);
- learn();
- for(;;)
- { timeEnd = time(NULL);
- timeuse=timeEnd - timeBegin;//計算經過的時間,統計人數
- if( !cvGrabFrame( capture ))
- break;
- frame = cvRetrieveFrame( capture );
- if( !frame )
- break;
- if( !frame_copy )
- frame_copy = cvCreateImage( cvSize(frame->width,frame->height),
- IPL_DEPTH_8U, frame->nChannels );
- if( frame->origin == IPL_ORIGIN_TL )//如果影象的起點在左上角
- cvCopy( frame, frame_copy, 0 );
- else
- cvFlip( frame, frame_copy, 0 );//如果影象的起點不在左上角,而在左下角時,進行X軸對稱
- detect_and_draw( frame_copy ); //檢測並且識別
- if( cvWaitKey( 10 ) >= 0 )
- break;
- }
- cvReleaseImage( &frame_copy );
- cvReleaseCapture( &capture );
- }
- else
- {
- printf("Cannot read from CAM");
- return -1;
- }
- cvDestroyWindow("result");
- return 0;
- }
- //學習階段程式碼
- void learn()
- {
- int i, offset;
- //載入訓練影象集
- nTrainFaces = loadFaceImgArray("train.txt");
- if( nTrainFaces < 2 )
- {
- fprintf(stderr,
- "Need 2 or more training faces\n"
- "Input file contains only %d\n", nTrainFaces);
- return;
- }
- // 進行主成分分析
- doPCA();
- //將訓練圖集投影到子空間中
-
相關推薦
OpenCV人臉識別的原理 完整版程式碼
http://blog.csdn.net/yanming901012/article/details/8606183 本程式首先利用從攝像頭檢測到的人臉圖片,先進行直方圖均衡化 並縮放到92*112的圖片大小,然後根據train.txt的採
OpenCV人臉識別的原理 (原文完整版)
http://www.educity.cn/wenda/358439.html “人臉識別”是一個在計算機視覺和生物特徵識別領域十分活躍的話題。這個主題已經被給力地研究了25年,並且最終在安全、機器人學、人機互動、數碼攝像機、遊戲和娛樂領域得到了廣泛應用。 “人臉
OpenCV人臉識別程式碼
本部落格直接呼叫OpenCV2.4.13附帶的訓練好的人臉檢測分類器,使用AdaBoost方法對電腦自帶攝像頭進行人臉識別。 face_detection.cpp: #include <stdio.h> #include <iostream&g
OpenCV人臉識別
com show wait window alt imp bsp src import import cv2 filename = ‘pic.jpg‘ def detect(filename): face_cascade = cv2.Cascade
基於Qt的OpenCV人臉識別(一)
OpenCV對影象處理非常專業,具有很多模組。但是其GUI模組(即highgui),互動性非常差,就連按鈕也得用滑動條來實現。而Qt這個強大的c++圖形庫很好的避免了這個缺點,因此筆者基於Qt平臺,呼叫OpenCV庫,來進行OpenCV的人
基於Qt的OpenCV人臉識別(二)
經過上篇的qt環境配置,現在可以進行開發了。首先進行總體的介面設計,介面的控制元件選擇及介面如下: 單擊開啟攝像頭按鈕右鍵,轉到槽,OpenCV開啟攝像頭操作槽函式程式碼如下: //開啟攝像頭 void Widget::on_btn_open_clicked() { //開
基於python opencv人臉識別的員工考勤系統
WorkAttendanceSystem 一個基於opencv人臉識別的員工考勤系統,作者某雙一流A類大學裡的一流學生,寫於2018/09/,python課設期間。
java實現opencv人臉識別(二)
Java下使用opencv進行人臉檢測 工作需要,研究下人臉識別,發現opencv比較常用,儘管能檢測人臉,但識別率不高,多數是用來獲取攝像頭的視訊流的,提取裡面的視訊幀,實現人臉識別時通常會和其他框架搭配使用,比如face_recognition、SeetaFace En
opencv 人臉識別 二 訓練和識別
上一篇中我們對訓練資料做了一些預處理,檢測出人臉並儲存在\pic\color\x資料夾下(x=1,2,3,...類別號),本文做訓練和識別。為了識別,首先將人臉訓練資料 轉為灰度、對齊、歸一化,再放入分類器(EigenFaceRecognizer),最後用訓練出的model進行
【2018.12.24】python3.7+OpenCV 人臉識別(圖片+攝像頭)
一、識別影象中的人臉個數。註釋寫的很好(\(^o^)/恩) #!/practice/Study_Test python # -*- coding: utf-8 -*- # @Time : 2018/12/23 21:19 # @Author : yb.w # @File : ima
opencv 人臉識別 (一)訓練樣本的處理
本文實現基於eigenface的人臉檢測與識別。給定一個影象資料庫,進行以下步驟:進行人臉檢測,將檢測出的人臉存入資料庫2對資料庫2進行人臉建模在測試集上進行recognition本篇實現第一步:進行人臉檢測,將檢測出的人臉存入資料庫2環境:vs2010+opencv 2.4
基於Qt的OpenCV人臉識別(四)
上篇進行了人臉的檢測,現在進行人臉的識別,採用OpenCV的face320模組裡的EigenFace演算法。在進行檢測之間,得製作被檢測人的人臉資料,這是捕獲按鈕就起到了作用,進行人臉資料的拍攝, //拍攝人臉 void Widget::on_btn_cap_clicked() {
基於Qt的OpenCV人臉識別(三)
上篇完成了Qt呼叫OpenCV的攝像頭,接下來要做的是基於拍攝到的圖片進行人臉檢測。使用OpenCV的級聯檢測器HAAR人臉檢測,首先在Qt的初始化函式中載入人臉模型: //初始化 void Widget::Init() { //載入人臉檢測模型 if(!faceDetect
openCV人臉識別,yuv420sp格式轉BGR傳入Mat矩陣
繼續安卓人臉識別,為了達到更好的效果,程式碼需要不斷優化。 前兩篇分別實現了jpg格式和bitmap格式的圖片資料傳入Mat
opencv人臉識別,jni中Bitmap轉BGR格式
續上篇,繼續人臉識別。 上篇雖然成功把Bitmap轉為了BGRA的格式傳到Mat矩陣中,但是在做人臉識別的過程中,需要的影象
CNN卷積神經網路應用於人臉識別(詳細流程+程式碼實現)和相應的超引數解釋
DeepLearning tutorial(5)CNN卷積神經網路應用於人臉識別(詳細流程+程式碼實現) @author:wepon 本文主要講解將CNN應用於人臉識別的流程,程式基於Python+numpy+theano+PIL開發,採用類似LeNet5的
OpenCV人臉識別實驗(一)——特徵臉(Eigenfaces)及其重構的原始碼詳解
1、介紹Introduction 從OpenCV2.4開始,加入了新的類FaceRecognizer,我們可以使用它便捷地進行人臉識別實驗。 本實驗採用的程式設計環境為:opencv3.0+VS2013。人臉識別的實驗已經轉移到face模組中, face模組在我這裡的路徑為
python-opencv-人臉識別實現 從圖片中扣人臉
最近專案需要,從百度,bing 爬取圖片,並對圖片中人臉進行扣取,然後扣取的人臉作為機器學習的樣本資料進行人工標註,圖片爬取了人工篩選比較耗時,於是查詢資料發現opencv庫中人臉識別可以實現該需求,識別率還可以。 #-*-coding:utf8-*- import os
OpenCV——人臉識別模型訓練(2)
在之前的部落格OpenCV——人臉識別資料處理(1)之中,已經下載了ORL人臉資料庫,並且為了識別自己的人臉寫了一個拍照程式自拍。之後對拍的照片進行人臉識別和提取,最後我們得到了一個包含自己的人臉照片的資料夾s41。在部落格的最後我們提到了一個非常重要的檔案——
openCV人臉識別三種演算法實現(官網翻譯)
怎樣使用OpenCV進行人臉識別 友情提示,要看懂程式碼前,你得先知道OpenCV的安裝和配置,會用C++,用過一些OpenCV函式。基本的影象處理和矩陣知識也是需要的。[gm:我是簫鳴的註釋]由於我僅僅是翻譯,對於六級才過的我,肯定有一些翻譯錯的或