array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 图像处理项目——人脸检测—识别 - 每日一醒 - 爱码网
AIBigTruth

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

人脸识别

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

三:识别结果

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

 

分类:

技术点:

相关文章: