实验室人员管理系统开发(Qt+opencv+sql)前

  • 1引言
    • 1.1系统介绍
    • 1.2软件安装
  • 2开发实现
    • 2.1图像识别
      • 2.1.1人脸检测
      • 2.1.2人脸识别
    • 2.2人机交互界面
    • 2.3数据库搭建
    • 2.4系统打包与移植
  • 3总结

1引言

一直想学习一下Qt开发上位机程序,之前利用Qt Creator做过简单的网络调试助手,了解到Qt软件开发的基本流程以及Qt Creator的基本使用。最近想做一个人脸识别的上位机,学习一下opencv图像处理。因此想到用Qt Creator,并在Qt中使用数据库搭建一个实验室人员管理系统。(此博客主要是记录一下学习过程,便于以后查看)

1.1系统介绍

上位机界面分为数据输入区、操作区、数据库数据显示区。操作人员可以通过上位机对数据库中的数据进行录入、修改、删除、查找(支持图像识别)、导出等操作。数据库中实验室人员信息数据可以通过手工和图像识两种方式录入。

1.2软件安装

  Qt5.14.2 MSVC2017 配置opencv_contrib4.3.0扩展库链接: [https://blog.csdn.net/Call_me_A_Bo/article/details/108858239).视频资源:https://www.bilibili.com/video/BV1tp4y1i7EJ

2开发实现

2.1图像识别

OpenCV(开源计算机视觉库),实现了图像处理和计算机视觉方面的很多通用算法,是计算机视觉领域最有力的研究工具之一。OPencv包括:图像处理和视觉算法(CV)、机器学习库(ML)、图像和视频输入/输出库(HighGUI)、基本结构和算法,XML支持,绘图函数(CXCORE)以及CVAUx模块。

2.1.1人脸检测

opencv 提供了很多已经训练好的分类器:人脸分类器,眼睛分类器,嘴部分类器等。可以看出这些分类器都是基于Haar特征的cascade分类器(classifiers)。

本系统选用的人脸分类器haarcascade_frontalface_alt.xml,将分类器放入系统根目录中,便于调用。人脸检测代码段如下:`。

 if (!face_cascade.load("F:/QT/prigect/face/untitled/haarcascade_frontalface_alt.xml"))//加载人脸分类器{qDebug("Load haarcascade_frontalface_alt failed!");return;}face_cascade.detectMultiScale(frame, faceRect, 1.1, 3, 0 | CASCADE_SCALE_IMAGE, Size(180, 180));if(!faceRect.empty()){for (size_t i = 0; i < faceRect.size(); i++){num++;if(num==11)num=1;qDebug("OK");rectangle(frame, faceRect[i], Scalar(0, 255, 0));      //用绿色矩形画出检测到的位置FaceRoI=frame(faceRect[i]);cv::resize(FaceRoI,face_test,Size(92, 112));str=str.sprintf("%d.jpg",num) ;str1=str.toStdString();cv::imwrite(str1,face_test);}}elseqDebug("no get");cv::cvtColor(frame, frame, cv::COLOR_GRAY2RGB);//转变为RGBQImage Qtemp = QImage((const unsigned char*)(frame.data), frame.cols, frame.rows, frame.step, QImage::Format_RGB888);Qtemp=Qtemp.mirrored(true,false);//图像左右翻转ui->label_picture->setPixmap(QPixmap::fromImage(Qtemp.scaled(ui->label_picture->size())));//ui->label_picture->setPixmap( QPixmap::fromImage(frame.mirrored(true,false)));ui->label_picture->show();

检测出的人脸图像,放入指定的目录下,便于训练。识别效果图:

2.1.2人脸识别

opencv人脸识别目前支持的算法有:Eigenface特征脸 、 Fisherface 、LBP局部二值直方图。
opencv进行人脸识别包含两个部分,训练和预测。本系统选用的算法是Eigenface特征脸,EigenFace主要是使用PCA(主成分分析),通过消除数据中的相关性,将高维图像降低到低维空间,训练集中的样本被映射成低维空间中的一点,需要判断测试图片性别时,先将测试图片映射到低维空间中,然后计算离测试图片最近样本点是哪一个,将最近样本点的性别赋值给测试图片。特征脸训练与识别流程为:读取修炼数据、计算平均脸、计算协方差矩阵、计算特征值、特征矩阵、PCA降维、子空间模型、检测与分类。
人脸识别代码:

// An highlighted block
void camer::readfram()
{Ptr<cv::face::FaceRecognizer> modelPCA = cv::face::EigenFaceRecognizer::create();modelPCA->read("F:\\QT\\prigect\\face\\build-untitled-Desktop_Qt_5_11_1_MSVC2017_64bit-Release\\MyFacePCAModel.xml");capture>>cap;if(!cap.empty()){cv::cvtColor(cap,cap_gray,cv::COLOR_BGR2GRAY); //灰度cv::equalizeHist(cap_gray,cap_gray);//直方图均衡化if (!face_cascade.load("F:/QT/prigect/class5/mangent/haarcascade_frontalface_alt2.xml")){qDebug("Load haarcascade_frontalface_alt failed!");return;}face_cascade.detectMultiScale(cap_gray, faceRect, 1.1, 3, 0 | CASCADE_SCALE_IMAGE, Size(180, 180));for (size_t i = 0; i < faceRect.size(); i++){rectangle(cap, faceRect[i], Scalar(0, 255, 0));      //用绿色矩形画出检测到的位置Mat faceRoI=cap_gray(faceRect[i]);int predictPCA=0;Mat face_test;Point text_lb;cv::resize(faceRoI,face_test,Size(92,112));predictPCA=modelPCA->predict(face_test);qDebug("%d\n",predictPCA);if(predictPCA==4){string name="SUN YUAN XIN";text_lb=Point(faceRect[i].x,faceRect[i].y);putText(cap,name,text_lb,FONT_HERSHEY_COMPLEX,1,Scalar(0,0,255));buf=QString::fromLocal8Bit("孙元新,2019540044,男");emit sendsignal(buf);// buf=QString::fromLocal8Bit("2019540044");// emit sendsignal(buf);// buf=QString::fromLocal8Bit("男");// emit sendsignal(buf);QMessageBox::warning(this,"Recognized successfully","Please click back",QMessageBox::Ok);}if(predictPCA==1){string name="WenShengYu";text_lb=Point(faceRect[i].x,faceRect[i].y);putText(cap,name,text_lb,FONT_HERSHEY_COMPLEX,1,Scalar(0,0,255));buf=QString::fromLocal8Bit("温盛宇,2018520296,男");emit sendsignal(buf);// buf=QString::fromLocal8Bit("2019540044");// emit sendsignal(buf);// buf=QString::fromLocal8Bit("男");// emit sendsignal(buf);QMessageBox::warning(this,"Recognized successfully","Please click back",QMessageBox::Ok);}if(predictPCA==2){string name="YangZhenQiang";text_lb=Point(faceRect[i].x,faceRect[i].y);putText(cap,name,text_lb,FONT_HERSHEY_COMPLEX,1,Scalar(0,0,255));buf=QString::fromLocal8Bit("杨振强,2020520001,男");emit sendsignal(buf);// buf=QString::fromLocal8Bit("2019540044");// emit sendsignal(buf);// buf=QString::fromLocal8Bit("男");// emit sendsignal(buf);QMessageBox::warning(this,"Recognized successfully","Please click back",QMessageBox::Ok);}if(predictPCA==3){string name="WuHaiChao";text_lb=Point(faceRect[i].x,faceRect[i].y);putText(cap,name,text_lb,FONT_HERSHEY_COMPLEX,1,Scalar(0,0,255));buf=QString::fromLocal8Bit("吴海超,2019520001,男");emit sendsignal(buf);// buf=QString::fromLocal8Bit("2019540044");// emit sendsignal(buf);// buf=QString::fromLocal8Bit("男");// emit sendsignal(buf);QMessageBox::warning(this,"Recognized successfully","Please click back",QMessageBox::Ok);}if(predictPCA==0){string name="LiuAnKang";text_lb=Point(faceRect[i].x,faceRect[i].y);putText(cap,name,text_lb,FONT_HERSHEY_COMPLEX,1,Scalar(0,0,255));buf=QString::fromLocal8Bit("刘安康,2020520002,男");emit sendsignal(buf);// buf=QString::fromLocal8Bit("2019540044");// emit sendsignal(buf);// buf=QString::fromLocal8Bit("男");// emit sendsignal(buf);QMessageBox::warning(this,"Recognized successfully","Please click back",QMessageBox::Ok);}}}imag = Mat2QImage(cap);     // 将Mat转换成QImage对象来显示//  imag=imag.mirrored(true,false);imag = imag.scaled(ui->label_camer->width(), ui->label_camer->height(),Qt::IgnoreAspectRatio, Qt::SmoothTransformation);//设置图片大小和label的长宽一致ui->label_camer->setPixmap(QPixmap::fromImage(imag));  // 将图片显示到label上
}

识别效果:

2.2人机交互界面

2.3数据库搭建

2.4系统打包与移植

3总结

实验室人员管理系统开发(Qt+opencv+sql)相关推荐

  1. 【附源码】计算机毕业设计SSM实验室耗材管理系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  2. Springboot社区人员管理系统的设计与实现 毕业设计-附源码260839

    springboot社区人员管理系统 摘  要 随着社会的发展,社会的各行各业都在利用信息化时代的优势.计算机的优势和普及使得各种信息系统的开发成为必需. 社区人员管理系统,主要的模块包括查看首页.用 ...

  3. (附源码)springboot实验室预约管理系统的开发毕业设计261141

    实验室预约管理系统的设计与实现 摘 要 远程预约是一种全新的网络租用方式,它通过互联网突破了时间和空间限制,实现了便捷快速的预约与管理功能.在对数据信息有效组织并整合了一定使用功能后,远程预约系统可以 ...

  4. 【Qt开发】【VS开发】【Linux开发】OpenCV、Qt-MinGw、Qt-msvc、VS2010、VS2015、Ubuntu Linux、ARM Linux中几个特别容易混淆的内容...

    [Qt开发][VS开发][Linux开发]OpenCV.Qt-MinGw.Qt-msvc.VS2010.VS2015.Ubuntu Linux.ARM Linux中几个特别容易混淆的内容 标签:[Qt ...

  5. QT + OpenCV + MinGW 在windows下配置开发环境

           由于研究项目需要,最近开始接触C++界面设计,关于"QT + OpenCV + MinGW在windows下配置开发环境"着实让人头疼,单次配置时间相当长,也十分不容 ...

  6. PHP预约模块开发,PHP实验室预约管理系统(源代码+论文)

    PHP实验室预约管理系统(源代码+论文) 如有需要请联系 设计总说明 信息技术的迅猛发展带来了教育方式和管理方式的变革,随着高校规模的不断扩大和教学管理需求的不断提高,引进先进的信息化手段,实现教学管 ...

  7. (一)Qt+OpenCV调用海康工业相机SDK示例开发

    系列文章目录 提示:这里是该系列文章的所有文章的目录 第一章: (一)Qt+OpenCV调用海康工业相机SDK示例开发 第二章: (二)Qt多线程实现海康工业相机图像实时采集 文章目录 系列文章目录 ...

  8. 【Qt+OpenCV项目开发学习】二、图片查看器应用程序开发

    一.前言 本博客将讲解如何用Qt+OpenCV开发一款图片查看器的Windows应用程序,其实不用OpenCV也能开发出这类软件,作者目的是为了学习Qt+OpenCV开发项目,所以会使用OpenCV, ...

  9. 管理系统开发一: winform连接sql数据库

    Winform连接SqlServel数据库进行居民管理系统开发. 最近负责了一项居民管理系统,开始的我是懵的,因为除了大学学的那一点后,我之后就没怎么接触而且连大学学的那点也基本上还给老师了,但是开发 ...

最新文章

  1. 港口物流系统设计与优化-SMU在线学习笔记
  2. sql server 语句自动补齐
  3. 案例 | 新零售如何精细化运营?百联全渠道经验谈
  4. *** line xxxx of `fraud.data': bad value of xxxx for attribute `id_11'
  5. linux之awk命令学习笔记
  6. 程序员!别逼自己买课了,每天花10分钟做这件事,写代码能力暴增......
  7. 选择开还是关 pxe_商用披萨(53)开披萨店是选择加盟还是自创品牌呢?
  8. 传奇电子cq9跳高高、跳起来规则与操作技巧
  9. XP显示不了隐藏文件了 无法使用Windows XP搜索功能
  10. Linux上oracle精简版客户端快速部署
  11. SQLserver 2005 安装文档
  12. PH值检测C语言程序,食品中pH的检测
  13. C++获取成员变量的偏移地址
  14. ATN项目(智能矩阵Atmatrix)是否能做到人工智能界的桥梁,从而改变世界?
  15. 本土实力派陈旭东出任IBM大中华区总经理,意外还是惊喜?
  16. 【读文献笔记】图神经网络加速结构综述
  17. android ui状态栏高度,移动界面尺寸!安卓720*1280界面尺寸规范参考
  18. Linux Centos7 Apache 访问 You don't have permission to access / on this server.
  19. Selenium应用系列2
  20. @MDS SpringBoot的简单项目搭建

热门文章

  1. 16个值得使用的免费外链建设工具
  2. windows 10 超级优化,同时解决本地磁盘100%的问题
  3. 学习大数据分析python编程指南
  4. ASP.NET系统分析与设计思路探讨 (原创)
  5. 经典!!!天哪!太幸福了!
  6. 【Unity】Unity 3D中的内存管理
  7. Linux系统联网与修改静态ip地址
  8. 宝塔面板在同一服务器下创建多个端口部署项目(轻量应用服务器一键部署网站、博客、GltLab完整版)
  9. ssm框架所需jar包下载链接
  10. 用R给心仪的对象表白吧