当前位置:   article > 正文

基于OpenCV的人脸识别考勤机

基于opencv的人脸识别考勤机

目录

一、什么是OpenCV--官网

二、OpenCV库的应用

三、 环境准备

四、OpenCV库安装

五、帮助文档

六、OpenCV--图像采集

 七、人脸检测

 八、百度云平台接入

九、数据处理-考勤信息记录


一、什么是OpenCV--官网

        OpenCV是一个开源的计算机视觉和机器学习软件库,它可以广泛的在Windos、Linux、Mac等多种操作系统下自由使用,是一种高拓展性、轻量级的库。OpenCV基于C语言和少量C++类函数,并且提供了Matlab、Python等丰富的接口。

二、OpenCV库的应用

        

自从1999年1月第一个OpenCV的beta版本发布开始,它就被广泛应用于许多领域,例如卫星地图和电子地图的拼接,扫描图像、医学影像分析、安全和入侵系统分析等多个方面,同时在质量检测系统、摄像头标定、无人驾驶方面,也大量的使用了OpenCV库。

        OpenCV提供的视觉处理算法非常丰富,由于它部分以高效的C语言编写,加上其开源的特性,处理得当,不需要添加新的外部支持也可以完整地编译链接生成执行程序,所以很多研究者用它来做算法的移植。

OpenCV可用于解决如下领域的问题:

  • 人机交互
  • 物体识别
  • 图像分区
  • 人脸识别
  • 动作识别
  • 运动跟踪
  • 机器人
  • 无人驾驶

三、 环境准备

1、 系统信息

2、发布版本信息

四、OpenCV库安装

//这里使用在线安装的方式安装(确保系统可以正常访问internet)

sudo apt-get install libopencv-dev
查看安装状态:dpkg -s libopencv-dev

五、帮助文档

这里对应自己安装的版本,就去下载那个版本的压缩包,解压之后有个index.html的文件打开查看手册

六、OpenCV--图像采集

1、将摄像头添加到ubuntu系统中,在/dev目录下查看


2、程序测试

  1. #include <iostream>
  2. #include <opencv2/opencv.hpp>
  3. using namespace cv;
  4. using namespace std;
  5. int main()
  6. {
  7. VideoCapture cap(0); // 默认方式打开摄像头0
  8. if (!cap.isOpened()) {
  9. cout << "ERROR! Camera open failed!\n";
  10. return -1;
  11. }
  12. cout << "Camera open success!" << endl;
  13. return 0;
  14. }


3、使用摄像头拍照(这里使用USB摄像头)

  1. Mat ColorImage;
  2. cap >> ColorImage; // 拍照
  3. imshow("vodeo", ColorImage); // 显示照片
  4. waitKey(3000);

 七、人脸检测

1、图像处理
  1. 灰度处理:提高识别准确度与处理速度
  2. Mat GrayImage; // 用与存放处理后的照片
  3. cvtColor(ColorImage, GrayImage, COLOR_BGR2GRAY);

 
  1. 均衡化处理:提高对比度
  2. Mat ContrastImage;
  3. equalizeHist(GrayImage, ContrastImage);


2、人脸检测
  1. // 实例化级联分类器,添加模型(通过训练具有一定能力的模型):
  2. CascadeClassifier Classifier("/usr/share/opencv4/haarcascades/haarcascade_frontalface_alt2.xml");
  3. // 检测人脸,并使用矩形框起来
  4. vector<Rect> AllFace; // 用来存放圈人脸的框
  5. Classifier.detectMultiScale(ContrastImage, AllFace); // 使用矩形将人脸圈起来
  6. rectangle(GrayImage, AllFace[0], Scalar(255,0,0)); // 在图片上显示矩形

3、人脸截取(用来做对比)
  1. Mat MatFace;
  2. vector<uchar> jpgFace;
  3. MatFace = GrayImage(AllFace[0]);
  4. imencode(".jpg", MatFace, jpgFace); // 将图像转化成jpg格式

 八、百度云平台接入

1、人脸库的创建与管理

        这里使用百度云的人脸搜索功能,点击立即使用,创建应用

先新建组,在组中添加人脸信息(这里自己添加)

 2、人脸识别SDK环境搭建

        ①、这里使用官方提供的技术手册进行搭建

        ②、SDK下载解压并上传到ubuntu系统

        ③、安装依赖库,添加第三方链接库       

               安装curl库:sudo apt install libcurl4-openssl-dev

               安装openssl库:sudo apt install openssl

               安装jsoncpp库:sudo apt install libjsoncpp-dev

               安装ssl库:sudo apt install libssl-dev

               查看安装状态:dpkg -s xxxxxxx(库)

        ④、在源码中添加下面两行,对应手册中第五条

               #include "face.h"

               using namespace aip;

        ⑤、链接库进行编译

               将自己写的代码mv到SDK库中
 

  1. 编译:
  2. g++ main.cpp -I /usr/include/opencv4 -lopencv_core -lopencv_highgui -lopencv_videoio -lopencv_imgproc -lopencv_objdetect -lopencv_imgcodecs -std=c++11 -lcurl -lcrypto -ljsoncpp

这里编译时出现错误:No such file or directory

修改对应文件中引入头文件的路径:jsoncpp/json/json.h
 

  3、云平台接入----新建client:这里参考手册中的示例代码

根据手册将下面代码添加到自己写的代码中

  1. 先将我们截取的jpg格式的图片转化成base64格式,用于数据对比
  2. string base64Face; // 存放base64数据格式图片
  3. Json::Value result; //用于存放识别结果
  4. base64Face = base64_encode((char *)jpgFace.data(), jpgFace.size());
  5. result = client.search(base64Face, "BASE64", "shibie", aip::null);
  6. cout << result << endl;

九、数据处理-考勤信息记录

1、对result中数据进行处理:

  1. if(!result["result"].isNull()) //判断result结果是否为空
  2. {
  3. if(result["result"]["user_list"][0]["score"].asInt() > 80) // 判断相似度
  4. {
  5. cout << result["result"]["user_list"][0]["user_id"] << endl; // 打印id
  6. }
  7. }

2、获取系统时间

  1. time_t sec;
  2. sec = time(NULL);
  3. cout << ctime(&sec) <<endl;

3、将id与时间写在图片上

  1. putText(ColorImage, result["result"]["user_list"][0]["user_id"].asString(),Point(0,50),FONT_HERSHEY_SIMPLEX, 1, Scalar(255,0,0));
  2. putText(ColorImage, ctime(&sec), Point(0,100), FONT_HERSHEY_SIMPLEX, 1, Scalar(255,0,0));

4、将识别信息存储到文件中

5、查看日志信息

到这里考勤机功能基本实现,可以在打卡日志中查看记录。

针对百度云平台接入系统后比较卡顿,这里可以考虑用多线程的方式对数据进行处理。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/422925?site
推荐阅读
相关标签
  

闽ICP备14008679号