「seetaface2」中科院人脸识别引擎seetaface2在Linux Qt上的配置教程
笔者的最新私人博客网站经过一段时间的努力,已经初期建设完毕,csdn上的博文会逐渐转移过去~~ 欢迎访问呀~ |=传=送=门=> 多多洛的博客
2016年,中科院山世光老师开源了其研发的seetaface人脸识别引擎,使用VS编译,只能在window系统上运行,若想在Mac和Linux系统上使用,还需进行手动编译;随后又发布了seetaface2版本,这一版本的重大特性在于增加了对Linux和Android的支持,为这两个平台的研发人员提供了很大的便利。
笔者目前主要在Linux平台上进行人脸识别研究和学习,发现网络上目前几乎没有对seetaface2在Linux平台上的完整配置教程,经过笔者的多次试验,总结出在Linux Qt上的较为完整的配置教程(及配置过程中可能遇到的问题),记录如下。
一、seetaface2在LInux上的配置
先介绍一下笔者的开发环境:操作系统是Ubuntu 16.04,Qt版本是4.8.6,Qt Creator版本是4.4.0,OpenCV版本是2.4.9,g++/gcc 编译器的版本是5.4.0。
(一)配置前的准备
Step1 安装依赖环境
打开终端,输入以下命令进行安装:
# 更新软件列表
sudo apt-get update
# 安装依赖环境
sudo apt-get install libopenblas-dev libprotobuf-dev libssl-dev
Step2 下载seetaface2的源码、模型文件
官方的下载链接是:Seetaface2 For Linux
进入链接,依次下载以下四个文件(头文件、链接库文件、FaceCropper链接库文件、模型文件),如下图所示:
并将其放到本地相关目录里。
Step3 在计算机中进行配置
一般来说,第三方的头文件和链接库都统一放于“/usr/local/”目录下,从而便于管理和使用(之前配置OpenCV时,头文件和链接库也是放在这个目录下的)。所以笔者将头文件放在了“/usr/local/include/”
目录下(为了便于整理,新建一个子文件夹,叫seeta,将头文件放入),将链接库放在了“/usr/local/lib/”
目录下。笔者的配置步骤如下,可供参考:
笔者先将所有库文件统一整理到lib文件夹里,头文件整理到seeta文件夹里,如下图所示:
在当前目录下打开终端,输入命令:
sudo mv seeta /usr/local/include/ sudo mv ./lib/lib*.so /usr/local/lib/
这样,在计算机上的配置就完毕了,接下来是在Qt里的配置。
Step4 在Qt中进行配置
新建一个基于C++的Qt Console Application,Build System选择Qmake,创建完成后打开pro文件,加入以下内容,对头文件和库文件进行配置:
INCLUDEPATH += /usr/local/include# OpenCV libs
LIBS += -L/usr/local/lib \
-lopencv_core\
-lopencv_imgproc\
-lopencv_highgui\
-lopencv_ml\
-lopencv_video\
-lopencv_features2d\
-lopencv_calib3d\
-lopencv_objdetect\
-lopencv_contrib\
-lopencv_legacy\
-lopencv_flann
# Seetaface2 libs
LIBS += -L/usr/local/lib \
-lholiday -lSeetaFaceDetector200 -lSeetaFaceRecognizer200 \
-lSeetaPointDetector200 -lSeetaFaceCropper200
(注:笔者的OpenCV头文件也是在/usr/local/include下的,库文件也是在/usr/local/lib下的,读者可自身的路径情况进行修改)
关于pro文件的配置:
笔者最初由于pro文件配置错误,导致Build工程的时候出现了很多问题,所以pro文件一定要书写正确,不然会导致无法找到库文件。
INCLUDEPATH += 是用于指定头文件的目录,可以用绝对或相对路径;相对路径中./可以省略;路径中不允许出现空格。
LIBS += 是动态链接库的配置语句,注意“+=”中间一定不能有空格,这是一个符号,一个整体;后接“-L”指定路径,然后“-l”(小写的L)指定库的名称,注意这里库的名称指的是库文件名“lib”之后,“.so”之前的那段字,比如:
这个库文件的文件名是“libSeetaPointDetector200.so”,那么对应的库的名称是“SeetaPointDetector200”。
LIBS += 可以写在一行,也可以用 \ 断行。
其他的注意事项可以参考这位博主的博文,总结得很不错。
到这里就基本上配置完成了,接下来通过一个demo来检验配置是否成功。
二、seetaface2实例
配置完成后,打开主程序main.cpp,添加以下代码:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>#include <seeta/FaceDetector2.h>
#include <seeta/PointDetector2.h>
#include <seeta/FaceCropper2.h>
#include <seeta/Struct_cv.h>#define FD_MODEL "./bindata/SeetaFaceDetector2.0.ats"
#define PD_MODEL "./bindata/SeetaPointDetector2.0.pts5.ats"int main()
{seeta::FaceDetector2 FD(FD_MODEL);seeta::PointDetector2 PD(PD_MODEL);seeta::FaceCropper2 FC;cv::Mat mat = cv::imread("demo.png");seeta::cv::ImageData image = mat;auto face = FD.Detect(image);auto points = PD.Detect(image, *face);// crop face according to 5 landmarksseeta::cv::ImageData cropped_face = FC.Crop(image, points);cv::Mat cropped_face_mat = cropped_face;cv::imwrite("cropped_face.jpg", cropped_face_mat);return 0;
}
这是官方上提供的一个SeetaFace2 Cropper的例子,可以通过人脸的5个特征点将一幅图像中的人脸ROI切割出来并保存在本地。实验结果如下:
三、编译时可能出现的问题(持续总结更新中…)
▶ 报错:’nullptr’ was not declared in this scope
这是因为seetaface2使用了大量的C++11的新特性,所以编译时需要开启C++11的全部特性。解决方法如下:
- 先确认自己的G++编译器的版本(打开终端,输入
g++ --version
后回车),记下自己的版本 - 打开pro文件进行编辑,如果自己的g++版本 <4.7,那么添加如下配置指令:
QMAKE_CXXFLAGS += -std=c++0x
,如果版本 >= 4.7,则添加QMAKE_CXXFLAGS += -std=c++11
,然后清理一下工程,重新Build即可(注意,一定要确认好版本,不同版本的配置是不通用的)。
「seetaface2」中科院人脸识别引擎seetaface2在Linux Qt上的配置教程相关推荐
- C/C++人脸识别引擎 SeetaFace2打造“刷脸时代”
SeetaFace2 人脸识别引擎包括了搭建一套全自动人脸识别系统所需的三个核心模块,即:人脸检测模块 FaceDetector.面部关键点定位模块 FaceLandmarker 以及人脸特征提取与比 ...
- FaceRecognitionDotNet人脸识别项目发布到linux服务器docker容器详细教程
本人服务器为linux Ubuntu 首先新增Dockerfile,我使用的Dockerfile文件如下: FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS ba ...
- 【SeetaFace】中科院山世光老师开源的Seetaface人脸识别引擎测试
Seetaface发布了第二个版本--Seetaface2: https://github.com/seetaface/SeetaFaceEngine2 SeetaFace2 Engine conta ...
- 人脸识别引擎SeetaFaceEngine简介及在windows7 vs2013下的编译
SeetaFaceEngine是开源的C++人脸识别引擎,无需第三方库,它是由中科院计算所山世光老师团队研发.它的License是BSD-2. SeetaFaceEngine库包括三个模块:人脸检测( ...
- python开源的人脸识别库_什么是 SeetaFace 开源人脸识别引擎
区分不同的人是很多智能系统的必备能力.为实现此目的,一种可能的技术手段是通过对人脸的光学成像来感知人.识别人,即所谓的人脸识别技术.经过几十年的研发积累,特别是近年来深度学习技术的涌现,人脸识别取得了 ...
- SeetaFace开源人脸识别引擎介绍
深度学习大讲堂致力于推送人工智能,深度学习方面的最新技术,产品以及活动.请关注我们的知乎专栏! 区分不同的人是很多智能系统的必备能力.为实现此目的,一种可能的技术手段是通过对人脸的光学成像来感知人.识 ...
- 人脸识别引擎SeetaFaceEngine中Identification模块使用的测试代码
人脸识别引擎SeetaFaceEngine中Identification模块用于比较两幅人脸图像的相似度,以下是测试代码: int test_recognize() {const std::strin ...
- 人脸识别引擎SeetaFaceEngine中Alignment模块使用的测试代码
人脸识别引擎SeetaFaceEngine中Alignment模块用于检测人脸关键点,包括5个点,两个眼的中心.鼻尖.两个嘴角,以下是测试代码: int test_alignment() {std:: ...
- 人脸识别引擎SeetaFaceEngine中Detection模块使用的测试代码
人脸识别引擎SeetaFaceEngine中Detection模块用于人脸检测,以下是测试代码: int test_detection() {std::vector<std::string> ...
最新文章
- ios .framework动态库重签名
- 基于鲁棒图进行概念架构设计
- zabbix简介(第一章第一节)
- 【数学和算法】初识卡尔曼滤波器(二)
- python库怎么绘画_python基础,安装并使用matplotlib库画图
- ADO.NET Entity Framework建模和映射(实体框架)
- 踩坑 - click事件与blur事件冲突问题 input文件上传同名文件问题
- 来自东软的 OpenStack 负载均衡即服务开源项目
- 【HTML/CSS】CSS盒模型及其理解
- python--学习1
- 如何在HTML中加载一个CSS文件?
- Guava的Optional的操作
- linux 基础笔记
- python吃显卡还是内存条_用游戏本打游戏是显卡重要还是内存重要?
- 5G时代下的移动边缘计算(MEC)探索系列之一
- arduino蓝牙模块1
- xlsread错误使用matlab,运行显示错误使用xlsread,未找到文件
- npm切换到国内华为云的镜像
- 程序员内部培训与个人发展杂谈
- 保存网页html 有什么,保存网页时HTML和MHTML区别在哪里