windows下VC高度封装,人脸识别,人脸匹配应用FaceMatch-第一章-《零度屏幕录像软件》

得益于SeetaFace Engine的无私奉献,我们才能方便应用人脸识别和人脸匹配到我们的日常应用中!

近期,本工作室高度封装了人脸检测和人脸识别的OCX控件


先看下接口函数吧

void Init(void);
void SetVideoProperty(LONG width, LONG height);
LONG Start(void);
void InputData(BYTE* pData, LONG nLen);
void Stop(void);
void OutputFaceVideo(BYTE* pFaceData, LONG nFaceDataLen, LONG width, LONG height, BYTE* pMatchData, LONG nMatchDataLen);
void SetShowWnd(LONG hWnd);

LONG GetPicFaceData(LPCTSTR szFile, BYTE* pFaceData, BYTE* pLen);
LONG GetPicFaceData2(BYTE* pInPic, LONG width, LONG height, BYTE* pFaceData, BYTE* pLen);
LONG MatchFace(BYTE* pIn1, LONG nLen1, BYTE* pIn2, LONG nLen2);
LONG GetPicData(LPCTSTR szFile, BYTE* pData, BYTE* width, BYTE* height);


所有函数都是高度封装的,调用也相当简单:

1、初始:

m_facematch.Init();

        设置图片或者视频显示窗口:
m_facematch.SetShowWnd((long)m_video1.GetSafeHwnd());


       2、打开图像并显示(或者打开摄像头也可以这样调用)

// 设置过滤器   
TCHAR szFilter[] = _T("图像(*.jpg)|*.jpg|图像(*.jpeg)|*.jpeg|图像(*.png)|*.png|图像(*.bmp)|*.bmp|所有文件(*.*)|*.*||");
// 构造打开文件对话框   
CFileDialog fileDlg(TRUE, _T("jpg|jpeg|png|bmp|gif"), NULL, 0, szFilter, this);


// 显示打开文件对话框   
if (IDOK == fileDlg.DoModal())
{
CString szPicPath = fileDlg.GetPathName();
BYTE *pPicData=new BYTE[800*600*3];
int width,height;
int nPicDataLen=m_facematch.GetPicData(szPicPath,pPicData,(BYTE*)&width,(BYTE*)&height);
if(nPicDataLen>0)
{
m_facematch.SetVideoProperty(width,height);
m_facematch.Start();
m_facematch.InputData(pPicData,nPicDataLen);
}
else
MessageBox(L"无法打开图片!");


delete []pPicData;


}


      3、OCX回调函数返回匹配人脸数据(固定8K)

//控件回调函数里,包含了人脸识别数据
void CTestFaceMatch_LDDlg::OutputFaceVideoFacematchctrl1(unsigned char* pFaceData, long nFaceDataLen, long width, long height, unsigned char* pMatchData, long nMatchDataLen)
{
MatchLock1.Lock();
memcpy(MatchData1,pMatchData,nMatchDataLen);
MatchLock1.Unlock();

}


      4、根据控件回调函数里的人脸识别数据,计算相识度
void CTestFaceMatch_LDDlg::OnBnClickedButton4()//识别相似度:一般相似度大于等于60~70以上,可以视为一个人
{
MatchLock1.Lock();
MatchLock2.Lock();
long nSimilarity=m_facematch.MatchFace(MatchData1,8*1024,MatchData2,8*1024);//相似度:100最大,0最小
MatchLock2.Unlock();
MatchLock1.Unlock();


CString szFormat;
szFormat.Format(L"相似度:%d%%",nSimilarity);
m_Similarity.SetWindowText(szFormat);
}


下面附下载地址,使用前先双击注册.OCX注册控件。目录下有示例图片

demo下载地址(seeta_fr_v1.0.bin文件太大,只能传百度云):链接:http://pan.baidu.com/s/1nvE6LM5 密码:osgx

由于时间有限,这次只上传了照片对比,下一章做一个摄像头的人脸实时匹配

猜你喜欢

转载自blog.csdn.net/xjb2006/article/details/76649077