• 图像处理项目——人脸检测—识别


    人脸识别

    *开发环境为visual studio2010
    *使用的是opencv中的Haart特征分类器,harr Cascades
    *识别对象为视频中的人脸
     
    一:主要步骤

    1.打开摄像头。
    2.加载人脸检测器,加载人脸模型。
    3.待识别图像预处理 resize cvtColor 等,人脸检测
    4.把检测到的人脸与人脸模型里面的对比,找出这是谁的脸。
    5.如果人脸是自己拍照的人脸,显示自己的名字“face_zsc”。

    二:代码
     1 #include<opencv2opencv.hpp>  
     2 #include<opencv2face.hpp>
     3 #include<opencv2corecore.hpp>
     4 #include<opencv2facefacerec.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  

    三:识别结果

    检测出人脸,并识别出是谁的人脸

    萍水相逢逢萍水,浮萍之水水浮萍!
  • 相关阅读:
    Eclipse 安装插件
    java 之 Spring 框架(Java之负基础实战)
    tomcat 修改网站路径(Java之负基础实战)
    tomcat 修改编码(Java之负基础实战)
    tomcat 修改端口(Java之负基础实战)
    linux vi 操作
    解压文件--linux
    smarty用法
    thinkphp调试手段
    kindeditor上传文件的使用
  • 原文地址:https://www.cnblogs.com/AIBigTruth/p/10550450.html
Copyright © 2020-2023  润新知