智能人脸识别系统
人脸识别系统#ifndef WIDGET_H #define WIDGET_H #include QWidget #include opencv2/opencv.hpp #include iostream #include math.h #includeopencv2/face.hpp #include vector #include map #include QMessageBox #include QDebug #include QFile #include QTextStream #include QDateTime #include QTimerEvent #includeQtSerialPort/QtSerialPort #includeQtSerialPort/QSerialPortInfo using namespace cv; using namespace cv::face; using namespace std; QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent nullptr); ~Widget(); private slots: void on_opencamerabtn_clicked(); void timerEvent(QTimerEvent *event)override; void on_cameraclosebtn_clicked(); void on_faceinbtn_clicked(); void on_facerecbtn_clicked(); private: Ui::Widget *ui; Mat src; Mat grey; Mat dest; Mat rgb;//存放转变后的RGB图 VideoCapture video; CascadeClassifier c; vectorRect myface; //人脸矩形容器 int camera_timer_d; //关于ui界面展示图片的定时器 PtrLBPHFaceRecognizer recognizer;//人脸识别器指针 vectorMat train_faces;//人脸训练容器 vectorint train_labs;//人脸编号 容器 int count0;//人脸识别次数 int study_timer_id;//人脸录入定时器 int check_timer_id; //定义一个人脸识别定时器 }; #endif // WIDGET_H#include widget.h #include ui_widget.h Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui-setupUi(this); if(!video.open(0)) { QMessageBox::information(this,提示,摄像头打开失败); return; } if(!c.load(D:\\opencv\\resources\\haarcascade_frontalface_alt.xml)) { QMessageBox::information(this,提示,级联分类器下载失败); return; } //给recognizer实意化类对象 QFile file(D:\\opencv\\resources\\myface.xml); if(file.exists()) { recognizer FaceRecognizer::loadLBPHFaceRecognizer(D:\\opencv\\resources\\myface.xml); } else { recognizer LBPHFaceRecognizer::create(); } recognizer-setThreshold(70);//设置模型的阈值 } Widget::~Widget() { delete ui; } void Widget::on_opencamerabtn_clicked() { camera_timer_d startTimer(20); ui-faceinbtn-setEnabled(true); ui-facerecbtn-setEnabled(true); } void Widget::timerEvent(QTimerEvent *event) { if(event-timerId()camera_timer_d) { // static int num; // ui-cameralab-setNum(num); // if(!video.open(0)) // { // QMessageBox::information(this,提示,摄像头打开失败); // return; // } if(!video.read(src)) { QMessageBox::information(this,提示,图像读取错误); return; } flip(src,src,1);//图像翻转 cvtColor(src,grey,CV_BGR2GRAY);//灰度图 equalizeHist(grey,dest); c.detectMultiScale(dest,myface); for(uint i0;imyface.size();i)//将每张图片 { rectangle(src,myface[i],Scalar(0,255,0)); } // imshow(test,src); //将图像调整大小 cvtColor(src,rgb,CV_BGR2RGB);//Mat类的是BGR图像转成RGB cv::resize(src,rgb,Size(300,300)); //将Mat图像转换为Qt能够识别的图像 QImage imageQImage(rgb.data,rgb.cols,rgb.rows,rgb.cols*rgb.channels(),QImage::Format_RGB888); //将图像展示到UI界面上 ui-cameralab-setPixmap(QPixmap::fromImage(image)); } //判断是否是人链录入定时器是否到位 if(event-timerId() study_timer_id) { qDebug() 人脸录入中请稍后; //处理人脸录入 //用于存储人脸区域图像 Mat face; face src(myface[0]); //将框中人脸截取 //将图像重新设置大小以便识别与录入图片大小一样 cv::resize(face,face,Size(100,100)); cvtColor(face,face,CV_BGRA2GRAY);//灰度图 equalizeHist(face,face);//均衡化处理 //将该图像放入到学习容器中 train_faces.push_back((face)); train_labs.push_back((1)); count; if(count30) { //使用容器中的数据更新模型 recognizer-update(train_faces,train_labs); //将模型保存到本地磁盘 recognizer-save(D:\\opencv\\resources\\myface.xml); //处理后续操作 count0; //便于下次人脸录入使用 //清空容器 train_faces.clear(); train_labs.clear(); ui-facerecbtn-setEnabled(true); ui-faceinbtn-setEnabled(true); killTimer(study_timer_id); QMessageBox::information(this,提示,人脸录入成功); //关闭定时器 } } //判断是否是人链录入定时器是否到位 if(event-timerId() check_timer_id) { //判断图像上是否有矩形框 // if(myface.empty() || recognizer.empty()) // { // return; // } //从摄像头中获取人脸检测矩形区域图像 Mat face src(myface[0]); //重新获取设置大小 cv::resize(face,face,Size(100,100)); //灰度处理 cvtColor(face,face,CV_BGR2GRAY); //均衡化处理 equalizeHist(face,face); //定义接受识别后接收结果的变量 int lab -1; double conf 0; recognizer-predict(face,lab,conf); //参数一 预测图像 //参数二 返回的图像编号 //参数三 预测可信度 qDebug() lab conf; //判断人脸预测后的结果进而执行相关逻辑 if(conf 100 lab ! -1) { // qDebug() lab conf; QMessageBox::information(this,提示,欢迎回来); //后续操作 killTimer(check_timer_id);//关闭定时器 //将两个按钮设置可用状态 ui-faceinbtn-setEnabled(true); ui-facerecbtn-setEnabled(true); ui-functionbtn-setEnabled(true); } } } void Widget::on_cameraclosebtn_clicked() { killTimer(camera_timer_d); ui-cameralab-clear(); } //录入人脸按钮对应的槽函数 void Widget::on_faceinbtn_clicked() { study_timer_id startTimer(50); ui-faceinbtn-setEnabled(false); ui-facerecbtn-setEnabled(false); } void Widget::on_facerecbtn_clicked() { //将两个按钮设置成不可用状态 ui-faceinbtn-setEnabled(false); ui-faceinbtn-setEnabled(false); check_timer_idstartTimer(30); }

