人脸识别API V2.0

硬件接口API

1. ICCard/身份证/

  • 连接设备

启动监听服务,监听刷卡操作,建议在onResume()方法中执行;


/*
    打开后台监听服务
*/
 IDCardUtil.getInstance().bindIDCardService(Context context);

/*
	nfc模块是以键值形式上报
*/
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
        if (IDCardUtil.getInstance().handleEvent(event)) {return true;}

        return super.dispatchKeyEvent(event);
}
  • 检查功能支持

由于监听服务为异步启动,所以在连接设备后立刻进行功能支持检测不一定准确。 建议在监听回调onMachineConnect中再次进行功能支持检查;

/*
	检测设备是否支持身份证识别
    boolean:true 表示支持、false 表示不支持
*/
boolean result =IDCardUtil.getInstance().isSupportIDCard();

/*
	检测设备是否支持ICCard识别
    boolean:true 表示支持、false 表示不支持
*/
boolean result = IDCardUtil.getInstance().isSupportICCard();
  • 设置刷卡模式

身份证模块虽然支持身份证和ICCard,但是不支持两者同时读取,需根据需要设置读卡模式; NFC模块 只支持 ICCard;

/*
   根据指定刷卡时的读取方式;
   主要分为两种:READCARD_MODE_IDENTITY_CARD和READCARD_MODE_IC_CARD;

    IDCardConfig.READCARD_MODE_IDENTITY_CARD = 0;  //身份证模式
    IDCardConfig.READCARD_MODE_IC_CARD = 1; //ICCard
    IDCardConfig.READCARD_MODE_IDENTITY_CARD_UUID = 2; //身份证UUID模式
*/
IDCardUtil.getInstance().setModel(int readMode);
  • 设置读取ICCard的字节序模式

设置读取ICCard时的字节序模式,默认为大端;

/*
    boolean:true 大端、false 小端
*/
IDCardUtil.getInstance().setICCardEndianMode(boolean useBig);
  • 设置监听和回调函数


/*
	绑定刷卡监听回调
    context 
    callback 监听回调
*/
IDCardUtil.getInstance().setIDCardCallBack(IDCardUtil.IDCardCallBack callBack);
    
//监听回调
IDCardUtil.IDCardCallBack callBack = new IDCardUtil.IDCardCallBack() {

       //监听服务为异步启动,启动后若发现存在读卡设备,则回调onMachineConnect
        @Override
        public void onMachineConnect() {
            Log.i("firefly", "onMachineConnect ");
        }

        //身份证刷卡时执行回调
        @Override
        public void onSwipeIDCard(final IDCardBean info) {
             Log.i("firefly",
                "picture:"+               + "\n" +
                "name:" + info.getName() + "\n" +
                "sex:" + info.getSex() + "\n" +
                "nation:" + info.getNation() + "\n" +
                "birthDate:" + info.getBirthDateStr() + "\n" +
                "address:" + info.getAddress() + "\n" +
                "number:" + info.getNum() + "\n" +
                "issue:" + info.getIssue() + "\n" +
                "expiration date:" + info.getCreateTimeStr() + "-" + info.getValidTimeStr() + "\n" +
                 "picture:"+               + info.getPhoto() + "\n" );
        }

        // IC卡刷卡时执行回调
        @Override
        public void onSwipeICCard(final ICCardBean info) {
             Log.i("firefly", "onSwipeICCard IC=" + info.getIcID());
        }

        // 当设置读卡模式为READCARD_MODE_IDENTITY_CARD_UUID时,刷身份证回调
        @Override
        public void onSwipeIDCardUUID(final String uuid) {
             Log.i("firefly", "onSwipeIDCardUUID uuid=" + uuid);
        }
    };
  • 断开连接

移除监听回调并停止监听服务,建议在onStop()方法中执行;


IDCardUtil.getInstance().setIDCardCallBack(null);
IDCardUtil.getInstance().unBindIDCardService(Context context);

2. 补光灯控制

补光灯分为4种:红外补光灯,白色补光灯,红色补光灯和绿色补光灯;

  • 红外补光灯:

新版机器支持红外补光灯开关(默认为关),旧版机器不支持开关(默认为开). 故提供接口供用户使用。

注:闸机进行活体识别失败时可能是因为红外补光灯没有打开,导致IR活体检测失败


/*
    检测设备是否支持红外补光灯开关;
    Boolean:true 表示支持、false 表示不支持
*/
HardwareCtrl.isSupportInfraredFillLight();

