由于毕业设计功能需要对人脸进行特征点定位,这两天查看了许多开源的人脸识别库,特地尝试了一下的有ShiqiYu老师所发布的libfacedetection和山世光老师团队所发布的seetaface人脸识别库。其中ShiqiYu老师的libfacedetection这两天才正式开源,所以颇有兴趣得去使用了,在Debug模式下成功运行了该算法,和seetaface比较来看,速度占有比较明显的优势,但是Release版本下运行时始终有链接报错,还需要好好得找一下问题,且提供的测试代码为人脸检测部分,而seetaface则是明确的有人脸检测、对齐、识别三大模块,所以目前还是偏向于使用seetaface。当然libfacedetection也很棒,所以依旧贴上github地址:https://github.com/ShiqiYu/libfacedetection

在对seetaface的初次尝试使用进行介绍前,首先感谢一下开发者的开源分享精神,完完全全是造福了我们这些小菜鸟啊。在这之前,我几乎没有使用过动态链接库的形式,所以在尝试的过程中确实还是碰到了不少问题,好在seetaface的使用资料众多,最终花了2个晚上还是顺利得运行了起来。首先贴github地址:https://github.com/seetaface/SeetaFaceEngine,由于具体的使用方法是在是有太多的Blog介绍了,所以在这里我只贴上我Visual Studio2017 + opencv4.0的情况下测试该算法的测试代码:

#include <cstdint>
#include <fstream>
#include <iostream>
#include <string>
#include <ctime>#include <opencv.hpp>
#include <opencv2\opencv.hpp>#include "face_detection.h"
#include "face_alignment.h"
using namespace std;
using namespace cv;#ifdef _WIN32
//std::string DATA_DIR = "F:/ThirdPartyLib/SeetaFaceEngine-master/FaceAlignment/data/";
std::string DATA_DIR = "F:/ThirdPartyLib/SeetaFaceEngine-master/FaceDetection/data/";
std::string MODEL_DIR = "F:/ThirdPartyLib/SeetaFaceEngine-master/FaceAlignment/model/";
#else
//std::string DATA_DIR = "F:/ThirdPartyLib/SeetaFaceEngine-master/FaceAlignment/data/";
std::string DATA_DIR = "F:/ThirdPartyLib/SeetaFaceEngine-master/FaceDetection/data/";
std::string MODEL_DIR = "F:/ThirdPartyLib/SeetaFaceEngine-master/FaceAlignment/model/";
#endifint main(int argc, char** argv)
{clock_t start, finish;// Initialize face detection modelseeta::FaceDetection detector("F:/ThirdPartyLib/SeetaFaceEngine-master/FaceDetection/model/seeta_fd_frontal_v1.0.bin");detector.SetMinFaceSize(40);detector.SetScoreThresh(2.f);detector.SetImagePyramidScaleFactor(0.8f);detector.SetWindowStep(4, 4);cout << "Face detection model loaded." << endl;// Initialize face alignment model seeta::FaceAlignment point_detector((MODEL_DIR + "seeta_fa_v1.1.bin").c_str());cout << "Face alignment model loaded." << endl;Mat img_color = imread(DATA_DIR + "0_1_1.jpg", IMREAD_UNCHANGED);Mat img_gray;if (img_color.channels() != 1) {cvtColor(img_color, img_gray, COLOR_BGR2GRAY);}else {img_gray = img_color;}seeta::ImageData image_data;image_data.data = img_gray.data;image_data.width = img_gray.cols;image_data.height = img_gray.rows;image_data.num_channels = 1;int pts_num = 5;cout << "Start to detect faces..." << endl;start = clock();// Detect facesstd::vector<seeta::FaceInfo> faces = detector.Detect(image_data);int32_t face_num = static_cast<int32_t>(faces.size());if (face_num == 0){cout << "Error: no face detected." << endl;return 0;}finish = clock();cout << "detect time :" << finish - start << "/" << CLOCKS_PER_SEC << "(s)" << endl;// Detect 5 facial landmarkscout << "Start to align..." << endl;seeta::FacialLandmark points[5];point_detector.PointDetectLandmarks(image_data, faces[0], points);// Visualize the resultsrectangle(img_color, Point(faces[0].bbox.x, faces[0].bbox.y), Point(faces[0].bbox.x + faces[0].bbox.width - 1, faces[0].bbox.y + faces[0].bbox.height - 1), CV_RGB(255, 0, 0));for (int i = 0; i < pts_num; i++){circle(img_color, Point(points[i].x, points[i].y), 2, CV_RGB(0, 255, 0), FILLED);cout << "point[" << i << "] = (" << points[i].x << ", " << points[i].y << ");" << endl;}imshow("result", img_color);waitKey(0);imwrite("F:/Iris/facePics/programPic/result.jpg", img_color);system("pause");return 0;
}

注意使用的时候,需要根据具体情况修改其中的地址变量。

