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
由于时间有限,这次只上传了照片对比,下一章做一个摄像头的人脸实时匹配