/*
   红外线补光灯操作;
   open  true 表示打开、false 关闭
*/
HardwareCtrl.setInfraredFillLight(open);
  • 白色补光灯:

新版机器支持白色补光灯亮度调节,旧版机器只支持开关;


/*
	检测设备是否支持白色补光灯亮度调节
    Boolean:true 表示支持亮度调节、false 表示不支持
*/
HardwareCtrl.isFillLightBrightnessSupport();

/*
    获取亮度调节的最大值;
*/
int maxValue = HardwareCtrl.getFillLightBrightnessMax();

/*
    获取亮度调节的最小值;
*/
int minValue = HardwareCtrl.getFillLightBrightnessMin();

/*
    打开/关闭,如果支持亮度调节,则开灯时可以传入对应的亮度值;
    enable  true  打开,并设置对应的亮度值;
            false 关闭
*/
HardwareCtrl.ctrlLedWhite(enable,brightness);

/*
    打开/关闭;
    enable  true  打开,若当前版本支持亮度调节则设为亮度最大值
            false 关闭
*/
HardwareCtrl.ctrlLedWhite(enable);


  • 红色LED灯;


/*
    isChecked  true  打开
    		  false 关闭
*/
HardwareCtrl.ctrlLedRed(isChecked);
  • 绿色LED灯;


/*
    isChecked  true 打开
               false 关闭
*/
HardwareCtrl.ctrlLedGreen(isChecked);

3 信号控制

  • “rs485/232”信号操作;

485串口地址:/dev/ttyS4 ,波特率 :19200

232串口地址:/dev/ttyS3 ,波特率 :19200

可以通过cat /dev/ttyS4 或者 cat /dev/ttyS3 查看设置的值变化;


/*
    获取串号serialPort
    485串口:/dev/ttyS4;  232串口:/dev/ttyS3
*/
SerialPort serialPort = HardwareCtrl.openSerialPortSignal(new File("/dev/ttyS3"), 19200, new SerialPort.Callback() {

        //rs485/232发送信号后,接收到的返回值
         @Override
         public void onDataReceived(byte[] bytes, int i) {
            String result = StringUtils.bytesToHexString(bytes, size);
            Log.i("firefly", "result = "+result);
         }
     });

/*
    发送‘48562311’信号
*/
HardwareCtrl.sendSerialPortHexMsg(serialPort, "48562311")

/*
    页面退出时,关闭串口
*/
HardwareCtrl.closeSerialPortSignal(serialPort);
  • 韦根信号操作,监听 韦根输入信号;


/*开始监听韦根输入*/
HardwareCtrl.openRecvMiegandSignal("/dev/wiegand");

/*监听回调*/
HardwareCtrl.recvWiegandSignal(new RecvWiegandCallBack() {
    @Override
    public void recvWiegandMsg(int i) {
            Log.i("firefly", "result = "+i);
    }
});

/*停止监听韦根输入*/
HardwareCtrl.closeRecvMiegandSignal();
  • 韦根输出,分为 韦根26和 韦根34;

/*
    韦根26Output
    通过cat /sys/devices/platform/wiegand-gpio/wiegand26 查看设置的值变化。
*/
HardwareCtrl.sendWiegandSignal("123456789");

/*
    韦根34Output
    通过cat /sys/devices/platform/wiegand-gpio/wiegand34 查看设置的值变化。
*/
HardwareCtrl.sendWiegand34Signal("123456789");
  • 电平信号/继电器信号;


/*
    D0电平信号 isChecked  true 表示打开、false 关闭
*/
LevelSignalUtil.sendSignalD0(isChecked);

/*
    D1电平信号 isChecked  true 表示打开、false 关闭
*/
LevelSignalUtil.sendSignalD1(isChecked);

/*
    继电器信号 isChecked  true 表示打开、false 关闭
*/
RelayUtil.sendRelaySignal(isChecked);

4 二维码


/*
    启动二维码扫描服务
*/
QrCodeUtil.getInstance().init();

/*
    检测设备是否支持二维码功能;
    ret:true 表示支持、false 表示不支持
*/
booean ret = QrCodeUtil.getInstance().isQrCodeSupport();

/*
    添加二维码监听回调
*/
QrCodeUtil.getInstance().setQRCodeCallback(new QrCodeUtil.QRCodeCallback() {
    //监听服务为异步启动,启动后若发现存在二维码设备,则回调onConnect
    @Override
    public void onConnect() {
        Log.i("firefly","QRCode onConnect:");
    }

     //二维码识别的内容回调方法
    @Override
    public void onData(final String s) {
        Log.i("firefly","QRCode onData:"+s);
    }
});

