更新记录

2.8.1(2023-04-12)

【新增】Android端增加width、height、cameraDegree、cameraWidthRatio、cameraHeightRatio、translateCanvastextMarginBottom属性,主要针对横屏识别进行适配,具体使用请参考文档

2.8.0(2023-04-10)

【功能】增加横屏识别功能

2.7.9(2021-10-18)

【修复】IOS端修复部分属性没有默认值的问题

查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 14.0 armeabi-v7a:支持,arm64-v8a:支持,x86:支持 适用版本区间:9 - 17

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


插件功能概述

  • 支持自定义提示文字颜色、人像框颜色及采集页面背景色
  • 支持设置相机,可配置使用前置或后置摄像头
  • 支持配置是否启用提醒音
  • 支持自定义人脸检测页面相关图片(如:关闭按钮图片、声音图片、检测成功图片、检测失败提示图片)v1.1.2新增
  • 支持修改文字提示框颜色v1.1.2新增
  • 支持用户主动关闭回调(用户点击关闭按钮、虚拟返回键、手势返回都会触发)v1.1.3新增
  • 支持除了返回最佳人脸信息外,新增返回动作人脸信息v1.1.4新增
  • 支持配置是否返回除最佳人像外的其他动作人像信息v1.1.5新增
  • 支持配置人脸模糊程度v1.2.1新增
  • 支持针对不同分辨率设备人脸拉伸问题的兼容v1.3.1新增
  • 支持前/后摄像头无动作人脸采集v1.4.2新增
  • 支持ios端,功能与Android端同步实现v2.4.2新增
  • 支持自定义文字提示,满足特殊的产品需求v2.5.1新增
  • 针对大屏幕及平板设备的人脸采集进行了适配v2.7.7新增
  • 支持横屏识别模式v2.8.0新增
  • 支持自定义相机预览宽高v2.8.1新增
  • 支持自定义相机预览角度v2.8.1新增
  • 支持自定义识别框大小v2.8.1新增
  • 待完善功能。。。

插件接入文档

关于更新

有空闲时间会不断更新维护,有问题随便提,有时间一定会修改,如有不懂的请QQ咨询:1299259684,或者添加QQ群:620436066

特别推荐(注:如果您用于非手机设备,我们还是推荐您用本插件!不推荐用新版,新版本的SDK更侧重于手机端

我们新版的百度人脸采集SDK上线啦!【Android/IOS支持/口罩识别】插件地址:https://ext.dcloud.net.cn/plugin?id=3631

  1. 新增支持戴口罩采集,更加切合您的应用场景
  2. 新增自定义语音文件功能,可以让您的产品不仅仅服务于中国市场
  3. 采集到的图片超清晰,再也没有黑边问题,完美解决有黑边的困扰
  4. 新增辅助动作动画功能,当用户长时间未作出指定动作时,会自动播放动作动画
  5. 全新的采集页面UI,更加美观的页面设计
  6. 可以自由控制人脸采集时的控制属性,满足苛刻的产品要求
  7. 同样支持平板设备
  8. 人脸采集页面支持切换摄像头
  9. 有图片压缩方法,支持采集后的图片再压缩,图片大小可压缩至150KB以下且不影响识别
  10. 人脸采集页面可配置是否开启延迟等待功能,更佳的用户体验

注意事项

  • 一定一定一定要使用正式版的license文件,一定要等正式版的审核通过之后使用正式版的,不要用测试版的license文件,否则造成不可逆的后果自行负责!!!
  • 使用该插件时一定要先试用测试,如果不会搞的可以加群,群里有完整的测试demo,虚拟物品一旦购买之后无法退款!!!

准备工作

  1. Android、ios端证书准备工作
  2. 百度官方资料准备
    • 1) 进入百度人脸识别官网点击这里
    • 2) 点击右上角的控制台,登陆百度账号(没有的自行注册,注意:如果是公司项目使用,请让公司申请账号并认证为企业账号),进入控制台
    • 3) 选择人脸识别 --> 人脸实名认证 --> 项目管理 --> 进行企业认证 ---> 新建项目
  3. 获取licenseID(例:您的授权标识为:test,则android端的licenseID就是test-face-android,ios也是同理)
    • 1) android:licenseID = 授权标识-face-android
    • 2) ios:licenseID = 授权标识-face-ios

接入步骤(QQ:1299259684 不懂可咨询)

