赞
踩
基于Qt框架的客户端和服务器端应用程序将结合OpenCV和SeetaFace库实现人脸检测、识别和管理。
客户端应用程序:
使用Qt框架构建客户端应用程序,利用Qt的网络模块实现局域网下的网络通信。
集成OpenCV库,实现图像采集和人脸检测功能。通过摄像头或图像文件采集图像,并使用SeetaFace进行人脸检测。
将检测到的人脸区域图像保存在Qt的Rect容器中,并以固定频率将人脸数据发送到服务器端。
接收服务器端发送的识别结果,并将识别结果显示在客户端界面上。
服务器端应用程序:
使用Qt框架构建服务器端应用程序,利用Qt的网络模块实现接收客户端数据和发送识别结果的功能。
集成SeetaFace模块,实现人脸注册和识别功能。将注册的人脸信息保存到Qt SQL数据库中,并利用SeetaFace进行人脸识别。
接收客户端发送过来的人脸数据,进行人脸识别,并将识别结果发送回客户端。
实现查询显示人脸数据和考勤数据的功能,从Qt SQL数据库中检索人脸信息和考勤记录,并在服务器端界面上显示。
提供管理界面,包括注册人脸、删除人脸、查询考勤记录等功能。
#include "facedetect.h" #include "ui_facedetect.h" using namespace cv; using namespace std; FaceDetect::FaceDetect(QWidget *parent) : QMainWindow(parent) , ui(new Ui::FaceDetect) { ui->setupUi(this); //打开摄像头 cap.open(0); //启动定时器事件 startTimer(40); //导入级联分类器 cascade.load("D:/QM/Desktop/FaceDetect/opencv452/etc/haarcascades/haarcascade_frontalface_alt2.xml"); //QTcpSocket当断开连接的时候disconnected信号,连接成功会发送connected connect(&socket, &QTcpSocket::disconnected, this, &FaceDetect::start_connect); connect(&socket, &QTcpSocket::connected, this, &FaceDetect::stop_connect); //定时器连接服务器 connect(&timer, &QTimer::timeout ,this, &FaceDetect::timer_connect); //启动定时器 timer.start(5000);//每5s钟连接一次,直到连接成功就不在连接 } FaceDetect::~FaceDetect() { delete ui; } //采集图像显示在界面上,并绘制矩形框 void FaceDetect::timerEvent(QTimerEvent *e) { Mat capImg; //摄像头采集数据 //Mat grayImg; //灰度图像数据 vector<Rect> faceRects; //Rect容器 Rect rect; //矩形框 //没有正常打开摄像头则返回 if(!cap.grab()) return; //获取一帧数据 cap.read(capImg); //读取失败则返回 if(capImg.data == nullptr) return; //转成灰度图像 //cvtColor(capImg, grayImg, COLOR_BGR2GRAY); //用级联分类器检测人脸数据并将其保存到容器中 cascade.detectMultiScale(capImg, faceRects); //绘制矩形框 if(faceRects.size() > 0) { rect = faceRects.at(0); rectangle(capImg, rect, Scalar(0,0,127)); } //转换图像格式并显示在界面上 //cvtColor(capImg, capImg, COLOR_BGR2RGB); QImage qimg(capImg.data, capImg.cols, capImg.rows, capImg.step1(), QImage::Format_BGR888); QPixmap qpm = QPixmap::fromImage(qimg); ui->capView->setPixmap(qpm); } void FaceDetect::start_connect() { timer.start(5000); cout << "start connecting" << endl; } void FaceDetect::stop_connect() { timer.stop(); cout << "stop connecting" << endl; } void FaceDetect::timer_connect() { socket.connectToHost("192.168.137.120", 6666); cout << "try connecting" << endl; }
#include "facedetectserver.h" #include "ui_facedetectserver.h" #include<iostream> using namespace std; FaceDetectServer::FaceDetectServer(QWidget *parent) : QMainWindow(parent) , ui(new Ui::FaceDetectServer) { ui->setupUi(this); //QTcpServer当有客户端连会发送newconnection connect(&server, &QTcpServer::newConnection, this, &FaceDetectServer::accept_client); //监听,启动服务器 server.listen(QHostAddress::Any, 6666); } FaceDetectServer::~FaceDetectServer() { delete ui; } void FaceDetectServer::accept_client() { //获取与客户端通信的套接字 s_socket = server.nextPendingConnection(); //当客户端有数据到达会发送readyRead信号 connect(s_socket, &QTcpSocket::readyRead, this, &FaceDetectServer::read_data); } void FaceDetectServer::read_data() { //读取所有的数据 QString msg = s_socket->readAll(); string str = msg.toStdString(); cout << str << endl; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。