完整人脸识别系统(源码+教程+环境):

开源毕业设计:基于嵌入式ARM-Linux的应用OpenCV和QT实现的人脸识别系统(源码+论文)

完全毕设教程:Linux上Opencv与Qt实现的人脸识别的考勤点名/门禁系统(PC与嵌入式ARM版本)

人脸识别之第一步,人脸库的建立。

在官方文档中,提供一个人脸库的下载,可以下载回来看看人家的是什么格式的。

我们选择AT&T人脸库下载的下载:http://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html

AT&T Facedatabase又称ORL人脸数据库,40个人,每人10张照片。照片在不同时间、不同光照、不同表情(睁眼闭眼、笑或者不笑)、不同人脸细节(戴眼镜或者不戴眼镜)下采集。所有的图像都在一个黑暗均匀的背景下采集的,正面竖直人脸(有些有有轻微旋转)。

下载回来的是压缩包,先解压得到orl_faces文件夹,文件夹下有40个文件夹,命名从“s1”~"s40",每个文件夹放的是同一人的照片,里面有10张人脸照。

但都是 .pgm 格式的 92 x 112 图片,在windows下打不开,可在linux下打开,如下:

看一遍官方提供的人脸库,大概知道如何存放、处理图片。后面参考官方方法建立自己的图片即可。

废话少说,马上行动。

一、实现步骤与方法

思路很清晰,如下:

1、打开摄像头,采集图像;

2、加载人脸分类器;

3、人脸检测,并框出人脸部分并显示图像;

4、在检测到人脸条件下,一键拍照;

5、对人脸部分,调整大小并写成指定目录下的图像文件;

二、实现代码

你可自己写代码实现这功能,亦可直接COPY代码来用,这只是辅助功能而已。

代码如下:

