VS2013+MFC+OPENCV人脸识别考勤软件
来源:互联网 发布:淘宝加入购物车代码 编辑:程序博客网 时间:2024/04/27 13:56
// 人脸识别考勤软件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人脸识别考勤软件
- Qt+Caffe+OpenCV——【一个基于VGG网络的人脸识别考勤系统】
- Qt+Caffe+OpenCV,VGG网络的人脸识别考勤系统
- [济南考勤机专题]考勤机类型(四)人脸识别考勤机
- 人脸识别考勤系统解决方案
- 人脸识别考勤应用实践
- 人脸识别考勤操作指南
- OpenCV + MFC 实现简单人脸识别
- Qt+Caffe+OpenCV——【一个基于VGG网络的人脸识别考勤系统】(一)人脸检测与识别模块
- HR考勤系统-人脸识别-工资核算
- Android安卓人脸考勤人脸识别项目源码
- 签到方式出“新招”!人脸识别考勤系统
- VS2013 MFC opencv 播放视频
- Qt+Caffe+OpenCV——【一个基于VGG网络的人脸识别考勤系统】(二)创建一个登录界面和主窗口
- OpenCV人脸识别
- opencv人脸识别
- openCV人脸识别
- Opencv 人脸识别
- CSDN-markdown编辑器使用说明
- 链表问题的做题总结
- [最短路]最短路径问题
- 报纸问题
- 蓝桥杯 表格计算
- VS2013+MFC+OPENCV人脸识别考勤软件
- java抽象类和接口经典讲解
- 现在网上的虚拟机有很多,本人测试VMware在Mac上表现良好,推荐给大家
- 蓝桥杯 滑动解锁 java
- JAVA
- bzoj 3881: [Coci2015]Divljak (AC自动机+容斥原理+LCA+树状数组)
- bzoj3944: Sum
- 深度学习--注意力机制记录
- 动态规划 k好数 顽皮猫为你一边讲解一边写代码