You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
2.9 KiB
112 lines
2.9 KiB
|
|
// Demo_Live_MFCDlg.h : 头文件
|
|
//
|
|
|
|
#pragma once
|
|
#include "afxwin.h"
|
|
#include "opencv.hpp"
|
|
#include <mutex>
|
|
#include <thread>
|
|
#include <list>
|
|
#include "CWFaceConfig.h"
|
|
|
|
|
|
// CDemo_Live_MFCDlg 对话框
|
|
class CDemo_Live_MFCDlg : public CDialogEx
|
|
{
|
|
// 构造
|
|
public:
|
|
CDemo_Live_MFCDlg(CWnd* pParent = NULL); // 标准构造函数
|
|
|
|
// 对话框数据
|
|
enum { IDD = IDD_DEMO_LIVE_MFC_DIALOG };
|
|
|
|
protected:
|
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
|
|
|
|
|
|
// 实现
|
|
protected:
|
|
HICON m_hIcon;
|
|
|
|
// 生成的消息映射函数
|
|
virtual BOOL OnInitDialog();
|
|
afx_msg void OnPaint();
|
|
afx_msg HCURSOR OnQueryDragIcon();
|
|
afx_msg void OnDestroy();
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
afx_msg void OnBnClickedBtnInit();
|
|
afx_msg void OnBnClickedBtnOpenusb();
|
|
afx_msg void OnBnClickedBtnLiveCamera();
|
|
afx_msg void OnBnClickedBtnCamera();
|
|
afx_msg void OnBnClickedBtnLoad1();
|
|
afx_msg void OnBnClickedBtnLoad2();
|
|
afx_msg void OnBnClickedBtnPicLive();
|
|
|
|
afx_msg LRESULT OnThreadShowVideo(WPARAM wPapam, LPARAM lPapam);
|
|
|
|
private:
|
|
|
|
void ThreadFaceDet();
|
|
|
|
bool CreateFaceHandle();
|
|
|
|
void ReleaseFaceHandle();
|
|
|
|
void ShowVideo(char* szFrame,int iImgWidth,int iImgHeight);
|
|
|
|
void ShowImg(CString sPicPath, HDC hDCVideo, RECT rectVideo);
|
|
|
|
int GetFaceInfoByMat(void *pDetHandle, const cv::Mat &matImage, cw_face_res_t* pFaceBuffer);
|
|
|
|
int GetNisLiveStateByMat(const cv::Mat &matImageVis, const cv::Mat &matImageNir, cw_nirliv_res_t *res);
|
|
|
|
cw_errcode_t NirLivDet(char* imgDataVis, int iDataLenVis, int iWidthVis, int iHeightVis, cw_img_form_t formatVis,
|
|
char* imgDataNir, int iDataLenNir, int iWidthNir, int iHeightNir, cw_img_form_t formatNir,
|
|
cw_nirliv_det_rst_t *state, float *fScore);
|
|
|
|
cw_errcode_t GetFaceInfoByImg(void *pDetHandle, char *pImgData, int iImgLen, int iWidth, int iHeight, cw_img_form_t format, cw_face_res_t* pFaceBuffer);
|
|
|
|
private:
|
|
|
|
typedef std::list<cv::Mat> ListMat;
|
|
|
|
CEdit m_edtVersion;
|
|
|
|
CEdit m_edtCameraLiveScore;
|
|
CEdit m_edtCameraLiveResult;
|
|
CEdit m_edtCameraLiveTime;
|
|
|
|
CEdit m_edtPicLiveScore;
|
|
CEdit m_edtPicLiveResult;
|
|
CEdit m_edtPicLiveTime;
|
|
|
|
CStatic m_staticVideo; // 显示USB摄像头的控件
|
|
RECT m_rectVideo;
|
|
HDC m_hDCVideo;
|
|
|
|
CStatic m_staticPic1;
|
|
RECT m_rectPic1;
|
|
HDC m_hDCPic1;
|
|
|
|
CStatic m_staticPic2;
|
|
RECT m_rectPic2;
|
|
HDC m_hDCPic2;
|
|
|
|
cv::VideoCapture m_captureVis; // 可见光摄像头操作对象
|
|
cv::VideoCapture m_captureNis; // 红外摄像头操作对象
|
|
ListMat m_listVisFrame; // 当前可见光帧链表,最多保存5帧,5帧中超过3帧为活体,即判断当前为活体
|
|
ListMat m_listNisFrame; // 当前红外帧链表
|
|
std::thread m_threadFaceDet; // 视频线程
|
|
std::mutex m_mutex; // 锁
|
|
|
|
CString m_sPic1Path; // 可见光图片路径
|
|
CString m_sPic2Path; // 红外图片路径
|
|
bool m_bStartThread; // 是否开启摄像头线程
|
|
bool m_bInitNirLiv; // 是否初始化红外活体服务
|
|
|
|
void* m_pDetThread; // 检测线程中的检测句柄,主要用来画人脸框
|
|
void* m_pNirLiv; //红外活体检测句柄
|
|
|
|
};
|
|
|