相关新闻

MZmine 3:开源质谱数据分析平台完全指南

MZmine 3:开源质谱数据分析平台完全指南

MZmine 3:开源质谱数据分析平台完全指南 【免费下载链接】mzmine3 mzmine source code repository 项目地址: https://gitcode.com/gh_mirrors/mz/mzmine3 MZmine 3是一款功能全面的免费开源质谱数据分析软件,专为代谢组学、脂质组学和蛋白质组学…

2026/7/10 13:57:32阅读更多 →
SimpleITK的部分介绍及使用代码(python)

SimpleITK的部分介绍及使用代码(python)

SimpleITK的部分介绍及使用代码 1.简单介绍 SimplelTK是在Insight Toolkit(ITK)的基础上构建的简化工具,常用于处理医学图像。它支持8种编程语言,包括C、Python、R、Java、C#、Lua、 Ruby和TCL。SimplelTK可以很便捷地读取医学图像的格式,如二…

2026/7/10 13:57:32阅读更多 →
OpenRouter多模态推理成本优化:图像细节参数配置指南

OpenRouter多模态推理成本优化:图像细节参数配置指南

多模态大模型在处理图像时,如果输入图像的细节参数设置不当,可能导致推理成本显著增加。OpenRouter 这类平台允许开发者通过调整图像细节参数来控制模型对视觉信息的处理深度,从而在保证效果的同时优化推理开销。实际项目中,如果忽…

2026/7/10 13:57:32阅读更多 →
3小时深度体验:如何构建你的专属AI对话系统?

3小时深度体验:如何构建你的专属AI对话系统?

3小时深度体验:如何构建你的专属AI对话系统? 【免费下载链接】LibreChat Enhanced ChatGPT Clone: Features Agents, MCP, Skills, DeepSeek, Anthropic, AWS, OpenAI, Responses API, Azure, Groq, o1, GPT-5, Mistral, OpenRouter, Vertex AI, Gemini,…

