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”,如下图:


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进行人脸识别
//www.greatytc.com/p/96636db03792
使用已经封装好的SDK进行人脸识别【人脸特征提取比对】
//www.greatytc.com/p/ab64464571da
虹软ArcFace 2.0,java SDK使用、人脸信息识别(年龄、性别)
//www.greatytc.com/p/cfe90f82be97

需要完整代码,加qq:79295735

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容