zoukankan      html  css  js  c++  java
  • 图像处理项目——人脸检测—识别

    人脸识别

    *开发环境为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  

    三:识别结果

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

    萍水相逢逢萍水,浮萍之水水浮萍!
  • 相关阅读:
    std thread
    windows更新包发布地址
    How to set up logging level for Spark application in IntelliJ IDEA?
    spark 错误 How to set heap size in spark within the Eclipse environment?
    hadoop 常用命令
    windows 安装hadoop 3.2.1
    windows JAVA_HOME 路径有空格,执行软连接
    day01MyBatisPlus条件构造器(04)
    day01MyBatisPlus的CRUD 接口(03)
    day01MyBatisPlus入门(02)
  • 原文地址:https://www.cnblogs.com/AIBigTruth/p/10550450.html
Copyright © 2011-2022 走看看