最简单的接入步骤(基本10分钟搞定)

  • step1:扫描上方QQ群二维码加入QQ群,下载对应Deom的ZIP压缩包,本插件demo为liyahong-BDFaceLive-Demo
  • step2:解压完成之后会看到很多文件和文件夹,你在桌面新建一个文件夹(最好英文命名哦),然后把你解压到的文件和文件夹拷贝到你创建的这个文件夹下
  • step3:打开hx,然后依次选择文件 --> 导入 --> 从本地目录导入 --> 选择刚才在桌面创建的文件夹 --> 导入成功
  • step4:打开导入的项目,然后打开manifest.json文件,重新获取appid,或者填写你项目的appid都可以
  • step5:回到插件页面,看右边有个试用的按钮,点它,然后弹出来一个模态框,选择试用的项目,点击确认按钮
  • step6:回到hx,然后再次打开manifest.json文件,然后依次选择App原生插件配置 --> 云端插件 --> 选择云端插件 --> 勾选【Android/IOS支持】百度人脸识别的插件
  • step7:替换license文件,详细操作看详细接入步骤的第2条
  • step8:打开pages下的index.vue文件,把里面的licenseID替换为你的
  • step9:打自定义基座包运行测试(包名一定要跟你在百度后台创建license文件的包名保持一致),详细操作看详细接入步骤的第6条及以后

详细接入步骤

  1. 点击试用插件,选择要试用的项目,获取试用资格
  2. 在uni-app项目根目录创建nativeplugins文件夹,然后依次在nativeplugins文件夹下创建以下文件夹,并将刚才下载下来的License授权文件放入assets文件夹下

  3. 自定义资源图片图片放在nativeplugins --> liyahong-BDFaceLive --> android--> assets 文件夹下,IOS只需要在liyahong-BDFaceLive文件夹下创建一个ios文件夹,然后把文件放进去就可以了,注意一定要按照demo中命名规范命名,否则不会生效。

  4. 点击manifest.json --> App 原生插件配置 --> 云端插件 --> 勾选插件对应的插件

  5. 使用插件,传入licenseID(必填),其他参数可以不填
    • 1) 参数说明文档
属性 类型 默认值 必填 说明
licenseID string licenseID与百度资料上的一致
liveArray array ['Eye','Mouth', ....],默认所有动作都有 活体动作数组,如果不要活体动作,只采集人脸,可以设置为[],插件会只采集人脸v1.4.2新增
liveRandom int 0 动作是否随机
sound int 0 是否开启提醒音
camera int 0 使用前置/后置/usb摄像头,0:前置/1:后置/2:usb摄像头
textColor string #F6A623 提示文字颜色
textStorkColor string #F6A623 提示文字边框颜色v1.1.2新增
backgroundColor string #2F2F33 检测页面背景色
roundColor string #FFA800 人像框颜色
callBackOtherImage boolean false 是否回调动作人像数据v1.1.5新增
blur string normal 人像模糊程度,可选值【normal,height,bigHeight】,bigHeight为最清晰v1.2.1新增
tipsModel object {} 自定义每个状态的提示文字内容v2.5.1新增
landscapeMode boolean false 是否为横屏采集模式v2.7.7新增,IOS不支持
screenMode string 'portrait' 屏幕方向,portrait:竖屏,landscape:横屏,注意:当值为landscape时landscapeMode必须设置为truev2.7.7新增,IOS不支持
width int 0 自定义预览画面宽度v2.8.1新增(IOS不支持)
height int 0 自定义预览画面高度v2.8.1新增(IOS不支持)
cameraDegree int 相机预览角度取值(0、90、180、270),如果发现预览角度不对,可以设置此属性(一般用于非手机设备)v2.8.1新增(IOS不支持)
cameraWidthRatio int 0.33 识别框宽度比例,一般用于非手机设备,如果出现人脸框过大可以设置此属性,值越大框越小v2.8.1新增(IOS不支持)
cameraHeightRatio int 0.1 识别框高度比例,一般用于非手机设备,如果出现人脸框过大可以设置此属性,值越大越朝上v2.8.1新增(IOS不支持)
translateCanvas boolean false 是否交换识别框宽高,一般用于非手机设备,如果出现人脸框过大可以设置为truev2.8.1新增(IOS不支持)
textMarginBottom int 8 提示文字距离识别框的距离v2.8.1新增(IOS不支持)
  • 2) 活体动作说明
动作值 说明
Eye 眨眨眼
Mouth 张张嘴
HeadLeft 向左缓慢转头
HeadRight 向右缓慢转头
HeadLeftOrRight 摇摇头
HeadUp 缓慢抬头
HeadDown 缓慢低头
  • 3) 自定义提示文字说明【tipsModel的属性】
属性 类型 默认值
detect_no_face string 未检测到人脸
detect_face_in string 把脸移入框内
detect_zoom_in string 手机拿近一点
detect_zoom_out string 手机拿远一点
detect_head_up string 建议略微抬头
detect_head_down string 建议略微低头
detect_head_left string 建议略微向左转头
detect_head_right string 建议略微向右转头
detect_occ_face string 脸部有遮挡
detect_low_light string 光线再亮些
detect_keep string 请保持不动
detect_standard string 请正对手机
detect_timeout string 检测超时
liveness_eye string 眨眨眼
liveness_eye_left string 请眨眨左边眼睛
liveness_eye_right string 请眨眨右边眼睛
liveness_mouth string 张张嘴
liveness_head_left string 向左缓慢转头
liveness_head_right string 向右缓慢转头
liveness_head_left_right string 摇摇头
liveness_head_up string 缓慢抬头
liveness_head_down string 缓慢低头
liveness_good string 非常好
  • 4) 自定义图片尺寸说明
图片名称 建议尺寸 图片格式 说明
close_live 90*90 png 关闭按钮图片
close_sound 93*93 png 关闭提醒音图片ios不支持
open_sound 93*93 png 打开提醒音图片ios不支持
live_success 171*171 png 动作检测成功图片
live_fail 81*81 png 检测失败提示图片
  • 5) 代码示例
<template>
    <view>
        <button type="default" @click="getPermission">开始采集人脸</button>
        <image :src="faceResult" mode="aspectFit"/>
        <view class="base64Result">{{result}}</view>
    </view>
</template>

<script>
const permissionUtils = require('../../utils/permissionUtils.js')
const bdFaceLive = uni.requireNativePlugin('liyahong-BDFaceLive')

export default {
    data() {
        return {
            result: '',
            faceResult: ''
        };
    },
    onLoad() {},
    methods: {
        /**
         * 检测是否拥有指定权限
         */
        getPermission() {
            let that = this
            permissionUtils.requestPhonePermission(
                'camera',
                [
                    'android.permission.CAMERA'
                ],
                function success() {
                    that.scan()
                },
                function fail(permission) {

                }
            )
        },
        scan() {
            let licenseID = plus.os.name == 'Android' ? 'liyahong-BDFaceLive-face-android' : 'liyahong-BDFaceLive-face-ios'

            // 1.使用插件默认样式
            // bdFaceLive.liveFace({licenseID: licenseID}, result => {
            //  switch (result.code) {
            //      case 1:     //成功
            //          this.faceResult = `data:image/jpg;base64,${result.base64ImageResult}`
            //          this.result = result.base64ImageResult
            //          return
            //      case -1:    //其他错误,如:licenseID没有配置等
            //          break
            //      case -2:    //活体检测超时
            //          break
            //      case -3:    //没有提取到人脸信息
            //          break
            //      case -4:    //用户主动关闭
            //          break
            //  }
            //  this.result = JSON.stringify(result)
            // })

            //2.使用自定义样式
            bdFaceLive.liveFace(
                {
                    licenseID: licenseID, // 必填项,与百度资料上的License ID保持一致
                    /**
                     * Eye: 眨眨眼
                     * Mouth: 张张嘴
                     * HeadLeft: 向左缓慢转头
                     * HeadRight:向右缓慢转头
                     * HeadLeftOrRight:摇摇头
                     * HeadUp:缓慢抬头
                     * HeadDown:缓慢低头
                     * 
                     * 默认所有动作都有,如果填写了会按照指定动作执行,
                     * 如果您只想采集人脸,不需要活体动作,可以设置 liveArray: []
                     */
                    liveArray: ['Eye', 'Mouth'], // 选填【活体动作】
                    liveRandom: 1, // 选填【动作是否随机】,默认有序,0:有序|1:随机
                    sound: 1, // 选填【是否有声】,默认有声,0:有声|1:无声
                    camera: 0, // 选填【前置|后置|usb摄像头】,默认前置,0:前置|1:后置|2:usb摄像头
                    textColor: '#FFFFFF', // 选填【提示文字颜色】,默认#F6A623
                    textStorkColor: '#FF0000', // 选填【提示文字边框颜色】,默认#F6A623
                    backgroundColor: '#0094FF', // 选填【页面背景颜色】,默认#2F2F33
                    roundColor: '#FF0000' ,// 选填【人脸采集框颜色】,默认#FFA800
                    callBackOtherImage: false, // 选填【是否返回动作人像信息】,默认false,true:返回base64ImageResult + otherBase64Image,false:只返回base64ImageResult
                    blur: 'normal', // 选填【人脸图像模糊程度】,默认normal,可取值参见文档
                    tipsModel: { // 选填【自定义提示文字内容】,取值可参考文档,不填则使用插件默认提示
                        detect_no_face: 'No face detected',
                        detect_face_in: 'Please move your face into the frame',
                        liveness_eye: 'Wink',
                        liveness_mouth: 'Open your mouth',
                        liveness_good: 'very good'
                    },
                    landscapeMode: false, // 选填【是否为横屏识别模式】,默认false,如果在大屏设备上出现一直提示'请将人脸移入框内'的提示时,建议将此属性设置为true
                    screenMode: 'portrait', // 选填【屏幕方向】,默认portrait,portrait:竖屏|landscape:横屏,注意:设置landscape时需设置landscapeMode为true
                    /**
                     * width 和 height属性是用来设置人脸采集预览画面的宽高的
                     * 
                     * 1、如果您仅用于手机端采集的话,插件内部已经对所有手机端进行了适配,此属性无需理会,直接设置0即可
                     * 2、如果您将插件用于平板设备、厂商定制机设备、快递员扫码设备可能会出现预览框人脸被拉伸的情况,
                     *    此时您可以来设置width 和 height属性来进行特定的适配,一般设置为width:1080,height:1920即可,
                     *    具体根据设备分辨率来设置
                     */
                    width: 0, // 选填【自定义预览画面宽度】,默认值0
                    height: 0, // 选填【自定义预览画面高度】,默认值0
                    cameraWidthRatio: 0.33, // 选填【识别框宽度比例,一般用于非手机设备,如果出现人脸框过大可以设置此属性,值越大框越小】,默认值0.33
                    cameraHeightRatio: 0.1, // 选填【识别框高度比例,一般用于非手机设备,如果出现人脸框过大可以设置此属性,值越大越朝上】,默认值0.1
                    translateCanvas: false, // 选填【是否交换识别框宽高,一般用于非手机设备,如果出现人脸框过大可以设置为true】,默认值false
                    textMarginBottom: 8 // 选填【提示文字距离识别框的距离】,默认值8
                },
                result => {
                    /**
                     * code=1时会返回base64ImageResult 和 otherBase64Image
                     * 如果使用百度人脸比对的话建议使用base64ImageResult,这个返回的是最佳人像照片,
                     * 做百度人脸比对是完全没有问题的,也是百度官方推荐的
                     * 
                     * otherBase64Image是除了最佳人脸之外的其余动作照片
                     */
                    switch (result.code) {
                        case 1:     //成功
                            this.faceResult = `data:image/jpg;base64,${result.base64ImageResult}`
                            this.result = result.base64ImageResult
                            return
                        case -1:    //其他错误,如:licenseID没有配置等
                            break
                        case -2:    //活体检测超时
                            break
                        case -3:    //没有提取到人脸信息
                            break
                        case -4:    //用户主动关闭
                            break
                    }
                    this.result = JSON.stringify(result)
                }
            )
        }
    }
};
</script>

<style lang="scss">
image {
    margin-top: 32upx;
    width: 355upx;
    height: 355upx;
    background-color: #CCCCCC;
}   

.base64Result {
    margin-top: 32upx;
    font-size: 32upx;
    word-wrap: break-word;
}
</style>
  • 6) 打自定义基座,这里只演示Android的,ios需要自己去申请测试证书
  • 7) 运行项目,注意:插件返回的图片结果是base64格式,如果需要其他处理请自行处理,建议:如果需要上传人脸图片到自己服务器上,建议直接上传base64数据给后端,让后端来转为图片,在前端转换图片会出现未知兼容问题。

  • 8) result返回值说明

属性 返回值说明
code 【必填】状态码,说明见下
msg 【必填】提示信息
base64ImageResult 【选填】最佳人脸信息,base64数据,code=1的时候返回
otherBase64Image 【选填】动作人脸信息,base64数据,code=1的时候返回v1.1.4新增
  • 9) code返回值说明
状态码 返回值说明
1 提取人脸成功
-1 其他错误,如:licenseID没有填写等
-2 检测超时
-3 没有提取到人脸信息
-4 用户主动关闭
  • 10) 常见问题
    1. 为什么我的一直提示把脸移入框内?
      • android/ios目录下的license文件必须替换为你自己的
      • 确定一下包名,包名一定要和你生成的license文件的包名保持一致
      • 一定要打自定义基座包,然后使用自定义基座运行,否则不会包含插件包
      • 打自定义基座包的时候一定要使用自有证书,不要使用公共证书文件
      • 如果以上都没有问题,请确定一下licenseID是否修改成你自己的ID
    2. 为什么插件返回的图片不显示?
      • 注意:插件返回的图片是去掉前缀的base64数据,如果要显示图片请加上前缀
      • 如有不懂请下载实例demo,md文档的实例代码有些被屏蔽了

隐私、权限声明

1. 本插件需要申请的系统权限列表:

摄像头访问权限 Android:android.permission.CAMERA IOS:NSCameraUsageDescription

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

本插件本身不会采集任何用户数据,插件内部集成的是百度离线采集SDK,具体请访问官方说明:https://ai.baidu.com/ai-doc/FACE/Mk37c1pue

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问