当前位置:   article > 正文

基于SeetaFace的人脸识别考勤系统_seetface 人脸录入

seetface 人脸录入

实现方案

基于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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90

服务器端部分代码

#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;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/737909
推荐阅读
相关标签
  

闽ICP备14008679号