/*
    二维码扫描补光灯操作
    QrCodeUtil.LED_STATE_AUTO //扫码时自动打开
    QrCodeUtil.LED_STATE_ON //常亮
    QrCodeUtil.LED_STATE_OFF //常灭
*/
QrCodeUtil.getInstance().setLedState(int state);

/*
   设置对焦灯状态
    QrCodeUtil.LED_STATE_AUTO //扫码时自动打开
    QrCodeUtil.LED_STATE_ON //常亮
    QrCodeUtil.LED_STATE_OFF //常灭
*/
QrCodeUtil.getInstance().setFocusLedState(int state);

/*
    设置二维码工作状态
    active 为false时不会回调数据而且会自动关闭照明灯
*/
QrCodeUtil.getInstance().setActive(boolean active);

/*
    页面退出时,关闭二维码扫描
*/
QrCodeUtil.getInstance().release();

5. 体温检测

提供了温度校正接口,测温距离为60cm-1m ;


/*
    启动体温检测服务
*/
TempatureUtil.getInstance().openDevice();

/*
    检测设备是否支持体温;
    Boolean:true 表示支持、false 表示不支持
*/
TempatureUtil.getInstance().isSupport();

/*
    添加体温检测监听回调
*/
TempatureUtil.getInstance().setTempatureCallback(new TempatureUtil.TempatureCallback() {
     //监听服务为异步启动,启动后若发现存在测温设备,则回调onConnect
    @Override
    public void onConnect() {
        Log.i("firefly","TempatureCallback onConnect:");
    }

     //体温检测的内容回调方法
    @Override
    public void update(float ambientTempature/*环境温度*/, float objectTempature/*人体温度*/) {
        Log.i("firefly","TempatureCallback update:ambientTempature="+ambientTempature + "objectTempature="+objectTempature);
        
        Log.i("firefly","体温校正后 TempatureCallback update:ambientTempature="+ambientTempature + "objectTempature="+TempatureUtil.correctTemp(objectTempature));
    }
});

/*
   温度校正函数,对体温进行一个简单的校正
   float: objectTempature 人体温度
*/
TempatureUtil.correctTemp(float objectTempature) {
    Log.i("firefly","TempatureCallback onConnect:");
}

/*
    页面退出时,关闭测温功能
*/
TempatureUtil.getInstance().closeDevice();

6. 雷达

监听雷达信号,雷达信号以KeyEvent的形式触发,使用handleEvent(KeyEvent event)处理;

返回值ret说明:

RadarUtil.EVENT_HANDLE_NOTHING_UNHANDLE //非雷达事件未处理 RadarUtil.EVENT_HANDLE_NOTHING_HANDLED //非雷达事件已处理 RadarUtil.EVENT_HANDLE_RADAR_IN //有物体进入 RadarUtil.EVENT_HANDLE_RADAR_OUT; //有物体离开


@Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        int ret = RadarUtil.handleEvent(event);
        if (ret == RadarUtil.EVENT_HANDLE_RADAR_IN) {//物体进入
            Log.i("firefly","EVENT_HANDLE_RADAR_IN");
            return true;
        } else if (ret == RadarUtil.EVENT_HANDLE_RADAR_OUT) { //物体离开
            Log.i("firefly","EVENT_HANDLE_RADAR_OUT");
            return true;
        } else if (ret == RadarUtil.EVENT_HANDLE_NOTHING_HANDLED) { //无物体
            Log.i("firefly","EVENT_HANDLE_NOTHING_HANDLED");
            return true;
        }

        return super.dispatchKeyEvent(event);
    }

Android 快速入门

1.添加依赖库

1.将 Demo工程 faceEngineYtlf/libs/ 目录下的 aar包拷贝到 AS 工程对应的 libs 文件夹下;
2.将 Demo工程 faceEngineYtlf/src/main/assets 目录下 ytlf_v2 文件夹,拷贝到 AS 工程对应的 src/main/assets文件夹下;

2.添加编译 aar 信息

implementation(name: 'arctern-release', ext: 'aar')
implementation(name: 'iface-release', ext: 'aar')
implementation(name: 'faceEngineYtlfExternal', ext: 'aar')
    
到 build.gradle 的 dependencies

详细请参照技术案例Demo工程配置和 doc/FaceEngine集成说明截图.png;

3.设置权限

在AndroidManifest.xml文件中添加如下权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-feature android:name="android.hardware.camera" android:required="true"/>
<uses-permission android:name="android.permission.CAMERA"/>

4.在程序中初始化YTLFFaceManager

实例YTLFFaceManager时,需要指明本地SD卡文件存放目录rootPath,例如:”/sdcard/firefly/”; 首次启动SDK时,会检查本地SD卡是否存在models 和 license公钥等文件,如果没有,那么默认会从App assets 目录下拷贝必需文件到rootPath目录;

YTLFFaceManager.getInstance().initPath(String rootPath);

5.通过 YTLFFaceManager 调用 Face API 接口

人脸识别SDK

V2.0版采用线程池的异步处理方式,提高系统的利用率,减少人脸检测、人脸跟踪等服务的响应时间;

本SDK开发指南指导您如何安装和配置开发环境,如何通过调用 SDK 提供的接口函数(API)进行二次开发与系统集成。 用户按照要求调用SDK提供的API即可实现使用 人脸检测、人脸跟踪、活体判断、人脸识别等服务的目的。

1. SDK接入

1.1 SDK初始化

实例YTLFFaceManager时,需要指明本地SD卡文件存放目录rootPath,例如:”/sdcard/firefly/”; 首次启动SDK时,会检查本地SD卡是否存在models 和 license公钥等文件,如果没有,那么默认会从App assets 目录下拷贝必需文件到rootPath目录;


// 指定 本地SD卡文件存放目录
YTLFFaceManager.getInstance().initPath(String rootPath);

1.2 激活 License

初始化时会检查本地是否存在密钥,若无则进行在线激活,激活结束后会回调激活状态,分为同步和异步两种激活方式 ;


// 异步方式
YTLFFaceManager.getInstance().initLicenseByAsync(String apiKey, new InitLicenseListener(){
                @Override
                public void onLicenseSuccess() {
                            toast("激活成功");
                }

                @Override
                public void onLicenseFail(final int code,final String msg) {
                            toast("激活失败");
                }
            });


// 同步方式 true 表示激活成功
boolean result = YTLFFaceManager.getInstance().initLicense(String apiKey);

1.3 获取设备唯一编码

获取当前设备的 signature ,设备的唯一编码;


/*
   String :返回当前设备的 signature 即设备当前的唯一编码
*/
String signature = YTLFFaceManager.getInstance().getSignature();

2. SDK 启动

启动SDK时,会检测运行环境和初始化SDK,有同步和异步两种启动方式;

2.1 同步方式启动SDK


/*
    通过FACE_PATH 判断出 config_path,即Config.json 文件存放目录
    eg:  sdcard/firefly/ytlf_v2/config.json"

   Int:0 表示成功、1 表示失败
*/
int result = YTLFFaceManager.getInstance().startFaceSDK();

/*
     config_json 指明config.json 内容

   Int:0 表示成功、1 表示失败
*/
int result = YTLFFaceManager.getInstance().startFaceSDKByConfigJson(String config_json);

2.2 异步方式启动SDK 为防止初始化并启动SDK时占用过多时间,造成阻塞主线程,可以使用异步方式启动SDK;


 /*
     config_json 指明config.json 内容
     runSDKCallback 异步启动后的回调方法
*/
 YTLFFaceManager.getInstance().startFaceSDKByAsynchronous(String config_json, new RunSDKCallback(){
    @Override
    public void onRunSDKListener(int i) {   //Int:0 表示成功、1 表示失败

    }
});

3. 人脸实时数据送检

根据传入检测器的数据进行人脸检测与跟踪,并实时返回人脸检测的结果以及人脸跟踪 的结果,注意:输入人脸检测器的数据人脸方向应为正向,即人脸角度应为 0 度而非其他的 角度; 目前通过输送 RGB 以及 IR 视频流来进行人脸检测跟踪以及活体的相关检测 当不需要打开 IR 摄像头或不需要活体检测时 IR 数据参数可传 RGB 参数,不可传 NULL;

//从摄像头回调函数中获取视频流,实时输  RGB 视频流以及 IR 视频流
 YTLFFaceManager.getInstance().doDelivery(ArcternImage img_rgb,  ArcternImage img_ir)
    
//设置RGB和IR监听回调函数
 YTLFFaceManager.getInstance().setOnDetectCallBack(new DetectCallBack() {
        //  RGB 回调:
        @Override
        public void onDetectListener(ArcternImage arcternImage, ArcternRect[] arcternRects, float[] confidences) {
        
        }

    //  IR 回调:
    @Override
    public void onLivingDetectListener(ArcternImage arcternImage, ArcternRect[] arcternRects, float[] confidences) {

    }
});

/*参数说明:
    arcternImage RGB/IR 检测的人脸图数据
    arcternRects  RGB/IR 检测到的人脸框集合
    confidences RGB/IR 检测到每个人脸的置信度
*/

4. 人脸实时跟踪回调

如果回调接口有数据返回,那么说明实时数据正在检测跟踪;

//设置人脸实时检测跟踪回调
YTLFFaceManager.getInstance().setOnTrackCallBack(new TrackCallBack() {

/*人脸实时检测跟踪
    arcternImage 检测的人脸图数据
    trackIds  图像中人脸的跟踪 ID
    arcternRects 检测到的人脸位置
*/
    @Override
    public void onTrackListener(ArcternImage arcternImage, long[] trackIds, ArcternRect[] arcternRects) {

    }
});

5. 实时人脸属性检测

进行实时人脸检测跟踪时,添加人脸属性检测回调方法,可以实时接收人脸属性,包括活体检测值、质量、人脸角度、口罩、图像颜色。

//设置实时人脸属性检测回调
YTLFFaceManager.getInstance().setOnAttributeCallBack(new AttributeCallBack() {

/*人脸属监听回调:
    arcternImage 检测的人脸图数据
    arcternRects 检测到的人脸位置
    trackIds  图像中人脸的跟踪 ID
    arcternAttribute 图像中所有人脸的所有属性
*/
    @Override
    public void onAttributeListener(ArcternImage arcternImage, long[] trackIds, ArcternRect[] arcternRects, ArcternAttribute[][] arcternAttributes, int[] landmarks) {
        StringBuilder s = new StringBuilder();
        for (int i = 0; i < arcternRects.length; i++) {
            for (int j = 0; j < arcternAttributes[i].length; j++) {
                ArcternAttribute attr = arcternAttributes[i][j];
                switch (j) {
                    case ArcternAttribute.ArcternFaceAttrTypeEnum.POSE_PITCH:
                        s.append("人脸角度:\n以x轴为中心,脸部上下俯仰角度:").append(attr.confidence);
                        break;
                    case ArcternAttribute.ArcternFaceAttrTypeEnum.POSE_YAW:
                        s.append("\n以y轴为中心,脸部左右旋转角度:").append(attr.confidence);
                        break;
                    case ArcternAttribute.ArcternFaceAttrTypeEnum.POSE_ROLL:
                        s.append("\n以中心点为中心,x-y平面旋转角度:").append(attr.confidence);
                        break;
                        
                    case ArcternAttribute.ArcternFaceAttrTypeEnum.QUALITY:
                        s.append("\n人脸质量:").append(attr.confidence);
                        break;
                        
                    case ArcternAttribute.ArcternFaceAttrTypeEnum.LIVENESS_IR:
                        if (attr.label != -1) {
                            if (attr.confidence >= 0.5) {
                                s.append("\n活体检测:活体 ").append(attr.confidence);
                            } else {
                                s.append("\n活体检测:非活体 ").append(attr.confidence);
                            }
                        }
                        break;
                        
                    case ArcternAttribute.ArcternFaceAttrTypeEnum.IMAGE_COLOR:
                        if (attr.label == ArcternAttribute.LabelFaceImgColor.COLOR) {
                            s.append("\n彩图 ").append(attr.confidence);
                        } else {
                            s.append("\n黑白图 ").append(attr.confidence);
                        }
                        break;
                        
                    case ArcternAttribute.ArcternFaceAttrTypeEnum.FACE_MASK:
                        if (attr.label == ArcternAttribute.LabelFaceMask.MASK) {
                            s.append("\n口罩 ").append(attr.confidence);
                        } else {
                            s.append("\n未带口罩 ").append(attr.confidence);
                        }
                        break;
                }
            }
        }
    }
});

6. 人脸实时搜索

根据传入检测器的数据进行实时搜索,从数据库中搜索相似度大于设置相似度最高的一个 ID,通过 ID 可获取到识别的人脸以及其相关信息;

