java人臉識別 虹軟ArcFace 2.0,java使用jna進(jìn)行封裝 java虹軟SDK

產(chǎn)品地址:http://ai.arcsoft.com.cn/product/arcface.html
虹軟ArcFace功能簡介

  • 人臉檢測
  • 人臉跟蹤
  • 人臉屬性檢測(性別、年齡)
  • 人臉三維角度檢測
  • 人臉對比

虹軟arcface 2.0,相較于以前的版本,api有很大的變化
以前的版本,都是模塊化分開的,如人臉檢測是獨(dú)立的、人臉對比識別是獨(dú)立的、年齡識別、性別識別等都是獨(dú)立的。

2.0版本,整體提供了一個完整的包,如果同時會用到各個功能,更利于使用!

官方提供了windows版本,linux版本,android版本,android版本其實(shí)就是java版本,但因?yàn)槠涫腔赼ndroid平臺,應(yīng)該只有在android平臺上才可以使用。為了滿足java服務(wù)端(windows或Linux 如centos等 平臺)的使用,本人對arcface 2.0的API使用JNA進(jìn)行了封裝。首先需要去虹軟平臺做開發(fā)者認(rèn)證、下載虹軟arcface 2.0 的sdk,參考官方提供的開發(fā)者指南進(jìn)行封裝

封裝后的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 模式:處理連續(xù)幀的圖像數(shù)據(jù),并返回檢測結(jié)果,需要將所有圖
     *            像幀的數(shù)據(jù)都傳入接口進(jìn)行處理; IMAGE 模式:處理單幀的圖像數(shù)據(jù),并返回檢測結(jié)果
     * @param detectFaceOrientPriority
     *            [in] 檢測臉部的角度優(yōu)先值,推薦僅檢測單一角度,效果更優(yōu)
     * @param detectFaceScaleVal[in]
     *            用于數(shù)值化表示的最小人臉尺寸,該尺寸代表人臉尺寸相對于圖片長 邊的占比。 video 模式有效值范圍[2,16], Image
     *            模式有效值范圍[2,32] 推薦值為 16
     * @param detectFaceMaxNum
     *            [in] 最大需要檢測的人臉個數(shù)[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 的倍數(shù)且大于 0
     * @param height
     *            [in] YUYV/I420/NV21/NV12 格式的圖片高度為 2 的倍數(shù),BGR24 格式的圖片高度不限制
     * @param format
     *            [in] 顏色空間格式
     * @param pImgData
     *            [in] 圖片數(shù)據(jù)
     * @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 的倍數(shù)且大于 0
     * @param height
     *            [in] YUYV/I420/NV21/NV12 格式的圖片高度為 2 的倍數(shù),BGR24 格式的圖片高度不限制
     * @param format
     *            [in] 顏色空間格式
     * @param imgData
     *            [in] 圖片數(shù)據(jù)
     * @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] 比對結(jié)果,置信度數(shù)值
     * @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] 初始化中參數(shù) combinedMask 與 ASF_AGE|
                            ASF_FACE3DANGLE 的交集的子集
     * @return  成功返回 MOK,否則返回失敗 codes。
     */
    NativeLong ASFProcess(Pointer hEngine,int width, int height,int format, byte[] imgData,MultiFaceInfo multiFaceInfo,int combinedMask);
    
    /**
     * 獲得年齡,需要先調(diào)用ASFProcess 進(jìn)行預(yù)處理,最高支持4個人臉,多于4張人臉,結(jié)果不可靠(官方說法)
     * @param hEngine
     * @param ageInfo
     * @return
     */
    NativeLong ASFGetAge(Pointer hEngine,AgeInfo ageInfo);
    
    /**
     * 獲得性別信息
     * @param hEngine
     * @param genderInfo
     * @return
     */
    NativeLong ASFGetGender(Pointer hEngine,GenderInfo genderInfo);
    
    /**
     * 獲得人臉角度數(shù)據(jù)
     * @param hEngine
     * @param face3dAngle
     * @return
     */
    NativeLong ASFGetFace3DAngle(Pointer hEngine,Face3DAngle face3dAngle);
    
    Version ASFGetVersion(Pointer hEngine);
    
    NativeLong ASFUninitEngine(Pointer hEngine);
}

使用已經(jīng)封裝好的SDK進(jìn)行人臉識別
http://www.itdecent.cn/p/96636db03792
使用已經(jīng)封裝好的SDK進(jìn)行人臉識別【人臉特征提取比對】
http://www.itdecent.cn/p/ab64464571da
虹軟ArcFace 2.0,java SDK使用、人臉信息識別(年齡、性別)
http://www.itdecent.cn/p/cfe90f82be97

需要完整代碼,加qq:79295735

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容