OpenCV+Ubuntu+QT实现人脸检测 识别(考勤管理)_ubuntu和qt opencv

flip(image, flippedImage, -1): 水平和垂直同时翻转

flip 函数有三个参数,分别是:

**image:**输入图像,即需要进行翻转的原始图像。

**flippedImage:**输出图像,即翻转后的图像将存储在这里。

这里使用 flip(frame, frame, 1);即可改变原图形


## 3. 人脸检测


### 1.图像处理


1. 将摄像头画面由rgb(彩色)转换为gray(灰度图)



#include <opencv2/imgproc.hpp> //所需头文件
#include <opencv2/objdetect.hpp>
cvtColor(frame,Grayimage,CV_BGR2GRAY);//将彩色图转换从灰度图 其中frame是初始Mat容器所存放的画面流,
                                      //Grayimage是转换后的图像 CV_BGR2GRAY是参数

2. 图形均衡化(调整亮度,对比度)



equalizeHist(InputArray src,OutputArray dst); //函数参数说明
equalizeHist(Grayimage,Grayimage); //进行均衡化处理,将处理后的图形进行覆盖(节约内存)


### 2.人脸轮廓检测


1. 加载级联分类器(CascadeClassifier)(关于级联分类器相关[可参考]( ))



Ubuntu:/usr/share/opencv/haarcascades$ ls
haarcascade_eye_tree_eyeglasses.xml
haarcascade_eye.xml
haarcascade_frontalcatface_extended.xml
haarcascade_frontalcatface.xml
haarcascade_frontalface_alt2.xml
haarcascade_frontalface_alt_tree.xml
haarcascade_frontalface_alt.xml
haarcascade_frontalface_default.xml
haarcascade_fullbody.xml
haarcascade_lefteye_2splits.xml
haarcascade_licence_plate_rus_16stages.xml
haarcascade_lowerbody.xml
haarcascade_profileface.xml
haarcascade_righteye_2splits.xml
haarcascade_russian_plate_number.xml
haarcascade_smile.xml
haarcascade_upperbody.xml

//这里我们使用OpenCV训练好的级联分类器进行人脸轮廓检测,可在构造函数中声明即可
classifier.load(“/usr/share/opencv/haarcascades/haarcascade_frontalface_alt.xml”);

if (classifier.empty()) {
    qDebug() << "错误:无法加载级联分类器文件";
}

/*
detectMultiScale(InputArray image,vector & objects) 检测函数说明
rectangle (InputOutputArray img,Point pt1,Point pt2,constScalar& color) 将检测到的人脸矩形框绘制在图形上的函数说明
*/

//具体使用:
vector Allface; //矩形存放容器
//这里我们使用OpenCV库中已经训练好的级联分类器进行人脸轮廓的识别
classifier.detectMultiScale(Grayimage,Allface); //检测人脸矩形存放到vector容器中
if(Allface.size()){ //是否存在人脸
rectangle(Grayimage,Allface[0],Scalar(255,0,0)); //Allce中存放多个矩形(多张人脸,按照数组形式排列 Scalar改变颜色(rgb)
}



> 
> 上述仅为关键代码  
>  ![执行成功效果](https://img-blog.csdnimg.cn/direct/5dc5249c9d0041dea635b97739ff7de8.png)
> 
> 
> 


2. 将检测的人脸矩形框保存



//先创建一个Mat容器用于存放截取到的矩形人脸框
Mat Matface; //存放检测的人脸矩形框
vector JpgFace; //存放jpg格式的图形

if(Allface.size()){ //是否存在人脸
rectangle(Grayimage,Allface[0],Scalar(255,0,0)); //Allce中存放多个矩形(多张人脸,按照数组形式排列 Scalar改变颜色(rgb)
Matface = Grayimage(Allface[0]); //将截取的人脸存放到Matface中
imencode(“.jpg”,Matface,JpgFace); //将Matface中的图片转化成jpg格式
}

//imencode函数说明:
imencode(const String &ext,InputArray img,vector &buf)


### 3.百度智能云平台注册


1. 注册百度智能云平台  
 进入官网>产品>人脸识别>人脸搜索 [官网链接]( )  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b1714013c31c46479bbdd73445407247.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/414fd681ea8f43b8a97a80e3ac75f07b.png)



