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


人臉識別

*開發環境為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  

三:識別結果

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM