开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
图像技术
文字识别
人脸与人体识别
视频技术
AR与VR
自然语言处理
知识图谱
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
智能农业
信息服务
智能园区
智能硬件
人脸识别

    windows-基础版

    温馨提示:2020年4月离线采集SDK Win&Linux版本正式下线,若您需要此版本请到离线识别SDK进行申请;老客户转正式版请提交工单申请。

    目录

    1 基础信息
      1.1 产品概述
      1.2 规格信息
      1.3 兼容性
    2 业务介绍
      2.1 功能简介
      2.2 业务流程
    3 快速集成
      3.1 名词介绍
      3.2 SDK文件结构
      3.3 授权激活
      3.4 运行Demo工程
    4 接口说明
      4.1 人脸检测track接口(传入图片)
      4.2 人脸检测track接口(传入二进制图片buffer)
      4.3 人脸检测track_max_face接口
      4.4 人脸检测track_max_face接口(传入二进制图片buffer)
      4.5 人脸检测设置接口
      4.6 USB摄像头检测(实时视频帧人脸检测)
      4.7 人脸检测track接口(传入opencv的mat)
      4.8 人脸质量接口(通过传入图片)
    5 错误码及错误信息
    6 常见问题

    1、基础信息

    1.1 产品概述

    百度FaceSDK Windows基础版是一种面向Windows设备的人脸技术开发包,此版SDK包含人脸检测追踪等方法。基于该方案,开发者可以轻松的构建包含人脸检测、采集的应用。在您使用SDK之前,我们首先为您介绍一下SDK本身及相关人脸能力,以便您能更方便使用人脸服务。

    1.2 规格信息

    • 包大小:~500M(相关库文件较大)
    • 最小人脸检测大小:50px * 50px
    • 可识别人脸角度:yaw ≤ ±30°, pitch ≤ ±30°
    • 检测速度:100ms 720p*
    • 追踪速度:30ms 720p*
    • 人脸检测耗时:< 100ms

    备注:以上指标,由最新版SDK运行在真实设备上,采用真实数据集所得,但算法性能受实际运行设备、实际数据集等情况影响,以上数字仅供参考。

    1.3 兼容性

    • x86、x64两个版本,支持Win7、Win10
    • 推荐基于vs2015进行开发

    2、业务介绍

    2.1 功能简介

    2.1.1 人脸检测与跟踪

    可在设备端,离线实时检测视频流中的人脸。同时支持处理静态图片或者视频流,并对当前检测到的人脸持续跟踪,动态定位人脸轮廓,稳定贴合人脸。

    2.1.2 质量控制

    在人脸检测及追踪过程中,实时校验人脸的姿态角度、遮挡、清晰度、光照条件,符合质量条件的人脸图片才会被采集。

    2.1.3 人脸采集

    针对视频流实时完成人脸图片采集,并输出满足质量过滤条件的人脸图片,可自定义采集人脸大小,采集频率,采集质量等设置。

    2.2 业务流程

    人脸识别的应用场景,核心可以分为三大类:

    1. 身份核验:即1:1对比,判断两张脸的相似度,判断你是你,通常用于需要验证用户身份真实性的场景,如人证对比。
    2. 身份识别:即1:N识别,在一个人脸集合中找到最相似的人脸,判断你是谁,通常用于判断用户身份是否存在,及身份信息内容的场景,如人脸门禁、人脸支付等。
    3. 属性分析:即人脸属性分析,基于人脸信息,返回年龄、性别等属性值,通常用于客群分析、娱乐营销等场景,如统计线下客群年龄分布。

    而以上场景的几乎所有业务过程,核心可以分为两个步骤:

    1. 人脸采集:人脸识别的前置步骤,即获取到人脸图片,用于对比、识别、属性分析等操作。
    2. 人脸分析:包括人脸图片的加工处理,特征抽取与对比,结果返回等一系列操作,也是通常理解为的人脸识别操作。

    要想确保人脸识别的应用效果得到保障,最为核心的一个环节即人脸的获取,即人脸采集。目前市面上所有人脸识别应用落地,面临的主要问题就是应用环境复杂,包括光照、遮挡、作弊攻击等一系列环境因素干扰,涉及产品策略、硬件选型、施工方案等多个维度地综合作用,才能不断提升最终效果。

    3、快速集成

    3.1 名词介绍

    名词 定义
    采集SDK Windows离线人脸识别SDK
    vs2015 微软的开发工具visual studio 2015 (推荐安装vs community 2015)
    License 人脸识别激活所需要的激活文件,可利用激活工具生成
    License_key 创建授权时需要传入的授权标识字段

    3.2 SDK文件结构

    SDK提供动态库BaiduFaceApi.dllBaiduFaceApi.lib及头文件face.h。另外有附带的demo工程BaiduFaceCollect以及鉴权激活工具LicenseTool.exe。

    在此之外,还附带支撑SDK使用的人脸识别模型文件夹face-resource,该文件夹在BaiduFaceCollect示例工程里面,存放路径请参考BaiduFaceCollect工程,默认存放路径为您要开发的exe(如demo工程BaiduFaceCollect.exe)所在路径的上级目录下。若存放不对,可能会影响sdk正常使用,另外请勿删除该文件夹。

    为运行exe,需要用到一些底层的库文件(dll),相关库文件在BaiduFaceCollect的win32和x64文件夹(分别对应x86和x64平台)中均已提供。此外,随BaiduFaceCollect还有一些辅助文件或开源库,如opencv及头文件,base64文件,这些都是开源文件,随demo工程根据用户需要可自行修改,另外就是一些示例demo文件。

    3.3 授权激活

    激活分测试阶段按设备单机授权、和按产品线授权

    • 按设备单机授权:调试阶段的一种授权方式,主要用于指定设备上反复测试程序功能,激活状态只适用于授权的设备硬件。
    • 按产品线授权:针对发布的exe,该exe可应用于所有设备。

    3.3.1 按设备单机授权

    该方式授权,主要用于在测试开发阶段,在测试机器上反复调试编译,所以提供按照设备维度的授权。

    第一步:SDK附带一个LicenseTool.exe,双击可运行,弹出如图所示的设备指纹信息。

    第二步:复制此硬件指纹信息,在后台填写到下图所在的位置,并创建授权,下载对应的License文件。

    第三步(重要!!):在SDK中,您需要在初始化的时候传入license_key,此license_key为您在后台填写的「授权标识」,添加一个-face-winadnlinux-test的后缀,如下图所示,授权标识填写的为「baidutest」,则license_key为:baidutest-face-winadnlinux-test。

    // 传入license_key,牢记在后台填写的「授权标识」,并在此授权标识基础上添加 -face-winadnlinux-test 的后缀
    // 如您填写的授权标识填写的为「baidutest」,则license_key为:baidutest-face-winadnlinux-test
    std::string license_key = "baidutest-face-winadnlinux-test";
    
    //初始化sdk
    sdk_init(license_key.c_str());

    第四步:在官网下载License文件,如下图所示:

    需要重命名为:license.ini,并拷贝到exe所在路径同一目录位置,如SDK的win32或x64目录下。

    以上四步完毕后,您的exe就可以通过授权激活运行。

    3.3.2 按产品线授权

    该方式授权,主要用于发布正式的exe安装包,授权将会识别具体的exe程序,确保指定exe的正常运行。

    :所以每次程序升级,需要单独创建一个License文件进行更新。

    第一步:在后台新建授权中表单中,平台类型选择「Windows & Linux」,授权类型选择「产品线」,并填写以下几个内容:

    1. 授权标识:自定义用于标识您的license授权信息,每个授权只能有唯一的标识,支持英文、数字、横线,20个英文字符以内;
    2. 产品名:填写exe可执行程序的具体名称,例如face.exe,则产品名为face.exe;
    3. 程序文件的md5:此项稍后填写,exe文件的md5:如face.exe,请填写此程序的md5值

    第二步:在SDK初始化的时候传入license_key,此license_key为您在后台填写的「授权标识」,添加一个-face-win的后缀,如下图所示,授权标识填写的为「baidutest」,则license_key为:baidutest-face-win。

    // 传入license_key,牢记在后台填写的「授权标识」,并在此授权标识基础上添加 -face-win 的后缀
    // 如您填写的授权标识填写的为「baidutest」,则license_key为:baidutest-face-win
    std::string license_key = "baidutest-face-win";
    
    //初始化sdk
    sdk_init(license_key.c_str());

    第三步:完成License代码配置后,再编译生成exe文件,用md5命令或工具生成该exe的md5,并填写到第一步的表单中,提交表单,并下载生成的License文件。

    :exe一旦编译后,则license_key和exe不能再编译改变,否则该license文件无法通过激活。

    第四步:若按上述步骤生成license文件后,重命名为:license.ini,并拷贝到exe所在路径同一目录位置,如SDK的win32或x64目录下。则可运行exe通过授权激活。

    3.4 运行Demo工程

    Demo示例工程BaiduFaceCollect展示了如何集成百度人脸识别采集SDK。即导入BaiduFaceApi.dllBaiduFaceApi.lib及头文件face.h。另外为了示例视频人脸跟踪等,用到了一些opencv的库文件以及一些实现demo的支持文件,如image_base64等。

    :这些支持文件均为代码开源或是开源库

    在BaiduFaceCollect中的test_face.cpp的main()方法中,有使用sdk的各个接口方法示例。可通过vs2015双击打开如下图的sln文件。

    后工程展开为(入口函数在test_face.cpp的main方法,请编译release版本的工程,x64或x86):

    SDK实现的主要功能有人脸实时跟踪检测、人脸属性、人脸质量,返回识别出的人脸信息等,另外支持对人脸检测进行设置,达到根据设置进行识别的目的。各接口功能及传入参数和返回结果(返回结果一般为json格式的字符串)详见下方接口说明。

    4、接口说明

    4.1 人脸检测track接口(传入图片)

    方法名

    track

    方法说明

    人脸检测,返回人脸信息

    请求信息

    参数 必须 类型 描述
    out std::vector 返回的检测到的人脸图片信息结构体
    std::vector *& out 通过传入TrackFaceInfo的结构体指针引用,在检测到人脸信息后,用该引用返回人脸信息。TrackedFaceInfo结构体为检测到的人脸信息,其中:box为检测到的人脸框(为FaceInfo结构体,包含人脸框大小,中心点坐标,人脸宽度等信息)landmarks为检测到的人脸关键点,一般为144个。score为人脸打分headPose的向量组为人脸x,y,z的三个角度
    image string 人脸图片信息,根据image_type,传入图片内容
    img_type int 传入的图片类型。为1时候表示base64编码的图片,为2时候表示传入图片的本地路径。BASE64:图片的base64值;FACE_FILE:图片的本地文件路径地址;
    maxTrackObjNum int 最多检测人脸数量,默认为1,最大不超过5

    返回信息

    返回结果为int,表示检测到几个人脸信息,1为1个人,0为没检测到人脸。

    4.2 人脸检测track接口(传入二进制图片buffer)

    方法名

    track_by_buf

    方法说明

    人脸检测,返回人脸信息

    请求信息

    参数 必须 类型 描述
    out std::vector 返回的检测到的人脸图片信息结构体
    std::vector *& out 通过传入TrackFaceInfo的结构体指针引用,在检测到人脸信息后,用该引用返回人脸信息。TrackedFaceInfo结构体为检测到的人脸信息,其中:box为检测到的人脸框(为FaceInfo结构体,包含人脸框大小,中心点坐标,人脸宽度等信息)landmarks为检测到的人脸关键点,一般为144个。score为人脸打分headPose的向量组为人脸x,y,z的三个角度
    image Unsigned char * 人脸图片信息,二进制图片buffer内容
    size int 二进制图片的大小
    maxTrackObjNum int 最多检测人脸数量,默认为1,最大不超过5

    返回信息

    返回结果为int,表示检测到几个人脸信息,1为1个人,0为没检测到人脸。

    4.3 人脸检测track_max_face接口

    方法名

    track_max_face

    方法说明

    检测最大人脸。

    请求信息

    参数 必须 类型 描述
    out std::vector<TrackFaceInfo> 返回的检测到的人脸图片信息结构体
    std::vector *& out 通过传入TrackFaceInfo的结构体指针引用,在检测到人脸信息后,用该引用返回人脸信息。TrackedFaceInfo结构体为检测到的人脸信息,其中:box为检测到的人脸框(为FaceInfo结构体,包含人脸框大小,中心点坐标,人脸宽度等信息);landmarks为检测到的人脸关键点,一般为144个;score为人脸打分;headPose的向量组为人脸x,y,z的三个角度
    image string 图片信息(数据大小应小于10M)
    image_type int 为1时候表示base64编码的图片;为2时候表示传入图片的本地路径。BASE64:图片的base64值;FACE_FILE:图片的本地文件路径地址;

    返回信息

    返回结果为int,表示检测到几个人脸信息,1为1个人,0为没检测到人脸。

    4.4 人脸检测track_max_face接口(传入二进制图片buffer)

    方法名

    track_max_face_by_buf

    方法说明

    检测最大人脸。

    请求信息

    参数 必须 类型 描述
    out std::vector<TrackFaceInfo> 返回的检测到的人脸图片信息结构体
    std::vector *& out 通过传入TrackFaceInfo的结构体指针引用,在检测到人脸信息后,用该引用返回人脸信息。TrackedFaceInfo结构体为检测到的人脸信息,其中:box为检测到的人脸框(为FaceInfo结构体,包含人脸框大小,中心点坐标,人脸宽度等信息);landmarks为检测到的人脸关键点,一般为144个;score为人脸打分;headPose的向量组为人脸x,y,z的三个角度
    image Unsigned char * 人脸图片信息,二进制图片buffer内容
    size int 二进制图片的大小

    返回信息

    返回结果为int,表示检测到几个人脸信息,1为1个人,0为没检测到人脸。

    4.5 人脸检测设置接口

    请参考TestFaceApi工程中的代码示例及头文件BaiduFaceApi.h中的定义及setting.cpp里的代码注释。

    4.6 USB摄像头检测(实时视频帧人脸检测)

    通过打开usb摄像头,返回实时检测到的视频帧人脸信息。请参考TestFaceApi中的示例liveness.cpp中的usb_track_face_info,该方法中用到了人脸检测track视频帧,接口如下4.5:

    4.7 人脸检测track接口(传入opencv的mat)

    方法名

    Track

    方法说明

    人脸检测,返回人脸信息。

    请求信息

    参数 必须 类型 描述
    out std::vector<TrackFaceInfo> 返回的检测到的人脸图片信息结构体
    std::vector *& out 通过传入TrackFaceInfo的结构体指针引用,在检测到人脸信息后,用该引用返回人脸信息。TrackedFaceInfo结构体为检测到的人脸信息,其中:box为检测到的人脸框(为FaceInfo结构体,包含人脸框大小,中心点坐标,人脸宽度等信息);landmarks为检测到的人脸关键点,一般为144个;score为人脸打分;headPose的向量组为人脸x,y,z的三个角度
    Mat Opencv格式的单帧图片mat 人脸图片信息
    maxTrackObjNum int 最多检测人脸数量。默认为1,最大不超过5

    返回信息

    返回结果为TrackedFaceInfo的向量指针,向量组为0时候表示没检测到人脸。TrackedFaceInfo结构体为检测到的人脸信息,其中:box为检测到的人脸框(为FaceInfo结构体,包含人脸框大小,中心点坐标,人脸宽度等信息);landmarks为检测到的人脸关键点,一般为144个;score为人脸打分;headPose的向量组为人脸x,y,z的三个角度。

    4.8 人脸质量接口(通过传入图片)

    方法名

    face_quality

    方法说明

    人脸质量检测接口

    请求信息

    参数 必须 类型 示例描述
    image string 需要检测的人脸图片,小于10M, 图片类型根据image_type参数定
    imgae_type int 图片类型,必选择以下2种形式之一。
    Image_type为1代表BASE64为2代表FACE_FILE。
    BASE64:图片的base64值;
    FACE_FILE:图片的本地文件路径地址;

    返回信息

    errno信息:

    • errno=0 : Success
    • errno>0 : 错误码对应的详细msg

    data信息:

    字段 类型 说明
    bluriness float 模糊度
    illum float 光照
    occl_l_eye float 左眼遮挡度
    occl_r_eye float 右眼遮挡度
    occl_nose float 鼻子遮挡度
    occl_mouth float 嘴巴遮挡度
    occl_l_contour float 左脸遮挡度
    occl_r_contour float 右脸遮挡度
    occl_chin float 下巴遮挡度

    5、错误码及错误信息

    错误码 错误内容 错误描述
    0 SUCCESS 成功
    1 SYSTEM ERROR 系统错误
    2 UNKNOWN ERROR 未知错误
    1001 NOT_AUTH 授权校验失败
    1002 REQUEST PARAMS ERROR 请求参数错误
    1003 DB_OP_FAILED 数据库操作失败
    1004 NO_DATA 没有数据
    1005 RECORD_UNEXIST 记录不存在
    1006 RECORD_ALREADY_EXIST 记录已经存在
    1007 FILE_NOT_EXIST 文件不存在
    1008 GET_FEATURE_FAIL 提取特征值失败
    1009 FILE_TOO_BIG 文件太大
    1010 FACE_RESOURCE_NOT_EXIST 人脸资源文件不存在
    1011 FEATURE_LEN_ERROR 特征值长度错误
    1012 DETECT_NO_FACE 未检测到人脸

    6、常见问题

    Q:编译demo工程时候出现如opencv-win\include\opencv2\flann\logger.h(66): error C4996: 'fopen': This function or variable may be unsafe的错误提示
    A:这种错误一般是因为vs强制要求安全等级提高所致,可以通过右键工程-属性-C/C++ -- 预处理器—预处理器定义中加入:_CRT_SECURE_NO_WARNINGS后重新编译即可解决问题。

    Q:工程运行过程中,提示face-resource不存在
    A:此SDK需要一些模型文件,在demo工程的face-resource文件夹中,该文件夹需要放置在exe所在路径的上级目录下。若放置不正确,可能出现找不到模型文件,没法进行人脸识别。

    Q:exe不能运行或者崩溃
    A:编译的工程exe,需要和dll等在一个文件夹里面,如示例工程win32和x64就有不少动态库dll文件,这是exe运行所需的库文件,不放在一起的话,可能exe不能运行或者崩溃。

    Q:激活后是否可以把激活文件license.ini拷贝到其他设备运行?
    A:如果是按设备激活的,则license.ini和设备绑定,只能用于该设备测试,若是按产品方式激活,则该激活文件可随产品可执行文件一起拷贝到任意设备上运行。

    Q:激活工具license.exe运行不起来,还有其他方法获取测试用的设备指纹吗?
    A:直接运行SDK的exe如BaiduFaceCollect.exe,查看console的输出页面device id:字样后面的串,该串即设备指纹。

    上一篇
    V3.3.0.0版本
    下一篇
    Linux版本