美文网首页
java人脸识别 虹软ArcFace 2.0,java使用jna

java人脸识别 虹软ArcFace 2.0,java使用jna

作者: 团结wang | 来源:发表于2018-11-01 15:20 被阅读0次

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

    • 人脸检测
    • 人脸跟踪
    • 人脸属性检测(性别、年龄)
    • 人脸三维角度检测
    • 人脸对比

    虹软arcface 2.0,相较于以前的版本,api有很大的变化
    以前的版本,都是模块化分开的,如人脸检测是独立的、人脸对比识别是独立的、年龄识别、性别识别等都是独立的。

    2.0版本,整体提供了一个完整的包,如果同时会用到各个功能,更利于使用!

    官方提供了windows版本,linux版本,android版本,android版本其实就是java版本,但因为其是基于android平台,应该只有在android平台上才可以使用。为了满足java服务端(windows或Linux 如centos等 平台)的使用,本人对arcface 2.0的API使用JNA进行了封装。首先需要去虹软平台做开发者认证、下载虹软arcface 2.0 的sdk,参考官方提供的开发者指南进行封装

    封装后的Engine代码

    package com.arcsoft.face;
    
    import com.sun.jna.Library;
    import com.sun.jna.Native;
    import com.sun.jna.NativeLong;
    import com.sun.jna.Pointer;
    import com.sun.jna.ptr.FloatByReference;
    import com.sun.jna.ptr.PointerByReference;
    
    public interface FaceEngine extends Library{
        
        
        public static final long MOK = 0;
        
        public static final int ASF_NONE=0x00000000;
        public static final int ASF_FACE_DETECT=0x00000001;
        public static final int ASF_FACERECOGNITION=0x00000004;
        public static final int ASF_AGE=0x00000008;
        public static final int ASF_GENDER=0x00000010;
        public static final int ASF_FACE3DANGLE=0x00000020;
    
        public static final int ASF_DETECT_MODE_VIDEO=0x00000000;
        public static final int ASF_DETECT_MODE_IMAGE=0xFFFFFFFF;
        
        FaceEngine INSTANCE = (FaceEngine)Native.loadLibrary("libarcsoft_face_engine",FaceEngine.class);
    
        // 激活
        NativeLong ASFActivation(String appId, String sdkKey);
    
        /**
         * 
         * @param detectMode
         *            [in] VIDEO 模式/IMAGE 模式 VIDEO 模式:处理连续帧的图像数据,并返回检测结果,需要将所有图
         *            像帧的数据都传入接口进行处理; IMAGE 模式:处理单帧的图像数据,并返回检测结果
         * @param detectFaceOrientPriority
         *            [in] 检测脸部的角度优先值,推荐仅检测单一角度,效果更优
         * @param detectFaceScaleVal[in]
         *            用于数值化表示的最小人脸尺寸,该尺寸代表人脸尺寸相对于图片长 边的占比。 video 模式有效值范围[2,16], Image
         *            模式有效值范围[2,32] 推荐值为 16
         * @param detectFaceMaxNum
         *            [in] 最大需要检测的人脸个数[1-50]
         * @param combinedMask
         *            [in] 用户选择需要检测的功能组合,可单个或多个
         * @param phEngine
         *            [out] 初始化返回的引擎 handle
         * @return
         */
        NativeLong ASFInitEngine(long detectMode, int detectFaceOrientPriority, int detectFaceScaleVal,
                int detectFaceMaxNum, int combinedMask, PointerByReference phEngine);
    
        /**
         * 
         * @param hEngine
         *            [in] 引擎 handle
         * @param width
         *            [in] 图片宽度为 4 的倍数且大于 0
         * @param height
         *            [in] YUYV/I420/NV21/NV12 格式的图片高度为 2 的倍数,BGR24 格式的图片高度不限制
         * @param format
         *            [in] 颜色空间格式
         * @param pImgData
         *            [in] 图片数据
         * @param detectedFaces
         *            [out] 检测到的人脸信息
         * @return
         */
        NativeLong ASFDetectFaces(Pointer hEngine, int width, int height, int format, byte[] imgData,
                MultiFaceInfo detectedFaces);
    
        /**
         * 
         * @param hEngine
         *            [in] 引擎 handle
         * @param width
         *            [in] 图片宽度为 4 的倍数且大于 0
         * @param height
         *            [in] YUYV/I420/NV21/NV12 格式的图片高度为 2 的倍数,BGR24 格式的图片高度不限制
         * @param format
         *            [in] 颜色空间格式
         * @param imgData
         *            [in] 图片数据
         * @param faceInfo
         *            [in] 单张人脸位置和角度信息
         * @param feature
         *            [out] 人脸特征
         * @return
         */
        NativeLong ASFFaceFeatureExtract(Pointer hEngine, int width, int height, int format, byte[] imgData,
                SingleFaceInfo faceInfo, FaceFeature feature);
    
        /**
         * 
         * @param hEngine
         * @param feature1
         * @param feature2
         * @param confidenceLevel  [out] 比对结果,置信度数值
         * @return
         */
        NativeLong ASFFaceFeatureCompare(Pointer hEngine, FaceFeature feature1, FaceFeature feature2,
                FloatByReference confidenceLevel);
        
        
        /**
         * 
         * @param hEngine [in]
         * @param width [in]
         * @param height [in]
         * @param format  [in]
         * @param imgData  [in]
         * @param multiFaceInfo [in]
         * @param combinedMask  [in] 初始化中参数 combinedMask 与 ASF_AGE|
                                ASF_FACE3DANGLE 的交集的子集
         * @return  成功返回 MOK,否则返回失败 codes。
         */
        NativeLong ASFProcess(Pointer hEngine,int width, int height,int format, byte[] imgData,MultiFaceInfo multiFaceInfo,int combinedMask);
        
        /**
         * 获得年龄,需要先调用ASFProcess 进行预处理,最高支持4个人脸,多于4张人脸,结果不可靠(官方说法)
         * @param hEngine
         * @param ageInfo
         * @return
         */
        NativeLong ASFGetAge(Pointer hEngine,AgeInfo ageInfo);
        
        /**
         * 获得性别信息
         * @param hEngine
         * @param genderInfo
         * @return
         */
        NativeLong ASFGetGender(Pointer hEngine,GenderInfo genderInfo);
        
        /**
         * 获得人脸角度数据
         * @param hEngine
         * @param face3dAngle
         * @return
         */
        NativeLong ASFGetFace3DAngle(Pointer hEngine,Face3DAngle face3dAngle);
        
        Version ASFGetVersion(Pointer hEngine);
        
        NativeLong ASFUninitEngine(Pointer hEngine);
    }
    
    

    使用已经封装好的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使用jna

          本文链接:https://www.haomeiwen.com/subject/ijbtxqtx.html