// 人脸识别考勤软件Dlg.cpp : 实现文件
//

include “stdafx.h”

include “afxwin.h”

include “人脸识别考勤软件.h”

include “人脸识别考勤软件Dlg.h”

include “afxdialogex.h”

include “resource.h”

ifdef _DEBUG

define new DEBUG_NEW

endif

include “opencv2/objdetect/objdetect.hpp”

include “opencv2/highgui/highgui.hpp”

include “opencv2/imgproc/imgproc.hpp”

include

include

include

include “highgui.h”

include

include

// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
using namespace std;
using namespace cv;
Mat image2, frame;
std::vector faces;
CascadeClassifier face_cascade;
Ptr modelPCA = createEigenFaceRecognizer();

VideoCapture capture;
double fx, fy, fw, fh;
int predictFisher, predictPCA, predictLBP;
COLORREF m_bkcolor1 RGB(207, 210, 210), m_bkcolor2 RGB(207, 210, 210), m_bkcolor3 RGB(207, 210, 210), m_bkcolor4 RGB(207, 210, 210), m_bkcolor5 RGB(207, 210, 210), m_bkcolor6 RGB(207, 210, 210), m_bkcolor7 RGB(207, 210, 210), m_bkcolor8 RGB(207, 210, 210);
void detectAndDisplay(Mat frame);
String face_cascade_name = “haarcascade_frontalface_alt.xml”;
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();

// 对话框数据
enum { IDD = IDD_ABOUTBOX };

protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()

// C人脸识别考勤软件Dlg 对话框

C人脸识别考勤软件Dlg::C人脸识别考勤软件Dlg(CWnd* pParent /=NULL/)
: CDialogEx(C人脸识别考勤软件Dlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void C人脸识别考勤软件Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(C人脸识别考勤软件Dlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(StartWatch, &C人脸识别考勤软件Dlg::OnBnClickedStartwatch)
ON_BN_CLICKED(IDC_BUTTON2, &C人脸识别考勤软件Dlg::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON3, &C人脸识别考勤软件Dlg::OnBnClickedButton3)
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()

// C人脸识别考勤软件Dlg 消息处理程序

BOOL C人脸识别考勤软件Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();

// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}
}// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
//  执行此操作
SetIcon(m_hIcon, TRUE);         // 设置大图标
SetIcon(m_hIcon, FALSE);        // 设置小图标// TODO:  在此添加额外的初始化代码return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE

}

void C人脸识别考勤软件Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}

// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。

void C人脸识别考勤软件Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文

    SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);
}
else
{CDialogEx::OnPaint();
}

}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR C人脸识别考勤软件Dlg::OnQueryDragIcon()
{
return static_cast(m_hIcon);
}

void C人脸识别考勤软件Dlg::OnBnClickedStartwatch()
{

    // TODO:  在此添加控件通知处理程序代码capture=0;namedWindow("view", WINDOW_AUTOSIZE);HWND hWnd = (HWND)cvGetWindowHandle("view");HWND hParent = ::GetParent(hWnd);::SetParent(hWnd, GetDlgItem(face_picture)->m_hWnd);::ShowWindow(hParent, SW_HIDE);//隐藏运行程序框,并且把它“画”到MFC上if (!face_cascade.load(face_cascade_name)){ printf("--(!)Error loading\n"); };modelPCA->load("PCA.xml");if (capture.isOpened()){for (;;){capture >> frame;if (!frame.empty()){detectAndDisplay(frame);imshow("view", frame);UpdateData(FALSE);}else{printf(" --(!) No captured frame -- Break!"); break;}waitKey(1);}}

}

void detectAndDisplay(Mat frame)
{Mat frame_gray;cvtColor(frame, frame_gray, COLOR_BGR2GRAY);equalizeHist(frame_gray, frame_gray);face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(80, 80));for (size_t i = 0; i < faces.size(); i++){Point center1(faces[i].x-20, faces[i].y-20);Point center2(faces[i].x + faces[i].width+20, faces[i].y + faces[i].height+20);cv::rectangle(frame, center1, center2, Scalar(255, 0, 255), 2, 8, 0);fx = faces[i].x;fy = faces[i].y;fw = faces[i].width;fh = faces[i].height;}

}

void C人脸识别考勤软件Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
//cvReleaseCaputre(&capture);
if (capture.isOpened()){ capture.release(); }
CDialogEx::OnCancel();
}

