1. 程式人生 > >圖像處理項目——人臉檢測—識別

圖像處理項目——人臉檢測—識別

圖片 ces 大小 改變 color 添加 處理 video put

人臉識別

*開發環境為visual studio2010
*使用的是opencv中的Haart特征分類器,harr Cascades
*識別對象為視頻中的人臉
一:主要步驟

1.打開攝像頭。
2.加載人臉檢測器,加載人臉模型。
3.待識別圖像預處理 resize cvtColor 等,人臉檢測
4.把檢測到的人臉與人臉模型裏面的對比,找出這是誰的臉。
5.如果人臉是自己拍照的人臉,顯示自己的名字“face_zsc”。

二:代碼
 1 #include<opencv2\opencv.hpp>  
 2 #include<opencv2\face.hpp>
 3
#include<opencv2\core\core.hpp> 4 #include<opencv2\face\facerec.hpp> 5 #include <fstream> 6 #include <sstream> 7 #include<math.h> 8 9 using namespace std; 10 using namespace cv; 11 using namespace cv::face; 12 13 RNG g_rng(12345); 14 Ptr<FaceRecognizer> model;
15 //識別圖片 16 int Predict(Mat src_image) 17 { 18 Mat face_test; 19 int predict = 0; 20 //截取的ROI人臉尺寸調整 21 if (src_image.rows >= 120) 22 { 23 //改變圖像大小,使用雙線性差值 24 resize(src_image, face_test, Size(92, 112)); 25 26 } 27 //判斷是否正確檢測ROI 28 if (!face_test.empty())
29 { 30 31 predict = model->predict(face_test); 32 } 33 cout << predict << endl; 34 return predict; 35 } 36 int main() 37 { 38 VideoCapture cap(0); 39 if (!cap.isOpened()) 40 { 41 return -1; 42 } 43 Mat frame; 44 Mat gray; 45 //這個分類器是人臉檢測所用 46 CascadeClassifier cascade; 47 bool stop = false; 48 //訓練好的文件名稱,放置在可執行文件同目錄下 49 cascade.load("haarcascade_frontalface_alt2.xml"); 50 51 model = FisherFaceRecognizer::create(); 52 //1.加載訓練好的分類器 53 model->read("MyFaceModel.xml"); 54 //3.利用攝像頭采集人臉並識別 55 while (1) 56 { 57 cap >> frame; 58 vector<Rect> faces(0); //存放人臉的向量容器 59 cvtColor(frame, gray, CV_RGB2GRAY);//灰度化 60 equalizeHist(gray, gray); //直方圖均值化 61 //檢測人臉 62 cascade.detectMultiScale(gray, faces,1.1, 4, 0 63 | CV_HAAR_DO_ROUGH_SEARCH, 64 Size(30, 30), Size(500, 500)); 65 Mat* pImage_roi = new Mat[faces.size()]; 66 Mat face; 67 Point text_lb;//文本寫在的位置 68 //框出人臉 69 string str; 70 for (int i = 0; i < faces.size(); i++) 71 { 72 pImage_roi[i] = gray(faces[i]); //將所有的臉部保存起來 73 text_lb = Point(faces[i].x, faces[i].y); 74 if (pImage_roi[i].empty()) 75 continue; 76 switch (Predict(pImage_roi[i])) //對每張臉都識別 77 { 78 case 22:str = "face_zsc"; break; 79 default: str = "Error"; break; 80 } 81 Scalar color = Scalar(g_rng.uniform(0, 255), g_rng.uniform(0, 255), g_rng.uniform(0, 255));//所取的顏色任意值 82 rectangle(frame, Point(faces[i].x, faces[i].y), Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height), color, 1, 8);//放入緩存 83 putText(frame, str, text_lb, FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255));//添加文字 84 } 85 86 delete[]pImage_roi; 87 imshow("face", frame); 88 waitKey(200); 89 } 90 91 return 0; 92 } 93

三:識別結果

檢測出人臉,並識別出是誰的人臉

技術分享圖片

圖像處理項目——人臉檢測—識別