//设置人脸实时搜索回调
YTLFFaceManager.getInstance().setOnSearchCallBack(new SearchCallBack() {


/*搜索回调:
    arcternImage 检测的人脸图数据
    trackIds  图像中人脸的跟踪 ID
    arcternRects 检测到的人脸位置
    searchId_list 图像中识别人脸的 id 集合
*/
    @Override
public void onSearchListener(ArcternImage arcternImage, long[] trackId_list, ArcternRect[] arcternRects, long[] searchId_list, int[] landmarks, float[] socre) {
    if (searchId_list.length > 0 && searchId_list[0] != -1) {
        Person person = DBHelper.get(searchId_list[0]);
        if (person != null) {
            //通过 ID 可获取到识别的人脸以及其相关信息;
        }
    } else {
            // 人脸不存在;
    }
}

7. 指定图片文件提取人脸特征值

根据检测的人脸提取人脸特征值,可以用于人脸比对;


/*指定图片文件提取人脸特征值:
    imagePath 图片地址
    etractCallBack  人脸特征提取回调
*/
YTLFFaceManager.getInstance().doFeature(imagePath, new ExtractCallBack() {

/*
    acternImage 提取特征值的图片
    bytes  多个人脸的人脸特征值集合
    arcternRects  人脸检测结果集合
*/
    @Override
    public void onExtractFeatureListener(ArcternImage arcternImage, byte[][] bytes, ArcternRect[] arcternRects) {
    
        if (features.length > 0) {
            debugLog("bitmapFeature.length: " + features[0].length);
        } else {
            Tools.debugLog("特征值为空!!!");
        }
    });

8. 图片Bitmap 进行特征值提取

根据人脸图片Bitmap 提取人脸特征值,可以用于人脸比对;


/*指定人脸图片Bitmap提取人脸特征值:
    bitmap 图片Bitmap数据
    etractCallBack  人脸特征提取回调
*/
YTLFFaceManager.getInstance().doFeature(Bitmap bitmap, new ExtractCallBack())

/*
    acternImage 提取特征值的图片
    bytes  多个人脸的人脸特征值集合
    arcternRects  人脸检测结果集合
*/
    @Override
    public void onExtractFeatureListener(ArcternImage arcternImage, byte[][] bytes, ArcternRect[] arcternRects) {
    
        if (features.length > 0) {
            debugLog("bitmapFeature.length: " + features[0].length);
        } else {
            Tools.debugLog("特征值为空!!!");
        }
    });

9. 获取人脸的眼睛、嘴巴、鼻子等等landmarks坐标

根据人脸ArcternImage提取人脸特征值,可以用于获取人脸的眼睛、嘴巴、鼻子等等landmarks坐标;


a/*
    指定ArcternImage提取人脸特征值,包含landmarks
*/
ArcternAttrResult ArcternAttrResult = YTLFFaceManager.getInstance().doFeature(ArcternImage arcternImage))

10. 人脸特征比对

通过两个特征值进行比对,得出两个人脸特征值的相似度;


/*
    feature1 第一个人脸特征值
    Feature2  第二个人脸特征值
    
    return float :返回人脸比对相似度
*/
float result = YTLFFaceManager.getInstance().doFeature(byte[] feature1,  byte[] feature2)

11. 人脸库管理

11.1 人脸入库

将提取出来的人脸特征值和相关 Id,添加到SDK人脸数据库;


/*
    id 人脸 ID
    feature  人脸的特征值
    
    Int:0 表示执行成功、1 表示执行失败
*/
int result = YTLFFaceManager.getInstance().dataBaseAdd(long id, byte[] feature)

11.2 人脸库删除

根据指定的 Id,删除SDK人脸数据库的人脸信息;


/*
    id 人脸 ID
 
    Int:0 表示执行成功、1 表示执行失败
*/
int result = YTLFFaceManager.getInstance().dataBaseDelete(long id)

11.3 人脸库更新

根据指定的 Id,更新SDK人脸数据库的人脸信息;


/*
    id 人脸 ID
    feature  人脸的特征值
 
    Int:0 表示执行成功、1 表示执行失败
*/
int result = YTLFFaceManager.getInstance().dataBaseUpdate(long id, byte[] feature)

11.4 人脸批量添加特征值

根据指定的多个 Id,批量更新SDK人脸数据库对应的多个人脸信息;


/*
    id 人脸 ID 数组
    feature  多个人脸特征值数组
 
    Int:0 表示执行成功、1 表示执行失败
*/
int result = YTLFFaceManager.getInstance().dataBaseAdd(long[] id, byte[][] feature)

11.5 人脸数据清除

删除SDK人脸数据库的所有人脸信息;


/*
    Int:0 表示执行成功、1 表示执行失败
*/
int result = YTLFFaceManager.getInstance().dataBaseClear()