#include "opencv2/objdetect.hpp"
#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>
#include <stdio.h>using namespace cv;
using namespace std;int resize_save(Mat& faceIn, char *path, int FaceSeq);
int get_face(char *path);int main(int argc, char *argv[])
{if(argc != 2){printf("usage: %s <path>\n", argv[0]);return -1;}get_face(argv[1]);return 0;
}int get_face(char *path)
{CascadeClassifier face_cascade;  VideoCapture camera;char key = 0;Mat frame;int ret = 0;int faceNum = 1;vector<Rect> faces;  Mat img_gray;  Mat faceImg;camera.open(0);       // 打开摄像头if(!camera.isOpened()){cout << "open camera failed. " << endl;return -1;}cout << "open camera succeed. " << endl;// 加载人脸分类器ret = face_cascade.load("/root/library/opencv/opencv-3.2.0/data/haarcascades/haarcascade_frontalface_alt2.xml");if( !ret ){printf("load xml failed.\n");return -1;}cout << "load xml succeed. " << endl;while (1)  {camera >> frame;  if(frame.empty()){continue;}cvtColor(frame, img_gray, COLOR_BGR2GRAY);  equalizeHist(img_gray, img_gray);  // 检测目标face_cascade.detectMultiScale(img_gray, faces, 1.1, 3, 0, Size(50, 50)); for(size_t i =0; i<faces.size(); i++)  {/* 画矩形框出目标 */rectangle(frame, Point(faces[0].x, faces[0].y), Point(faces[0].x + faces[0].width, faces[0].y + faces[0].height), Scalar(0, 255, 0), 1, 8);    }imshow("camera", frame);  // 显示key = waitKey(1);   // 显示后要添加延时switch (key)  {case 'p':   // 按 P 一键拍脸// 只限定检测一个人脸if(faces.size() == 1){faceImg = frame(faces[0]);ret = resize_save(faceImg, path, faceNum);   // 调整大小及保存if(ret == 0){printf("resize_save success.\n");faceNum ++;}}break;   case 27:    // 按 Esc 键退出cout << "Esc..." << endl;return 0;default:  break;    }  }
}int resize_save(Mat& faceIn, char *path, int FaceSeq)
{string strName;Mat image;Mat faceOut;  int ret;if(faceIn.empty()){  printf("faceIn is empty.\n");return -1;  }  if (faceIn.cols > 100)  {  resize(faceIn, faceOut, Size(92, 112));        // 调整大小,这里选择与官方人脸库图片大小兼容strName = format("%s/%d.jpg", path, FaceSeq); // 先要创建文件夹ret = imwrite(strName, faceOut);  // 文件名后缀要正确 .jpg .bmp ...if(ret == false)    // 出现错误,请检测文件名后缀、文件路径是否存在{printf("imwrite failed!\n");printf("please check filename[%s] is legal ?!\n", strName.c_str());return -1;}imshow(strName, faceOut);  }  waitKey(20);  return 0;
}

操作说明:

编译成功后,执行可执行文件须提供参数,该参数为存放人脸图像的目录,且须为已有目录。

按“P”键一键拍照取脸保存,按“Esc”键退出。

若执行 imwrite() 函数失败时,请检查参数目录是否存在,要保存的文件名后缀是否合法。

此程序保存为 .jpg 格式,命名采用编号法由1递增。

三、运行示例

$ ./get_face abc

四、构建人脸库

按照以上步骤,可得到单个人的多张人脸照,人脸库由多个人(>=2)的人脸照组成,如下:

人脸库须大于或等于2人,这里暂收集5人照片。

参照官方人脸库,从“s1”~"s4"命名,每个文件夹放着同一个人的多张人脸照。

能力有限,欢迎指出不足,感激不尽!

人脸识别之第一步,人脸库的建立。

人脸识别之一图像采集及人脸库的建立相关推荐

  1. 人脸识别接口_DS-K5603-Z 海康威视人员通道人脸识别组件 1万人脸库 10.1英寸LCD触摸显示屏_DS-K5603-Z_DS-K5603-Z...

    DS-K5603-Z 海康威视人员通道人脸识别组件 英寸LCD触摸显示屏 支持10000人脸库 支持人脸识别.刷卡或相互组合的识别方式,1:1比对时间≤1S/人,1:N比对时间≤人 DS-K5603- ...

  2. dlib库包的介绍与使用,opencv+dlib检测人脸框、opencv+dlib进行人脸68关键点检测,opencv+dlib实现人脸识别,dlib进行人脸特征聚类、dlib视频目标跟踪

    文章目录: 1 dlib库介绍 2 dlib人脸检测:绘制出人脸检测框 2.1 dlib人脸检测源码 2.2 opencv + dlib 人脸检测 2.3 dlib人脸检测总结 3 dlib人脸关键点 ...

  3. 人脸识别(5)---人脸识别技术及应用概览

    人脸识别技术及应用概览 科技的发展正在加速改变我们的生活.以前,我们购物埋单时,收银员会问"现金还是刷卡",现在,这句话则变成了"微信还是支付宝?"以前,我们上 ...

  4. matlab人脸识别开题报告,基于人脸识别的出勤点名系统中特征提取算法研究开题报告...

    基于人脸识别的出勤点名系统中特征提取算法研究 一.本课题研究的目的,意义 人脸识别是一项既有科学研究价值,又有广泛应用前景的研究课题.国际上大量研究人员几十年的研究取得了丰硕的研究成果,自动人脸识别技 ...

  5. 人脸识别通过什么区分人脸和照片

    人脸识别技术,就是机器通过摄像头,获取的图像,并进行对人的识别,该技术主要应用于身份识别,如金融(目前银行已经实现了通过人脸识别进行取钱操作).手机锁.门禁和购物中的刷脸支付等等,人脸识别技术已经存在 ...

  6. 人脸识别智能服务器,智能化人脸识别服务器

    智能化人脸识别服务器,同时,在新基建的运维管理方面有了进一步的创新,通过自身的研发实现了对各基建网点的自动化全实时监测,及时发现故障并发出警示.自动处理故障网点.通知运维人员通过远程及时处理故障网点. ...

  7. 人脸识别(4)---人脸识别行业分析报告

    人脸识别行业分析报告 图像识别主要用到了两个第三方的框架:OpenCV和TesseractOCR,OpenCV用来做图像处理,定位到身份证号码的区域,TesseractOCR则是对定位到的区域内的内容 ...

  8. 计算机人脸识别算哪个专业,人脸识别属于计算机什么领域(图文)

    [导读]人脸识别属于计算机什么领域,下面就是191路由网整理的网络知识百科,来看看吧! 大家好,我是191路由器网小编,上述问题将由我为大家讲解. 人脸识别属于热门的计算机技术研究领域.人脸识别属于计 ...

  9. php人脸识别功能,什么叫人脸识别功能

    人脸识别特指利用分析比较人脸视觉特征信息进行身份鉴别的计算机技术.人脸识别是一项热门的计算机技术研究领域,它属于生物特征识别技术,是对生物体(一般特指人)本身的生物特征来区分生物体个体. 广义的人脸识 ...

  10. AI人工智能分析-人脸识别和分析(人脸检测跟踪、获取特征长度、提取用于人脸特征、比较相似度)

             AI人工智能分析-人脸识别和分析(人脸检测跟踪.获取特征长度.提取用于人脸特征.比较相似度) 人工智能(Artificial Intelligence),英文缩写为AI.它是研究.开 ...

最新文章

  1. js/jq基础(日常整理记录)-2-一个简单的js方法实现集合的非引用拷贝
  2. 如何通过Rultor将Maven工件部署到CloudRepo
  3. Spring Boot 最佳实践(五)Spring Data JPA 操作 MySQL 8
  4. excel导出多重表头utils_Java中注解学习系列教程-4 使用自定义注解实现excel导出...
  5. 打印出来只有a4纸一半 预览是正常的_还需要去打印店?能随身使用的便携打印机:汉印MT800评测...
  6. 《Python数据可视化编程实战》—— 1.3 安装virtualenv和virtualenvwrapper
  7. 数字电子技术基础第三版杨志忠_阎石《数字电子技术基础》(第6版)笔记和课后习题(含考研真题)详解复习笔记资料...
  8. 网易考拉向欧洲市场投入220亿,能掀起多大波澜?
  9. VHDL——74LS138译码器
  10. Head First 深入浅出系列 电子书
  11. 电荷泵负电源芯片SGM3207
  12. scrapy爬虫命令
  13. latex中页眉怎么去掉_latex 页眉页脚设置
  14. 游戏建模资料大放送,3DMX+MAYA+ZBrush集教程,20G教学视频
  15. 无线网sdn服务器,云服务器:采用SDN网络有哪些优势?
  16. 【java】新建项目
  17. 视频变声用的什么软件?来看看今天的分享
  18. 企业考勤,用开源协同办公OA系统来管理!
  19. GitHub 热点速览 Vol.16:化身蒙娜丽莎和乔布斯对话
  20. 美国撞击小行星的宇宙飞船成功改变行星轨道

热门文章

  1. idea+Springboot在控制台打印sql语句
  2. ubuntu 发包和抓包工具的使用
  3. LINGO编程简介与实例
  4. UNIQUE constraint failedの原因
  5. VC++ 各个版本(2005 2008 2010 2012 2013 2015 2017)的运行库下载
  6. Vue+flvjs播放flv文件
  7. unity下载及安装
  8. 计算机组成与体系结构(软件设计师备考笔记)
  9. 计算机组成与体系结构——指令的基本概念——2020.11.19
  10. Java课程设计-校园卡管理系统