void C人脸识别考勤软件Dlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
Rect rect(fx, fy, fw, fh);
Mat roi = frame(rect);
int myP, myL, myF;
Size dsize = Size(92, 112);
image2 = Mat(dsize, CV_32S);
resize(roi, image2, dsize);
char* outImageName2 = “test26.jpg”;
imwrite(outImageName2, image2);

Mat testImage = imread("test26.jpg", 0);predictPCA = modelPCA->predict(testImage);switch (predictPCA){
case 41: myP = 1; break;
case 42: myP = 2; break;
case 43: myP = 3; break;
case 44: myP = 4; break;
case 45: myP = 5; break;
case 46: myP = 6; break;
case 47: myP = 7; break;
case 48: myP = 8; break;
}if (  myP == 1 )
{   m_bkcolor1 = RGB(251, 251, 36); GetDlgItem(IDC_STATIC1)->InvalidateRect(NULL);}
else if ( myP == 2 )
{   m_bkcolor2 = RGB(251, 251, 36); GetDlgItem(IDC_STATIC2)->InvalidateRect(NULL);}
else if ( myP == 3 )
{   m_bkcolor3 = RGB(251, 251, 36); GetDlgItem(IDC_STATIC3)->InvalidateRect(NULL);}
else if (  myP ==4 )
{   m_bkcolor4 = RGB(251, 251, 36); GetDlgItem(IDC_STATIC4)->InvalidateRect(NULL);}else if ( myP == 5 )
{   m_bkcolor5 = RGB(251, 251, 36); GetDlgItem(IDC_STATIC5)->InvalidateRect(NULL);}else if ( myP == 6 )
{   m_bkcolor6 = RGB(251, 251, 36); GetDlgItem(IDC_STATIC6)->InvalidateRect(NULL);}
else if ( myP == 7 )
{   m_bkcolor7 = RGB(251, 251, 36); GetDlgItem(IDC_STATIC7)->InvalidateRect(NULL);}else if ( myP == 8 )
{   m_bkcolor8 = RGB(251, 251, 36); GetDlgItem(IDC_STATIC8)->InvalidateRect(NULL);}
else{ MessageBox(_T("识别失败,请正面看镜头或者打开闪光灯")); }

}

HBRUSH C人脸识别考勤软件Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
static CBrush gBr;
static bool isInited = false;

// TODO:  在此更改 DC 的任何特性if (pWnd->GetDlgCtrlID() == IDC_STATIC1)  { pDC->SetBkColor(m_bkcolor1); }
if (pWnd->GetDlgCtrlID() == IDC_STATIC2)  { pDC->SetBkColor(m_bkcolor2); }
if (pWnd->GetDlgCtrlID() == IDC_STATIC3)  { pDC->SetBkColor(m_bkcolor3); }
if (pWnd->GetDlgCtrlID() == IDC_STATIC4)  { pDC->SetBkColor(m_bkcolor4); }
if (pWnd->GetDlgCtrlID() == IDC_STATIC5)  { pDC->SetBkColor(m_bkcolor5); }
if (pWnd->GetDlgCtrlID() == IDC_STATIC6)  { pDC->SetBkColor(m_bkcolor6); }
if (pWnd->GetDlgCtrlID() == IDC_STATIC7)  { pDC->SetBkColor(m_bkcolor7); }
if (pWnd->GetDlgCtrlID() == IDC_STATIC8)  { pDC->SetBkColor(m_bkcolor8); }

if(!isInited)
{
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
gBr.CreatePatternBrush(&bitmap);
COLORREF clearColor = -1;
bitmap.DeleteObject();
isInited = true;
}
if (pWnd == this)
{
pDC->SetBkMode(TRANSPARENT);
return gBr; //主窗口背景使用这个背景刷

}// TODO:  如果默认的不是所需画笔,则返回另一个画笔
return (HBRUSH)::GetStockObject(5); //其他控件使用透明背景

}