> 
> 立即创建即可
> 
> 
> 


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/dc3b6912f45a44c38bb67dfbcb739a69.png)



> 
> 即可在应用列表查看到自己的接口信息
> 
> 
> 


2. 创建人脸库  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/207aa8e622da49c7875e7a9c4cd7716b.png)



> 
> 选择查看人脸库即可自定义添加组和人员,上传清晰人脸照即可
> 
> 
> 


### 4.SDK环境搭建


1. 技术文档 > SDK文档 > C++文档 > 按照流程下载人脸识别SDK到Ubuntu中(具体流程可[参考文档]( ))  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/11c08ad1034d421ab435fea6b8eb515e.png)
2. 安装依赖库libcurl(需要支持https)openssl(加密) jsoncpp



sudo apt-get install libcurl4-openssl-dev
sudo apt-get install openssl
sudo apt-get install libjsoncpp-dev


3. 将下载好的SDK解压,并将其base文件夹以及face.h(人脸检测只需这两个文件)文件复制到你的项目中[参考文档]( )  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/30a5faa9e2344248bbb027a490792975.png)



> 
> 这里编译可能会出现报错找不到json和openssl路径,点击错误代码行,将其改为  
>  `#include <jsoncpp/json/json.h>`,  
>  `#include "jsoncpp/json/json.h"`  
>  (即改变路径,在前面加上jsoncpp)  
>  并安装libssl库  
>  sudo apt-get install libssl-dev
> 
> 
> 



LIBS += -lcurl -lcrypto -ljsoncpp //在pro文件中加入


并在程序中引入头文件和命名空间



#include <face.h>
using namespace aip;


### 5.平台接入


1. 建立交互客户端client



//头文件中先声明client指针类型对象,再在构造函数中实例化赋值(使用完后需要用delete client进行销毁)
//widget.h
Face *client;            //创建客户端对象

//widget.cpp
//建立百度交互客户端client
// 设置APPID/AK/SK
string app_id = "你自己的";
string api_key = "你自己的";
string secret_key = "你自己的";

client = new Face(app_id,api_key,secret_key);

2. 格式转换



> 
> 梳理一下我们的摄像头捕捉流程
> 
> 
> 


frame(初始的彩色视频帧流) > Grayimage(灰度化)> Matface(存放截取的人脸矩形)> JpgFace(人脸矩形图片转化为JPG格式)> Base64Fce(转化为base64格式-百度人脸识别要求的格式)>>>>



//widget.h
//先在头文件的private中声明一个容器存放base64格式的图片
string Base64Face; //用于存放转换成base64格式的照片

//widget.cpp
Base64Face = base64_encode((char *)JpgFace.data(),JpgFace.size()); //将jpg格式的图片转化为base64格式的


3. 接收检测结果



//widget.h
Json::Value result; //用于接受检测结果的容器

// 带参数调用人脸搜索函数说明
//result = client.face_search_v3(image, image_type, group_id_list, options);

result = client->face_search_v3(Base64Face,“BASE64”,“student”,Json::nullValue);
cout << result <<endl; //打印测试结果



> 
> 这里如果报错multiple definition (多重定义):可以将出现多重定义的函数定义为static(静态函数)
> 
> 
> 


### 6.验证检测结果


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e2fb686bd310413d9360a0b4c15527a2.png)



> 
> 可以看到控制台已经输出JSON格式的数据,并且检测成功
> 
> 
> 


### 7.解析数据


1. json解析



//result返回json数据格式
{
“cached” : 0,
“error_code” : 0,
“error_msg” : “SUCCESS”,
“log_id” : 2660475389,
“result” :
{
“face_token” : “952d7830427201926483ab1f02f015b8”,
“user_list” :
[
{
“group_id” : “student”,
“score” : 80.822387695312003,
“user_id” : “yyqx”,
“user_info” : “”
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

img

img

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)

img

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

089710)]

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)

img

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

更多资料点击此处获qu!!

  • 30
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值