使用 SeetaFace 实现人脸识别
2018-02-11 11:46
681 查看
SeetaFace中科院山世光老师开源的人脸识别引擎,其实这个是一个相当不错的人脸识别引擎,自己实测之后,发现的确是比OpenCV自带的强很多。但是实话实说,SeetaFace自带的demo 程序就有点复杂了,太多细节要用户关注之后,把三个工程重新编译好之后,才能自己运行起来看效果,特别本民工这种开发环境一大堆,机器上同时配置了三个版本OpenCV的,的确是有点麻烦。另外还有那三个模型文件。完全跑出一个效果来,真是要烦死人。 为此本民工在把SeetaFace的工程全部编译好之后,重新做了一个新的Demo,并把编译环境一起整合到工程中,界面如下。
![](https://img-blog.csdn.net/20180211114653460)
程序的主要代码如下:voidCR2FaceRecDlg::initRecObj(){ //初始化识别对象 gpFaceDetect= new seeta::FaceDetection("seeta_fd_frontal_v1.0.bin"); gpFaceDetect->SetMinFaceSize(40); gpFaceDetect->SetScoreThresh(2.f); gpFaceDetect->SetImagePyramidScaleFactor(0.8f); gpFaceDetect->SetWindowStep(4,4); gpFacePoint= new seeta::FaceAlignment("seeta_fa_v1.1.bin"); gpFaceIdent= new seeta::FaceIdentification("seeta_fr_v1.0.bin");
}
// 调用测试方法voidCR2FaceRecDlg::runImgTest(){ //比较两张图片的相似度 if((NULL != gpFaceDetect) &&(NULL != gpFacePoint) &&(NULL != gpFaceIdent)){ clock_t start = clock(); //转换灰度 cv::Mat gallery_img_gray; cv::cvtColor(mSrcImage1,gallery_img_gray, CV_BGR2GRAY); cv::Mat probe_img_gray; cv::cvtColor(mSrcImage2,probe_img_gray, CV_BGR2GRAY); ImageData gallery_img_data_color(mSrcImage1.cols, mSrcImage1.rows,mSrcImage1.channels()); gallery_img_data_color.data= mSrcImage1.data; ImageData gallery_img_data_gray(gallery_img_gray.cols,gallery_img_gray.rows, gallery_img_gray.channels()); gallery_img_data_gray.data= gallery_img_gray.data; ImageData probe_img_data_color(mSrcImage2.cols, mSrcImage2.rows,mSrcImage2.channels()); p
4000
robe_img_data_color.data= mSrcImage2.data; ImageData probe_img_data_gray(probe_img_gray.cols,probe_img_gray.rows, probe_img_gray.channels()); probe_img_data_gray.data= probe_img_gray.data; //Detect faces std::vector<seeta::FaceInfo>gallery_faces = gpFaceDetect->Detect(gallery_img_data_gray); int32_t gallery_face_num = static_cast<int32_t>(gallery_faces.size()); std::vector<seeta::FaceInfo>probe_faces = gpFaceDetect->Detect(probe_img_data_gray); int32_t probe_face_num = static_cast<int32_t>(probe_faces.size()); if(gallery_face_num == 0 || probe_face_num == 0) { ::MessageBox(NULL, _T("未发现人脸"), _T("提示"), MB_OK); return; } //Detect 5 facial landmarks seeta::FacialLandmark gallery_points[5]; gpFacePoint->PointDetectLandmarks(gallery_img_data_gray,gallery_faces[0], gallery_points); seeta::FacialLandmark probe_points[5]; gpFacePoint->PointDetectLandmarks(probe_img_data_gray,probe_faces[0], probe_points); //Extract face identity feature floatgallery_fea[2048]; floatprobe_fea[2048]; gpFaceIdent->ExtractFeatureWithCrop(gallery_img_data_color,gallery_points, gallery_fea); gpFaceIdent->ExtractFeatureWithCrop(probe_img_data_color,probe_points, probe_fea); //计算相似度 floatsim = gpFaceIdent->CalcSimilarity(gallery_fea, probe_fea); clock_t count = clock(); doubledTime = (double)(count - start) / 1000.0; mstrCmpResult.Format(_T("图像处理时间:%.4f, 两张图片的相似度是:%.5f "),dTime, sim); UpdateData(FALSE); }
}
好了,废话少说,再说一下程序运行环境配置,开发环境是VS2013,openCV是2.4.13。为什么这样用VC12,而且OpenCV2.4.13其实只有VC14的库,其实一点关系都没有影响,本民工之前还有VS2012上开发OpenCV3.4的工程,另外还把SeetaFace在2.4.9上编译好了,还好好玩了几下。
![](https://img-blog.csdn.net/20180211114935592)
源码工程下载地址:
www.r2funny.com/ R2FaceRec.rar
别外说一下,模型的bin文件可以去Seeta的github上下载,因为那个文件太大了,其它的lib和dll本民工已经编译好放在demo工程里。
程序的主要代码如下:voidCR2FaceRecDlg::initRecObj(){ //初始化识别对象 gpFaceDetect= new seeta::FaceDetection("seeta_fd_frontal_v1.0.bin"); gpFaceDetect->SetMinFaceSize(40); gpFaceDetect->SetScoreThresh(2.f); gpFaceDetect->SetImagePyramidScaleFactor(0.8f); gpFaceDetect->SetWindowStep(4,4); gpFacePoint= new seeta::FaceAlignment("seeta_fa_v1.1.bin"); gpFaceIdent= new seeta::FaceIdentification("seeta_fr_v1.0.bin");
}
// 调用测试方法voidCR2FaceRecDlg::runImgTest(){ //比较两张图片的相似度 if((NULL != gpFaceDetect) &&(NULL != gpFacePoint) &&(NULL != gpFaceIdent)){ clock_t start = clock(); //转换灰度 cv::Mat gallery_img_gray; cv::cvtColor(mSrcImage1,gallery_img_gray, CV_BGR2GRAY); cv::Mat probe_img_gray; cv::cvtColor(mSrcImage2,probe_img_gray, CV_BGR2GRAY); ImageData gallery_img_data_color(mSrcImage1.cols, mSrcImage1.rows,mSrcImage1.channels()); gallery_img_data_color.data= mSrcImage1.data; ImageData gallery_img_data_gray(gallery_img_gray.cols,gallery_img_gray.rows, gallery_img_gray.channels()); gallery_img_data_gray.data= gallery_img_gray.data; ImageData probe_img_data_color(mSrcImage2.cols, mSrcImage2.rows,mSrcImage2.channels()); p
4000
robe_img_data_color.data= mSrcImage2.data; ImageData probe_img_data_gray(probe_img_gray.cols,probe_img_gray.rows, probe_img_gray.channels()); probe_img_data_gray.data= probe_img_gray.data; //Detect faces std::vector<seeta::FaceInfo>gallery_faces = gpFaceDetect->Detect(gallery_img_data_gray); int32_t gallery_face_num = static_cast<int32_t>(gallery_faces.size()); std::vector<seeta::FaceInfo>probe_faces = gpFaceDetect->Detect(probe_img_data_gray); int32_t probe_face_num = static_cast<int32_t>(probe_faces.size()); if(gallery_face_num == 0 || probe_face_num == 0) { ::MessageBox(NULL, _T("未发现人脸"), _T("提示"), MB_OK); return; } //Detect 5 facial landmarks seeta::FacialLandmark gallery_points[5]; gpFacePoint->PointDetectLandmarks(gallery_img_data_gray,gallery_faces[0], gallery_points); seeta::FacialLandmark probe_points[5]; gpFacePoint->PointDetectLandmarks(probe_img_data_gray,probe_faces[0], probe_points); //Extract face identity feature floatgallery_fea[2048]; floatprobe_fea[2048]; gpFaceIdent->ExtractFeatureWithCrop(gallery_img_data_color,gallery_points, gallery_fea); gpFaceIdent->ExtractFeatureWithCrop(probe_img_data_color,probe_points, probe_fea); //计算相似度 floatsim = gpFaceIdent->CalcSimilarity(gallery_fea, probe_fea); clock_t count = clock(); doubledTime = (double)(count - start) / 1000.0; mstrCmpResult.Format(_T("图像处理时间:%.4f, 两张图片的相似度是:%.5f "),dTime, sim); UpdateData(FALSE); }
}
好了,废话少说,再说一下程序运行环境配置,开发环境是VS2013,openCV是2.4.13。为什么这样用VC12,而且OpenCV2.4.13其实只有VC14的库,其实一点关系都没有影响,本民工之前还有VS2012上开发OpenCV3.4的工程,另外还把SeetaFace在2.4.9上编译好了,还好好玩了几下。
源码工程下载地址:
www.r2funny.com/ R2FaceRec.rar
别外说一下,模型的bin文件可以去Seeta的github上下载,因为那个文件太大了,其它的lib和dll本民工已经编译好放在demo工程里。
相关文章推荐
- 人脸识别引擎SeetaFaceEngine中Detection模块使用的测试代码
- 人脸识别引擎SeetaFaceEngine中Identification模块使用的测试代码
- 使用 HTML5, javascript, webrtc, websockets, Jetty 和 OpenCV 实现基于 Web 的人脸识别
- 使用微软人脸API实现人脸识别(java的URL方式)
- Android 使用FACE++架构包实现人脸识别
- python使用opencv实现人脸识别系统
- 人脸识别引擎SeetaFaceEngine中Alignment模块使用的测试代码
- 【Android】Android使用OpenCV实现人脸识别(OpenCV+JavaCV)
- Android使用OpenCV实现「人脸检测」和「人脸识别」
- 使用face++接口实现在Android设备上的人脸识别
- IOS_使用coreImage实现图片中的人脸识别
- Java使用OpenCV实现人脸识别/人眼检测/图片截取/合成/添加水印
- 使用Opencv实现IOS平台下的人脸识别
- 使用腾讯优图SDK,实现人脸识别、身份证OCR识别
- SeetaFace编译使用<中科院人脸识别SDK>
- Unity使用face++实现人脸识别
- 人脸识别引擎SeetaFaceEngine中Detection模块使用的测试代码
- seetaface人脸识别引擎的windows java 实现,可用于搭建人脸识别java web服务器
- Android使用OpenCV实现「人脸检测」和「人脸识别」
- 人脸识别引擎SeetaFaceEngine中Identification模块使用的测试代码