【Java】【入门级操作】百度人脸识别离线SDK
756665228 发布于2019-09-04 18:46 浏览:3708 回复:17
2
收藏

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

本文不提供源码工程。请自行下载。如果没有授权文件下载也是没啥用的。

更多详细介绍,可以自行查询百度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.(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 是啥问题看下表就可以知道哦

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

 打开工程中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示例工程运行步骤

收藏
点赞
2
个赞
共17条回复 最后由756665228回复于2020-06-23 16:33
#3756665228回复于2019-09-05 09:57:24
项目地址  https://gitee.com/xshuai/BaiDuFaceOfflineSample
1
#2756665228回复于2019-09-04 18:48:32

图片不清晰的请访问CSDN

https://blog.csdn.net/u010651369/article/details/100543224
1
#18756665228回复于2020-06-23 16:33:40
#17 sogyap回复
写的很棒,什么时候来个Android SDk的?  

安卓的百度有集成到硬件。开箱即用的那种。

0
#17sogyap回复于2020-06-23 15:25:57

写的很棒,什么时候来个Android SDk的?

 

0
#16756665228回复于2020-02-19 16:46:37
#15 高比kkkk回复
[图片]你好,我一步一步按照你说的配置好了,但是报了这个错误。我前几个月的时候还能运行,现在突然不可以了,请问一下有什么可能得原因造成的呢?
展开

确保你的配置 环境没有变化  错误给出了路径 检查一下文件是否在存在。按道理之前ok 过几个月也是ok的呀。

0
#15高比kkkk回复于2020-02-19 14:08:11

你好,我一步一步按照你说的配置好了,但是报了这个错误。我前几个月的时候还能运行,现在突然不可以了,请问一下有什么可能得原因造成的呢?

0
#14756665228回复于2019-11-05 18:25:20
#13 苏杨three回复
楼主好,人脸注册需要连接自己的数据库吗

不需要。如果需要文章里面就说到了。

貌似用的是access数据库。

更改成自己的暂时还没看到具体的文档说明。如果支持。我也会更新文章的

1
#13苏杨three回复于2019-11-05 14:18:27

楼主好,人脸注册需要连接自己的数据库吗

0
#12756665228回复于2019-09-23 10:45:24
#11 wangwei8638回复
人脸识别离线SDK 需要企业认证?

是的呢。企业认证不花钱的。

1
#11wangwei8638回复于2019-09-22 20:33:24

人脸识别离线SDK 需要企业认证?

0
#10756665228回复于2019-09-20 10:43:05
#9 我爱吃土豆1997回复
您好,如图加载该项目时候出现 "sdk_init fail for face-resource not exist"这个错误该如何解决呢,我已经按照官方文档中方式测试过了还是不行的,[图片]
展开

错误很明显。不存在。在你的 C:\Program Files\Java\jre1.8.0_181\bin 文件夹下面没找到  face-resource 文件夹。

你确定你把face-resource 复制到 C:\Program Files\Java\jre1.8.0_181\bin 目录下了?

 

1
#9我爱吃土豆1997回复于2019-09-19 16:33:12

您好,如图加载该项目时候出现 "sdk_init fail for face-resource not exist"这个错误该如何解决呢,我已经按照官方文档中方式测试过了还是不行的,

0
#8月满西楼人未留回复于2019-09-19 14:30:08
#7 月满西楼人未留回复
楼主您好,Can't find dependent libraries问题不是机器环境的问题。我用Dependencies工具查看了BaiduFaceApi的依赖,发现所需的dll都有,怀疑是依赖的dll没有被加载。 我将加载动态库的静态代码块改为如下,就没有报Can't find dependent libraries了 [代码]
展开

我只是刚刚运行了一下基本功能,如果发现加载其他动态库还报此问题,可以试试用下面这个工具看看依赖库是哪些,然后手动加载一下

https://github.com/lucasg/Dependencies/releases

0
#7月满西楼人未留回复于2019-09-19 14:28:15

楼主您好,Can't find dependent libraries问题不是机器环境的问题。我用Dependencies工具查看了BaiduFaceApi的依赖,发现所需的dll都有,怀疑是依赖的dll没有被加载。

我将加载动态库的静态代码块改为如下,就没有报Can't find dependent libraries了

static {
        // 加载dll
        System.loadLibrary("MSVCP140");
        System.loadLibrary("VCRUNTIME140");
        System.loadLibrary("opencv_world320");
        System.loadLibrary("OpenNI2");
        System.loadLibrary("LIBEAY32");
        System.loadLibrary("SSLEAY32");
        System.loadLibrary("libcurl");
        System.loadLibrary("libwinpthread-1");
        System.loadLibrary("libgcc_s_seh-1");
        System.loadLibrary("libquadmath-0");
        System.loadLibrary("libgfortran-4");
        System.loadLibrary("libgomp-1");
        System.loadLibrary("libopenblas");
        System.loadLibrary("orbe_camera");
        System.loadLibrary("orbe_deeyea");
        System.loadLibrary("facesdk");
        System.loadLibrary("opencv_world320");
        System.loadLibrary("ImiNect");
        System.loadLibrary("ImiCamera");
        System.loadLibrary("hjimi_camera");
        System.loadLibrary("BaiduFaceApi");
        System.loadLibrary("./opencv-dll/opencv_java320");
    }
2
#6rose20135188回复于2019-09-15 16:00:43

写得很详细,

0
#5756665228回复于2019-09-05 16:45:05
#4 何必固執回复
大佬写的很是详细,我觉得我作为.net也可以参照大佬你的

貌似有c# 的sdk吧

0
#4何必固執回复于2019-09-05 15:05:16

大佬写的很是详细,我觉得我作为.net也可以参照大佬你的

0
TOP
切换版块