2026/7/10 15:02:41阅读更多 →
WechatDecrypt:快速解锁你的微信聊天记录,重新掌控数字记忆

WechatDecrypt:快速解锁你的微信聊天记录,重新掌控数字记忆

WechatDecrypt:快速解锁你的微信聊天记录,重新掌控数字记忆 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 你是否曾经因为微信聊天记录无法备份而烦恼?那些珍贵的对话…

2026/7/10 15:02:41阅读更多 →
AI写歌用什么App好?2026国产商用软件推荐测评

AI写歌用什么App好?2026国产商用软件推荐测评

很多人刷到短视频里的原创BGM、朋友发的AI写的歌,都会好奇:现在AI写歌到底用什么App好?尤其是普通用户,既想操作简单、不用懂乐理,又想歌的质量过关、最好能商用发平台,还要合规安全不踩坑。 我们花了一周时…

2026/7/10 15:02:41阅读更多 →
RIME for macOS 深度技术解析:从架构设计到高级定制化实践

RIME for macOS 深度技术解析:从架构设计到高级定制化实践

RIME for macOS 深度技术解析:从架构设计到高级定制化实践 【免费下载链接】squirrel 【鼠鬚管】Rime for macOS 项目地址: https://gitcode.com/gh_mirrors/squ/squirrel 鼠鬚管(Squirrel)作为基于RIME输入法引擎的macOS前端实现&…

2026/7/10 15:02:41阅读更多 →
OpenCore Legacy Patcher终极教程:让旧Mac焕发新生的完整指南

OpenCore Legacy Patcher终极教程:让旧Mac焕发新生的完整指南

OpenCore Legacy Patcher终极教程:让旧Mac焕发新生的完整指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为你的老Mac无法升级到最新macO…

2026/7/10 15:02:41阅读更多 →
2026年许可采购趋势:企业应该如何提前布局?

2026年许可采购趋势:企业应该如何提前布局?

如果你还在用三年前的采购逻辑来决策今年的软件预算,那你已经落后了。2026年的软件许可市场正在经历一场深刻的重构。license management市场预计从2025年的14.3亿美元增长至2026年的15.9亿美元,年复合增长率达到11.04%。软件资产管理市场更猛&#xff0…

2026/7/10 14:57:41阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/10 12:10:00阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/10 12:29:21阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/10 4:59:05阅读更多 →
浏览器缓存行为深度解析:Chrome/Firefox/Safari 对 304 响应的 5 种触发场景对比

浏览器缓存行为深度解析:Chrome/Firefox/Safari 对 304 响应的 5 种触发场景对比

浏览器缓存行为深度解析:Chrome/Firefox/Safari 对 304 响应的 5 种触发场景对比当你在浏览器地址栏敲入一个网址时,背后可能隐藏着一场关于"要不要重新下载资源"的精密博弈。这场博弈的裁判是HTTP缓存机制,而304状态码则是这场博弈…

2026/7/10 0:00:01阅读更多 →
RoboWits:面向创造性问题求解的双臂机器人认知推理基准

RoboWits:面向创造性问题求解的双臂机器人认知推理基准

1. 项目概述:这不是又一个机器人抓取数据集,而是一次对“思考力”的压力测试 RoboWits——这个名字里藏着两个关键信号:“Robo”直指物理世界中的具身智能体,“Wits”则毫不掩饰地指向人类最核心的认知能力:机敏、判断…

2026/7/10 0:00:01阅读更多 →
5分钟完全指南:如何使用TegraRcmGUI图形化工具解锁Switch无限可能

5分钟完全指南:如何使用TegraRcmGUI图形化工具解锁Switch无限可能

5分钟完全指南:如何使用TegraRcmGUI图形化工具解锁Switch无限可能 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI TegraRcmGUI是一款专为Windows…

2026/7/10 0:00:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/10 13:39:09阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/9 15:50:44阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/9 14:14:17阅读更多 →