java人脸识别 虹软ArcFace 2.0,java SDK使用-解决在linux(centos,ubuntu)下参数无效问题

虹软产品地址:http://ai.arcsoft.com.cn/product/arcface.html
虹软ArcFace功能简介

  • 人脸检测
  • 人脸跟踪
  • 人脸属性检测(性别、年龄)
  • 人脸三维角度检测
  • 人脸对比
    本文使用到的SDK为本人自己使用JNA做的封装,2.0的使用比1.x的版本使用更方便,api更集中更科学

在windows 64 系统下,通过jna调用虹软的API,一切正常。在centos下,ubuntu下测试,出现参数无效问题,测试代码如下


FaceEngine ins = FaceEngine.INSTANCE;
        
//SDK激活
ins.ASFActivation(Conf.appId, Conf.appKey);
PointerByReference phEngine = new PointerByReference();
        
//SDK初始化,需要设置模式是video,还是image,配置人脸检测的角度,engine需要支持的功能 mask,最大支持的人脸数量50,人脸大小16
int mask = FaceEngine.ASF_FACE_DETECT | FaceEngine.ASF_FACERECOGNITION | FaceEngine.ASF_AGE | FaceEngine.ASF_GENDER | FaceEngine.ASF_FACE3DANGLE;
NativeLong ret = ins.ASFInitEngine(FaceEngine.ASF_DETECT_MODE_IMAGE, OrientPriority.AFD_FSDK_OPF_0_ONLY, 16,10, mask, phEngine);
if (ret.longValue() != FaceEngine.MOK) {
             System.out.println("ASFInitEngine ERROR:"+ret.longValue());
        return;
}

初始化引擎的时候,会返回错误码“2”,如下图:


java人脸识别 虹软ArcFace 2.0,java SDK使用-解决在linux(centos,ubuntu)下参数无效问题_第1张图片
2222.jpg

后经过一个兄弟的友情帮助,问题总算解决,关于Mode的常量,定义的类型是long,可能是JNA的处理的问题,会把该long当做整形或长整型处理?不确定,但把该参数后面加上一个l,强制将该值定义为 long 类型,问题解决。
代码如下:

public static final long ASF_DETECT_MODE_IMAGE=  0xFFFFFFFFl;

//初始化接口定义
NativeLong ASFInitEngine(long detectMode, int detectFaceOrientPriority, int detectFaceScaleVal,int detectFaceMaxNum, int combinedMask,PointerByReference phEngine);

感谢提供解决方式的兄弟,qq好友 “ Ruby-周”

使用已经封装好的SDK进行人脸识别
https://www.jianshu.com/p/96636db03792
使用已经封装好的SDK进行人脸识别【人脸特征提取比对】
https://www.jianshu.com/p/ab64464571da
虹软ArcFace 2.0,java SDK使用、人脸信息识别(年龄、性别)
https://www.jianshu.com/p/cfe90f82be97

需要完整代码,加qq:79295735

你可能感兴趣的:(java人脸识别 虹软ArcFace 2.0,java SDK使用-解决在linux(centos,ubuntu)下参数无效问题)