本文主要以简单讲解,百度人脸识别离线SDK(Java)版本工程运行入门级操作阐述。

项目地址  https://gitee.com/xshuai/BaiDuFaceOfflineSample

SDK基础信息介绍

产品概述

人脸离线识别SDK,包含人脸采集、活体检测、人脸对比/识别、人脸库管理等能力,并全部离线化、本地化。此SDK一经授权激活,可完全在无网环境下工作,所有数据皆在设备本地运行处理,可根据业务需要进行灵活的上层业务开发。

适用场景特点

  • 网络:无网、局域网等情况,无法连接公网。如政府单位、金融保险、教育机构等。
  • 安全:行业特点所带来的人脸数据敏感性,即使可以连接公网也不可请求。
  • 速度:由于各地网络线路、机房部署等诸多原因,网络请求速度存在不可控因素。
  • 稳定:需要尽可能避免网络抖动、机房故障等影响,进一步控制可用性影响因素。

更多详细介绍,可以自行查询百度AI官方文档哦 https://ai.baidu.com/docs#/Face-Offline-SDK/top


Step1:成为百度AI开放平台的开发者

先点击此处注册百度账户进入 如下图 的页面快速的建立一个百度账号吧。

Step2:选择人工智能-人脸识别模块

选择离线识别SDK管理

申请SDK(这一步如果企业认证应该就不会有了)

下载Java离线SDK

Step3:解压下载的压缩包

大小在574MB 如果很小有可能下载失败。请再次尝试

包含很多dll文件。截图就不截那么长了。大家知道就行。

Step4:导入项目到开发工具

小帅这次由于电脑问题。试用了IDEA开发工具即(IntelliJ IDEA 2019.1.1 x64)

 简单改造一下项目

创建一个src文件夹。把com文件夹全部丢进src文件夹中

修改src文件夹类型

File-Project Structure 选择左侧Modules 选择src文件夹 点击Mark as 中的Sources

Step5:根据编译及运行说明.txt进行项目配置