VS2013+MFC+OPENCV人脸识别考勤软件相关推荐

  1. python opencv人脸识别考勤系统的完整源码

    这篇文章主要介绍了python opencv人脸识别考勤系统的完整源码,本文给大家介绍的非常详细,希望对大家的学习或工作具有一定的参考借鉴价值. 代码如下: import wx import wx.g ...

  2. opencv人脸识别考勤 python_GitHub - lisanshui007/python-opencv: 基于python opencv人脸识别的员工考勤系统...

    项目及作者说明 一个基于 Opencv.dlib 人脸识别的员工考勤系统,作者某双一流A类大学里的一流学生,写于2018/09/,Python 学习期间. 开源版及商业版说明 开源版 商业版 人脸录入 ...

  3. 【毕业设计/课程设计】基于opencv的高精度人脸识别考勤系统设计与实现

    文章目录 0 项目说明 1 需求分析 2 总体设计 3 详细设计 4 程序运行结果测试与分析 5 实验心得 6 项目源码 0 项目说明 基于opencv的高精度人脸识别考勤系统设计与实现 提示:适合用 ...

  4. 【毕业设计_课程设计】基于opencv、dilb的员工人脸识别考勤系统

    文章目录 0 项目说明 1 需求分析 2 总体设计 3 详细设计 4 效果展示 5 实验心得 6 项目源码 7 最后 0 项目说明 基于opencv.dilb的员工人脸识别考勤系统 提示:适合用于课程 ...

  5. Linux毕业设计:基于OpenCV和QT库实现的人脸识别考勤/门禁系统(arm嵌入式ubuntu)

    本文介绍:Linux上以opencv和qt库实现的人脸识别系统,可应用于考勤.门禁等场景,具有人脸录入.删除.人脸检测.识别.用户管理等完整功能.可运行于ARM嵌入式linux.ubuntu即纯软件. ...

  6. (开源)简单的人脸识别考勤系统(python+opencv+dilb)

    简单的毕业设计,python+opencv+dlib,注意配置环境,打开工程文件直接运行.演示视频前往B站(开源)人脸识别签到系统_哔哩哔哩_bilibili 源文件及使用说明百度网盘下载链接: ht ...

  7. Python+OpenCV人脸识别签到考勤系统(新手入门)

    Python+OpenCV人脸识别签到考勤系统(新手入门) 前言 项目效果图 项目需要的环境 编译器 辅助开发QT-designer 项目配置 代码部分 核心代码 项目目录结构 后记 正式版改进 项目 ...

  8. 基于OpenCV的人脸识别考勤系统

    考勤系统设计 学生上课考勤系统最初的方式是采用的人工纸质点名,目前仍旧有一部分学校依旧采用此种方法点名,这种方法也一直是被认为最有效的签到点名方式.但由于课程繁多加上学生人数众多, 代替点名现象普遍存 ...

  9. python人脸识别考勤系统 dlib+OpenCV和Pyqt5、数据库sqlite 人脸识别系统 计算机 毕业设计 源码

    一.项目介绍 Python语言.dlib.OpenCV.Pyqt5界面设计.sqlite3数据库 本系统使用dlib作为人脸识别工具,dlib提供一个方法可将人脸图片数据映射到128维度的空间向量,如 ...

最新文章

  1. struts2漏洞_十大常见web漏洞——命令执行漏洞
  2. 设计模式——设计模式之禅day2
  3. 如何仅从SQL Server DateTime数据类型返回日期
  4. 网络营销前夕怎样确定网站定位?这是网络营销开展的基础!
  5. jvm 设置 直接内存 大小
  6. nginx 禁止通过IP,未绑定域名访问服务器
  7. CCIE-LAB-第五篇-SDN-SD-WAN-BGP-OMP(sdwan版的路由协议)
  8. MySQL 各类问题及解决办法汇总
  9. Customizing AxWebBrowser, make it powerful
  10. 由帧内8x8预测到MBAFF时相邻块的推导
  11. svn 安装 IntelliJ IDEA 配置svn
  12. 【接力题典1800记录】定积分
  13. 手把手教你破解软件,每一步都有图示,你若再不会就太XX
  14. unity检测范围内敌人_unity_小功能实现(敌人追踪主角)
  15. 产品经理的职责和分类
  16. PS利用切片工具将一张大图裁剪成多个子图像并导出
  17. VUE报错rowserslist: caniuse-lite is outdated. Please run the following command: `npx browser
  18. 微信去除 防欺诈或盗号请不要输入qq密码 的方法
  19. airplus.exe
  20. 美国研究生院计算机数据科学排名,2021美国硕士计算机专业排名

热门文章

  1. 你所不知道的FTTx
  2. OFDM、FTTx、SCTP、Ad Hoc、WSN术语简介
  3. html中如何让背景图片填充整个图片
  4. 利用python绘制混淆矩阵
  5. QX项目实战-2.模块分类以及配置读取
  6. Kotlin系列之when关键字
  7. NC65增加自定义档案后移植问题
  8. GPS常识-A版(详)
  9. Git CMD, Git bash, Git GUI区别
  10. 赚钱宝2代(飞碟形状)的主板TTL 串口使用