最后,介绍一下,我碰到的问题,总体来说,对于seetaface的使用过程,意外得非常顺利,除了一开始地址手误,导致图片读取失败而报错以外,几乎没有任何其他报错。但是非常不顺利的事,在进行facedetection的过程中,我发现detection非常之慢,大概花了30s左右的时间,这完全是不可能的啊。就是在这期间,我去尝试了ShiqiYu老师的算法,发现虽然时间小于30s,但是也非常慢,确定了这是个绕不开的问题。不过也正是在尝试libfacedetection使用的过程中,我注意到,说明文档里有提到最好采用Release运行,然后,发现,Release运行seetaface就非常之快了,问题也就莫名其妙解决了。在这过程中,我查了许多的资料,并没有任何博主提出过这个点,所以我个人还是觉得有必要记录下来,希望能帮到和我一样,第一次尝试使用第三方动态链接库的人。

SeetaFace使用(问题)相关推荐

  1. 开源人脸识别seetaface入门教程(一)

    简述 seetaface由中科院计算所山世光研究员带领的人脸识别研究组研发.代码基于C++实现,不依赖第三方库.然而,目前开源的代码,是在windows vs上编译的,对于我们这帮mac/linux用 ...

  2. Seetaface 向树莓派 移植

    seetaface由中科院计算所山世光研究员带领的人脸识别研究组研发.代码基于C++实现,不依赖第三方库.然而,目前开源的代码,是在windows vs上编译的,对于我们这帮mac/linux用户来说 ...

  3. 刚刚,SeetaFace版本升级!新增活体检测等功能

    出自中科视拓公司的开放人脸识别引擎SeetaFace一直受到广泛的关注,其提供的人脸检测.特征点检测.人脸识别功能对于开发者快速构建相关能力.上线应用是个很不错的选择,而且商用是免费的,也是其一大亮点 ...

  4. python开源的人脸识别库_什么是 SeetaFace 开源人脸识别引擎

    区分不同的人是很多智能系统的必备能力.为实现此目的,一种可能的技术手段是通过对人脸的光学成像来感知人.识别人,即所谓的人脸识别技术.经过几十年的研发积累,特别是近年来深度学习技术的涌现,人脸识别取得了 ...

  5. Android 面部识别之二(调用开源面部识别算法seetaface检测)

    Android 面部识别之二(调用开源面部识别算法seetaface检测) https://github.com/seetaface/SeetaFaceEngine(Seetaface官方地址) 如果 ...

  6. SeetaFace开源人脸识别引擎

    开源网址 目前,SeetaFace开源人脸识别引擎已全部发布在Github上供国内外同行和工业界使用,项目网址为:https://github.com/seetaface/SeetaFaceEngin ...

  7. Linux 硬件加速 开源人脸识别引擎SeetaFace:第二步在ZedBoard上运行

    两张图片的相似度主函数 在Linux下运行相似度函数,先输入test_face_verification.cpp的code再进行编译输出结果 #include<iostream> usin ...

  8. java集成seetaface_开源人脸识别seetaface入门教程(一)

    简述 seetaface由中科院计算所山世光研究员带领的人脸识别研究组研发.代码基于C++实现,不依赖第三方库.然而,目前开源的代码,是在windows vs上编译的,对于我们这帮mac/linux用 ...

  9. 如何安装并使用SeetaFace 开源人脸识别代码【中科院计算机所山世光老师团队研发】

    最近因为导师接到了一个关于人脸识别的开发项目,需要我们去寻找一些开源的可以二次开发的人脸识别程序.(说白了就是想白嫖,直接调用人家的接口不香吗,可是那得花钱),这时候就在看到网友推荐的SeetaFac ...

最新文章

  1. MPLS ×××的三部分CE、PE和P简介
  2. 东芝移动硬盘拆解图_华为Mate40系列新技术曝光:海思闪存亮相,性能超三星东芝...
  3. mongodb 3.4 安装_Python数据分析及可视化实例之CentOS7.2+MongoDB V3.4 安装
  4. exsi vmfs 没了_它是“推粪机”,隔三差五吃一盘,口臭没了排出宿便,肠道变干净...
  5. ES6 各浏览器支持情况
  6. time(null)的用法
  7. java根据地址解析省市区信息
  8. php 翻转180度,如何翻转视频—将视频翻转90或180度
  9. Git使用小记——复制粘贴快捷键的修改
  10. 房屋租赁合同主要内容是那些
  11. R语言—Shiny框架
  12. 【JavaEE基础与高级 第42章】C3P0连接数据库操作顺序
  13. 2021-9-1 unity实践出真知
  14. python(3.10,Win10 64位)的wordcloud安装
  15. 【SVAC】SVAC 2.0安全系统组成
  16. WSTMall微信版
  17. Android性能优化(三):响应优化
  18. 【笔记】因子投资:方法与实践
  19. python bool类型_python bool数据类型
  20. mysql统计一年中每周的数据,week(时间)和week(时间,1)不同

热门文章

  1. F2FS源码分析-1.6 [F2FS 元数据布局部分] Segment Summary Area-SSA结构
  2. Java字符串格式化详解
  3. 日期和时间范围区间怎么查询
  4. Windows 98光盘启动安装过程详细图解
  5. linux下使用动态壁纸
  6. 入侵检测与防御技术基础
  7. linux qt fscanf,fscanf QT小部件C++
  8. 国外不错的网站(类似知乎)
  9. 1.GoAhead运行
  10. Microsoft visio 2010之简单使用