1: 安装jdk,推荐jdk1.8(64位)(sdk仅适应于windows的64位平台)
2: 安装eclipse,用eclipse打开工程。(eclipse->import->General->Projects from Folder or Archive)
3:安装opencv(若sdk自带的不能用,则需要安装opencv、sdk自带的opencv的jar及dll分别在opencv-jar和opencv-dll中,导入工程后,要导入jar和jar的native中选dll,不知如何加载的可参考下面链接文章加载),
   在opencv官网下载opencv-3.2.0-vc14.exe,双击安装,定位到build目录夹的java,dll选用x64的库文件。
   opencv的jar加载请自行百度。(如参考文章:https://blog.csdn.net/m1109048058/article/details/76462341,https://blog.csdn.net/qq_36224522/article/details/81390110)
4:eclipse中右键工程,选Java Build Path->Libraries->JRE System Library->Native library location选Edit 定位到工程FaceOfflineSample目录,
   这样可确保java能找到底层c++库文件BaiduFaceApi.dll。否则会提示加载库文件library错误。
5: eclipse中右键工程,选properties,把resource中的Text file encoding调整为UTF-8(防止因为编码风格不是utf-8导致特征值入库保存不正确)
6:编译运行工程。(运行前请通过授权激活,授权激活方法参考百度官网文档,激活文件放于FaceOfflineSample目录中即可)

3不管是eclipse 还是idea都不是必须操作的一步哦

由于是用IDEA。所以只需要看4给出的说明即可。IDEA配置library 稍微有点区别。不过也不麻烦哦。

-Djava.library.path=F:\workpase\FaceOfflineSample  等号后面的改成自己本地所在的位置路径哦

Step6:修改一下代码

上一步配置了VM参数。是针对于项目全局的。所以代码中:

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

需要都改成

System.loadLibrary("./opencv-dll/opencv_java320");

 

FaceLiveness.java修改一下

或许是RD小哥哥小姐姐们不小心写错了boolean。此代码中第67行左右修改成如下即可

  boolean stop = false;

 

Step7:运行一下Face

如果是如下图。证明自己的环境是没有问题的。如果不是。那就要看情况进行修改了

1.如果idea控制台输出

java.lang.UnsatisfiedLinkError: F:\workpase\FaceOfflineSample\BaiduFaceApi.dll: Can't find dependent libraries
	at java.lang.ClassLoader$NativeLibrary.load(Native Method)
	at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
	at java.lang.System.loadLibrary(System.java:1122)
	at com.jni.face.Face.<clinit>(Face.java:216)
Exception in thread "main" 
Process finished with exit code 1

有可能本机环境一些系统DLL库有问题。可以去 http://blog.csdn.net/vbcom/article/  下载最新的3.9修复工具

其他问题。小帅暂未遇到。可以留言发出遇到的问题

1001-not auth 是啥问题看下表就可以知道哦

错误码 错误内容 错误描述
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 未检测到人脸

之前的步骤,咱们也没进行授权任何操作。有这个错误也是正常了。那么接下来咱们就授权一下

 打开工程中LicenseTool.exe文件

操作很简单。就是输入序列号 然后点击 激活即可

序列号在 下载Java离线SDK 那一步就可以得到。一般都会有5个试用的哦。

再次运行Face

"C:\Program Files\Java\jdk1.8.0_211\bin\java.exe" -Djava.library.path=F:\workpase\FaceOfflineSample "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.1\lib\idea_rt.jar=56082:C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_211\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_211\jre\lib\rt.jar;F:\workpase\FaceOfflineSample\out\production\FaceOfflineSample;F:\workpase\FaceOfflineSample\opencv-jar\opencv-320.jar" com.jni.face.Face
sdk init
resource path is:F:\workpase\FaceOfflineSample\face-resource
deme.exe basedir:xxxx sign:xxxx devices:xxxx facesize:xxxx
conf  sdkcount : 1
conf  facecount : 1
conf  attr : 1
conf  is-quality : 1
don't show face_sdk_log
license file path is:F:\workpase\FaceOfflineSample\license.key
authorize(): 7624295 OK OK successfully
is-live: 0
is-quality: 1
thr-not-face: 0.5
min-face-size: 100
thr-illum: 40
thr-blur: 0.7
thr-occlu: 0.5
thr-pitch: 15
thr-yaw: 15
thr-roll: 15
facecount: 1
detect-intv: 1
tracking-intv: 1
is-crop: 0
not-use-track: 0
crop-size: 256
enlarge-ratio: 3
score model init ... F:\workpase\FaceOfflineSample\face-resource//assets/score.binary
dection model init..
detect modle path: F:\workpase\FaceOfflineSample\face-resource//assets/facedetect.binary
align model init ... F:\workpase\FaceOfflineSample\face-resource//assets/align.binary_64
blur model init ... F:\workpase\FaceOfflineSample\face-resource//assets/blur.binary
recognize live model init ...
FeatureExtract 0
FeatureExtract 1
FeatureExtract 2
FeatureExtract 3
FeatureExtract 4
FeatureExtract 5
recognize live model init ... done
score model init ... F:\workpase\FaceOfflineSample\face-resource//assets/score.binary
dection model init..init detect modle: F:\workpase\FaceOfflineSample\face-resource//assets/facedetect.binary
align model init ... F:\workpase\FaceOfflineSample\face-resource//assets/align.binary_64
blur model init ... F:\workpase\FaceOfflineSample\face-resource//assets/blur.binary
align model init ... F:\workpase\FaceOfflineSample\face-resource//assets/align.binary_64
recognize live model init ...
recognize live model init ... done
attribute model init ...
attribute model init ... done
recognize live model init ...
recognize live model init ... done
liveness NIR model init ...
liveness NIR model init ... done
liveness VIS model init ...
liveness VIS model init ... done
liveness DEEP model init ...
liveness DEEP model init ... done
in BaiduFaceApi::is_auth
license file path is:F:\workpase\FaceOfflineSample\license.key
license key is:7U4C-VLCF-6K9R-OBMI
auth result is:1
out BaiduFaceApi::is_auth
in sdk init create_db
-----init m_sdk_services------1
out BaiduFaceApi::sdk_init and init success
device id is:96B8EF45D071C67BCC9A84FED55C70FE

这样就OK了。

会有几个窗口打开。黑色的。具体干嘛的。小帅也没深入研究。慢慢来。咱们可以写个后续

 Step8:调用一下获取人脸属性方法

测试图片准备一张

调用人脸属性的代码来一份 

    public static void main(String[] args) {
        Face face = new Face();
        // 初始化sdk
        // 若采用证件照模式,请把id_card设为true,否则为false,证件照模式和非证件照模式提取的人脸特征值不同,
        // 不能混用
        boolean idCard = false;
        face.sdkInit(idCard);
        String deviceId = face.getDeviceId();
        System.out.println("设备指纹信息:" + deviceId);
        String filePath = "F:\\testimg\\12345678.jpg";
        String result = Face.faceAttr(filePath);
        System.out.println("result = " + result);
    }

输出以下内容

离线目前会返回(丰富度是没有在线接口多的)  

age(年龄)、race(种族 正常人脸标注 0:黄种人 1:白种人 2:黑人 3:阿拉伯人,不完整的人脸标注-1)

expression(表情 0:中性表情,1:微笑,2:大笑)、gender(性别 0: 女 female,1: 男 male,-1: 婴儿或不好辨别性别)

glasses(是否戴眼镜 0:不带眼镜 no glasses,1:普通透明眼镜 glasses,2:太阳镜 sunGlasses)

result = {
	"data" : 
	{
		"log_id" : "1567592002",
		"result" : 
		{
			"age" : "26.000000",
			"expression" : "1",
			"expression_conf" : "0.999573",
			"gender" : "0",
			"gender_conf" : "0.999922",
			"glass" : "0",
			"glass_conf" : "0.999995",
			"race" : "1",
			"race_conf" : "0.994537"
		}
	},
	"errno" : 0,
	"msg" : "success"
}

以上就是Java版本的百度人脸识别离线SDK示例工程运行步骤

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