Skip to content

使用方法

安卓百度离线人脸识别UTS原生组件,支持UVC/USB外接摄像头,支持在线激活,离线激活,批量激活,单个人脸注册,批量注册,相机人脸注册等,插件使用灵活识别速度快,插件支持自定义数据存储目录,支持UVC/USB外接摄像头识别和注册。插件支持uniapp和uniappx

注意事项

  • 当前插件为1.x版本的升级版,同时支持uniapp和uniappx
  • 当前2.*版本更新内容较多,使用方法有重大更新,如果您当时使用的是1.*版本请移步至1.*版本文档
  • 1.*版本不再更新,后期将直接更新2.*版本
  • 如果您在使用插件的过程中有任何问题,可以联系作者,作者将全力协助您使用插件
  • 本文档同时提供了uniapp的用法示例和uniappx的用法示例,插件市场导入的示例项目仅为uniapp的用法示例,如果您需要uniappx的示例项目可以通过下方的链接下载示例

    https://pan.baidu.com/s/1wzBqoNVucaJ3WD1-bSkUYw?pwd=67w3

  • 组件只能在nvue/uvue页面中使用,不支持vue页面

相关链接

使用流程

  1. 在线激活
  2. 初始化SDK
  3. 注册人脸
  4. 识别人脸

SDK版本

V8.6.0.2026.04.15

联系作者

关注微信公众号可联系作者

官方文档

https://ai.baidu.com/ai-doc/FACE/pk37c1mqu

插件地址

https://ext.dcloud.net.cn/plugin?id=24993

演示程序

进群下载演示程序

演示程序仅打包了arm64-v8a设备支持的apk,如需演示可下载apk后在手机上演示

权限

  • android.permission.CAMERA
  • android.permission.WRITE_EXTERNAL_STORAGE
  • android.permission.READ_EXTERNAL_STORAGE

API用法

用法

在需要使用插件的页面加载以下代码

js
import * as module from "@/uni_modules/leven-uts-bdUvcFace"
js
import * as module from "@/uni_modules/leven-uts-bdUvcFace"

示例

vue
<template>
  <view style="padding: 16px;">
    <uni-card title="设置">
      <uni-grid>
        <uni-grid-item>
          <view class="grid-box" @click="toPage('manager')">
            <view style="margin-bottom: 5px;">
              <uni-icons type="staff-filled" size="36"></uni-icons>
            </view>
            <view>人脸管理</view>
          </view>
        </uni-grid-item>
      </uni-grid>
    </uni-card>
    <uni-card title="UVC摄像头">
      <uni-grid>
        <uni-grid-item>
          <view class="grid-box" @click="toPage('register')">
            <view style="margin-bottom: 5px;">
              <uni-icons type="personadd-filled" size="36"></uni-icons>
            </view>
            <view>人脸注册</view>
          </view>
        </uni-grid-item>
        <uni-grid-item>
          <view class="grid-box" @click="toPage('fullScreen')">
            <view style="margin-bottom: 5px;">
              <uni-icons type="person-filled" size="36"></uni-icons>
            </view>
            <view>全屏识别</view>
          </view>
        </uni-grid-item>
        <uni-grid-item>
          <view class="grid-box">
            <view style="margin-bottom: 5px;" @click="toPage('round')">
              <uni-icons type="contact-filled" size="36"></uni-icons>
            </view>
            <view>圆形识别</view>
          </view>
        </uni-grid-item>
        <uni-grid-item>
          <view class="grid-box">
            <view style="margin-bottom: 5px;" @click="toPage('circle')">
              <uni-icons type="circle" size="36"></uni-icons>
            </view>
            <view>自定义圆角</view>
          </view>
        </uni-grid-item>
        <uni-grid-item>
          <view class="grid-box" @click="toPage('identity')">
            <view style="margin-bottom: 5px;">
              <uni-icons type="images" size="36"></uni-icons>
            </view>
            <view>人证核验</view>
          </view>
        </uni-grid-item>
        <uni-grid-item>
          <view class="grid-box" @click="toPage('attribute')">
            <view style="margin-bottom: 5px;">
              <uni-icons type="person-filled" size="36"></uni-icons>
            </view>
            <view>属性模式</view>
          </view>
        </uni-grid-item>
      </uni-grid>
    </uni-card>
    <uni-card title="设备自带摄像头">
      <uni-grid>
        <uni-grid-item>
          <view class="grid-box" @click="toDevicePage('register')">
            <view style="margin-bottom: 5px;">
              <uni-icons type="personadd-filled" size="36"></uni-icons>
            </view>
            <view>人脸注册</view>
          </view>
        </uni-grid-item>
        <uni-grid-item>
          <view class="grid-box" @click="toDevicePage('fullScreen')">
            <view style="margin-bottom: 5px;">
              <uni-icons type="person-filled" size="36"></uni-icons>
            </view>
            <view>全屏识别</view>
          </view>
        </uni-grid-item>
        <uni-grid-item>
          <view class="grid-box">
            <view style="margin-bottom: 5px;" @click="toDevicePage('round')">
              <uni-icons type="contact-filled" size="36"></uni-icons>
            </view>
            <view>圆形识别</view>
          </view>
        </uni-grid-item>
        <uni-grid-item>
          <view class="grid-box">
            <view style="margin-bottom: 5px;" @click="toDevicePage('circle')">
              <uni-icons type="circle" size="36"></uni-icons>
            </view>
            <view>自定义圆角</view>
          </view>
        </uni-grid-item>
        <uni-grid-item>
          <view class="grid-box" @click="toDevicePage('identity')">
            <view style="margin-bottom: 5px;">
              <uni-icons type="images" size="36"></uni-icons>
            </view>
            <view>人证核验</view>
          </view>
        </uni-grid-item>
        <uni-grid-item>
          <view class="grid-box" @click="toDevicePage('attribute')">
            <view style="margin-bottom: 5px;">
              <uni-icons type="person-filled" size="36"></uni-icons>
            </view>
            <view>属性模式</view>
          </view>
        </uni-grid-item>
      </uni-grid>
    </uni-card>
  </view>
</template>

<script>
  import * as module from "@/uni_modules/leven-uts-bdUvcFace"
  export default {
    data() {
      return {

      }
    },
    mounted() {
      this.$nextTick(() => {
        //初始化sdk
        this.initSdk();
      })
    },
    methods: {
      //显示消息
      showMessage(message) {
        uni.showToast({
          title: message,
          icon: "none"
        })
      },
      toPage(type) {
        switch (type) {
          case "register":
            uni.navigateTo({
              url: "/pages/index/uvc/register"
            })
            break
          case "fullScreen":
            uni.navigateTo({
              url: "/pages/index/uvc/fullScreen"
            })
            break
          case "round":
            uni.navigateTo({
              url: "/pages/index/uvc/round"
            })
            break
          case "circle":
            uni.navigateTo({
              url: "/pages/index/uvc/circle"
            })
            break
          case "identity":
            uni.navigateTo({
              url: "/pages/index/uvc/identity"
            })
            break
          case "attribute":
            uni.navigateTo({
              url: "/pages/index/uvc/attribute"
            })
            break
          case "manager":
            uni.navigateTo({
              url: "/pages/index/manager"
            })
            break
        }
      },
      toDevicePage(type) {
        switch (type) {
          case "register":
            uni.navigateTo({
              url: "/pages/index/device/register"
            })
            break
          case "fullScreen":
            uni.navigateTo({
              url: "/pages/index/device/fullScreen"
            })
            break
          case "round":
            uni.navigateTo({
              url: "/pages/index/device/round"
            })
            break
          case "circle":
            uni.navigateTo({
              url: "/pages/index/device/circle"
            })
            break
          case "identity":
            uni.navigateTo({
              url: "/pages/index/device/identity"
            })
            break
          case "attribute":
            uni.navigateTo({
              url: "/pages/index/device/attribute"
            })
            break
        }
      },
      //初始化sdk
      initSdk() {
        module.initSdk({
          params: {
            //最大人脸个数检查
            maxDetectNum: 10,
            //人脸大小检测,默认为60px。可传入大于50px的数值,小于此大小的人脸不予检测
            minFaceSize: 60,
            //人脸置信度,用于表征被检测到的物体是人脸的概率,该阈值设置越高检测越严格,建议在0.3-0.8区间内调整阈值
            faceThreshold: 0.5
          },
          complete: (res) => {
            console.log(res)
            if (res.code == 0) {
              let data = res.data || {};
              let type = data.type;
              if (type == "initModelSuccess") {
                this.showMessage("模型加载成功,欢迎使用")
              } else if (type == "initModelFail") {
                this.showMessage("模型加载失败,请尝试重启应用")
              } else if (type == "initDbComplete") {
                this.showMessage("数据库加载完成")
              } else if (type == "initDbFail") {
                this.showMessage("数据库加载失败")
              }
            } else {
              this.showMessage(res.message)
            }
          }
        })
      }
    }
  }
</script>

<style>
  .grid-box {
    flex: 1;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
  }
</style>
vue
<template>
  <!-- #ifdef APP -->
  <scroll-view style="flex:1">
  <!-- #endif -->
    <lux-card title="设置">
      <rice-grid :column-num="3">
        <rice-grid-item text="人脸管理" icon="peoples" @click="toPage('manager')"></rice-grid-item>
      </rice-grid>
    </lux-card>
    <lux-card title="UVC摄像头">
      <rice-grid :column-num="3">
        <rice-grid-item text="人脸注册" icon="plus" @click="toPage('register')"></rice-grid-item>
        <rice-grid-item text="全屏识别" icon="scan" @click="toPage('fullScreen')"></rice-grid-item>
        <rice-grid-item text="圆形识别" icon="checked-circle" @click="toPage('round')"></rice-grid-item>
        <rice-grid-item text="自定义圆角" icon="info" @click="toPage('circle')"></rice-grid-item>
        <rice-grid-item text="人证核验" icon="file-success" @click="toPage('identity')"></rice-grid-item>
        <rice-grid-item text="属性模式" icon="user" @click="toPage('attribute')"></rice-grid-item>
      </rice-grid>
    </lux-card>
    <lux-card title="设备自带摄像头">
      <rice-grid :column-num="3">
        <rice-grid-item text="人脸注册" icon="plus" @click="toDevicePage('register')"></rice-grid-item>
        <rice-grid-item text="全屏识别" icon="scan" @click="toDevicePage('fullScreen')"></rice-grid-item>
        <rice-grid-item text="圆形识别" icon="checked-circle" @click="toDevicePage('round')"></rice-grid-item>
        <rice-grid-item text="自定义圆角" icon="info" @click="toDevicePage('circle')"></rice-grid-item>
        <rice-grid-item text="人证核验" icon="file-success" @click="toDevicePage('identity')"></rice-grid-item>
        <rice-grid-item text="属性模式" icon="user" @click="toDevicePage('attribute')"></rice-grid-item>
      </rice-grid>
    </lux-card>
  <!-- #ifdef APP -->
  </scroll-view>
  <!-- #endif -->
</template>

<script setup>
  import * as module from "@/uni_modules/leven-uts-bdUvcFace"
  import { LevenResult, LevenOptions } from "@/uni_modules/leven-uts-bdUvcFace"

  function showMessage(message : string) {
    uni.showToast({
      title: message,
      icon: "none"
    })
  }

  function toPage(type : string) {
    switch (type) {
      case "register":
        uni.navigateTo({
          url: "/pages/baiduFaceUvc/uvc/register"
        })
        break
      case "manager":
        uni.navigateTo({
          url: "/pages/baiduFaceUvc/manager"
        })
        break
      case "fullScreen":
        uni.navigateTo({
          url: "/pages/baiduFaceUvc/uvc/fullScreen"
        })
        break
      case "round":
        uni.navigateTo({
          url: "/pages/baiduFaceUvc/uvc/round"
        })
        break
      case "circle":
        uni.navigateTo({
          url: "/pages/baiduFaceUvc/uvc/circle"
        })
        break
      case "identity":
        uni.navigateTo({
          url: "/pages/baiduFaceUvc/uvc/identity"
        })
        break
      case "attribute":
        uni.navigateTo({
          url: "/pages/baiduFaceUvc/uvc/attribute"
        })
        break
    }
  }

  function toDevicePage(type : string) {
    switch (type) {
      case "register":
        uni.navigateTo({
          url: "/pages/baiduFaceUvc/device/register"
        })
        break
      case "fullScreen":
        uni.navigateTo({
          url: "/pages/baiduFaceUvc/device/fullScreen"
        })
        break
      case "round":
        uni.navigateTo({
          url: "/pages/baiduFaceUvc/device/round"
        })
        break
      case "circle":
        uni.navigateTo({
          url: "/pages/baiduFaceUvc/device/circle"
        })
        break
      case "identity":
        uni.navigateTo({
          url: "/pages/baiduFaceUvc/device/identity"
        })
        break
      case "attribute":
        uni.navigateTo({
          url: "/pages/baiduFaceUvc/device/attribute"
        })
        break
    }
  }

  //初始化sdk
  function initSdk() {
    module.initSdk({
      params: {
        //最大人脸个数检查
        maxDetectNum: 10,
        //人脸大小检测,默认为60px。可传入大于50px的数值,小于此大小的人脸不予检测
        minFaceSize: 60,
        //人脸置信度,用于表征被检测到的物体是人脸的概率,该阈值设置越高检测越严格,建议在0.3-0.8区间内调整阈值
        faceThreshold: 0.5
      },
      complete: (res : LevenResult) => {
        if (res.code == 0) {
          let data = res.data;
          let type = data.getString("type")!;
          if (type == "initModelSuccess") {
            showMessage("模型加载成功,欢迎使用")
          } else if (type == "initModelFail") {
            showMessage("模型加载失败,请尝试重启应用")
          } else if (type == "initDbComplete") {
            showMessage("数据库加载完成")
          } else if (type == "initDbFail") {
            showMessage("数据库加载失败")
          }
        } else {
          showMessage(res.message)
        }
      }
    })
  }

  onMounted(() => {
    initSdk()
  })
</script>

<style>

</style>

人脸注册组件

用法

在使用插件的地方引入以下代码:

vue
<leven-uts-baiduFaceUvc-CameraRegister ref="refLevenRegister"
      style=" position: fixed; left: 0; right: 0; bottom: 0; top: 0;" :config="config" @onEvent="onEvent"
      @onError="onError" @onEventMethod="onEventMethod"></leven-uts-baiduFaceUvc-CameraRegister>
vue
<leven-uts-baiduFaceUvc-CameraRegister ref="refLevenRegister" style="flex:1;" :configX="config" @onEvent="onEvent"
      @onError="onError" @onEventMethod="onEventMethod"></leven-uts-baiduFaceUvc-CameraRegister>

//组件的引用
const refLevenRegister = ref<LevenUtsBaiduFaceUvcCameraRegisterElement | null>(null)

页面示例

vue
<template>
  <view>
    <leven-uts-baiduFaceUvc-CameraRegister ref="refLevenRegister"
      style=" position: fixed; left: 0; right: 0; bottom: 0; top: 0;" :config="config" @onEvent="onEvent"
      @onError="onError" @onEventMethod="onEventMethod"></leven-uts-baiduFaceUvc-CameraRegister>
    <cover-view style="position: fixed; right: 16px; bottom: 16px;">
      <button type="primary" size="mini" @click="openRegister">开始注册</button>
    </cover-view>
    <uni-popup ref="refPop">
      <view style="width: 600rpx; height: 250px; background-color: #FFFFFF; border-radius: 8px;">
        <view
          style="height: 50px; border-bottom: 1px solid #f2f2f2; flex-direction: row; justify-content: center; align-items: center;">
          <text>注册人脸</text>
        </view>
        <view style=" padding: 16px;">
          <view style="margin-bottom: 16px;">
            <uni-easyinput v-model="params.id" placeholder="请输入用户id"></uni-easyinput>
          </view>
          <view style="margin-bottom: 16px;">
            <uni-easyinput v-model="params.name" placeholder="请输入用户名"></uni-easyinput>
          </view>
          <button type="primary" @click="register">确定</button>
        </view>
      </view>
    </uni-popup>
  </view>
</template>

<script>
  export default {
    data() {
      return {
        config: {
          //rgb摄像头旋转角度,可传入0、90、180、270四个选项
          rgbVideoDirection: 0,
          //rbg人脸检测角度 默认为0。可传入0、90、180、270四个选项。
          rgbDetectDirection: 0,
          // rbg人脸检测镜像 0:RGB无镜像,1:有镜像
          mirrorDetectRGB: 1,
          //rgb摄像头是否镜像,0:RGB无镜像,1:有镜像
          mirrorVideoRGB: 1,
          //是否显示圆形识别区
          // isFaceRoundView: false,
          //自定义识别区域外颜色
          // outAreaBgColor: "#f2f2f2",
          //是否开启openGL渲染,打开usb摄像头时需要开启
          isOpenGl: true,
          //摄像头位置
          rbgCameraId: -1,
        },
        params: {
          id: "1234",
          name: "leven"
        }
      }
    },
    methods: {
      //显示消息
      showMessage(message) {
        uni.showToast({
          title: message,
          icon: "none"
        })
      },
      register() {
        this.$refs.refPop.close()
        this.$refs.refLevenRegister.register(this.params);
      },
      openRegister() {
        this.$refs.refPop.open()
      },
      onEvent(e) {
        console.log("onEvent:" + JSON.stringify(e.detail))
      },
      onError(e) {
        console.log("onError:" + JSON.stringify(e.detail))
      },
      onEventMethod(e) {
        console.log("onEventMethod:" + JSON.stringify(e.detail))
        let detail = e.detail;
        let type = detail.type;
        if (type == "register") {
          //注册
          let data = detail.data;
          if (data.code != 0) {
            this.showMessage(data.message)
          } else {
            let resultData = data.data;
            if (resultData.type == "success") {
              this.showMessage("注册成功")
            }
          }
        }
      }
    }
  }
</script>

<style>

</style>
vue
<template>
  <view style="flex: 1;">
    <leven-uts-baiduFaceUvc-CameraRegister ref="refLevenRegister" style="flex:1;" :configX="config" @onEvent="onEvent"
      @onError="onError" @onEventMethod="onEventMethod"></leven-uts-baiduFaceUvc-CameraRegister>
  </view>
  <view style="position: fixed; right: 16px; bottom: 16px;">
    <button type="primary" size="mini" @click="openRegister">开始注册</button>
  </view>

  <!-- 注册弹窗 -->
  <rice-popup v-model:show="popShow" position="center" radius="8px" :closeable="false">
    <view style="width: 600rpx; height: 250px;">
      <view
        style="height: 50px; border-bottom: 1px solid #f2f2f2; flex-direction: row; justify-content: center; align-items: center;">
        <text>注册人脸</text>
      </view>
      <view style=" padding: 16px;">
        <view style="margin-bottom: 16px;">
          <rice-input v-model="params.id" placeholder="请输入用户id"></rice-input>
        </view>
        <view style="margin-bottom: 16px;">
          <rice-input v-model="params.name" placeholder="请输入用户名"></rice-input>
        </view>
        <button type="primary" @click="register">确定</button>
      </view>
    </view>
  </rice-popup>
</template>

<script lang="uts" setup>
  import JSONObject from 'com.alibaba.fastjson.JSONObject'
  //组件引用
  const refLevenRegister = ref<LevenUtsBaiduFaceUvcCameraRegisterElement | null>(null)

  //弹窗显示状态
  const popShow = ref(false)

  //初始化配置
  const config = ref({
    //rgb摄像头旋转角度,可传入0、90、180、270四个选项
    rgbVideoDirection: 0,
    //rbg人脸检测角度 默认为0。可传入0、90、180、270四个选项。
    rgbDetectDirection: 0,
    // rbg人脸检测镜像 0:RGB无镜像,1:有镜像
    mirrorDetectRGB: 1,
    //rgb摄像头是否镜像,0:RGB无镜像,1:有镜像
    mirrorVideoRGB: 1,
    //是否显示圆形识别区
    // isFaceRoundView: false,
    //自定义识别区域外颜色
    // outAreaBgColor: "#f2f2f2",
    //是否开启openGL渲染,打开usb摄像头时需要开启
    isOpenGl: true,
    //摄像头位置
    rbgCameraId: -1,
  })

  //注册参数
  type RegisterParams = {
    id : string,
    name : string
  }

  const params = ref<RegisterParams>({
    id: "1234",
    name: "leven"
  })

  //显示消息
  function showMessage(message : string) {
    uni.showToast({
      title: message,
      icon: "none"
    })
  }

  function openRegister() {
    popShow.value = true
  }

  function register() {
    popShow.value = false
    let registerParams : JSONObject = JSONObject.parse(JSON.stringify(params.value)) as JSONObject
    refLevenRegister.value?.register(registerParams)
  }

  function onEventMethod(e : JSONObject) {
    console.log("onEventMethod:" + JSON.stringify(e))
    let type : string = e.getString("type");
    let data : JSONObject = e.getJSONObject("data");
    if (type == "register") {
      let code = data.getInteger("code");
      let message : string = data.getString("message");
      if (code != 0) {
        showMessage(message)
      } else {
        let resultData : JSONObject = data.getJSONObject("data");
        let resultType = resultData.getString("type");
        if (resultType == "success") {
          showMessage("注册成功")
        }
      }
    }
  }

  function onError(e : JSONObject) {
    console.log("onError:" + JSON.stringify(e))
  }

  function onEvent(e : JSONObject) {
    console.log("onEvent:" + JSON.stringify(e))
  }
</script>

<style>

</style>

识别组件

用法

在使用插件的地方引入以下代码:

vue
<leven-uts-baiduFaceUvc-Recognition style="position: fixed; left: 0; right: 0; bottom: 0; top: 0;"
      ref="refLevenRegister" :config="config" @onEvent="onEvent" @onError="onError"
      @onEventMethod="onEventMethod"></leven-uts-baiduFaceUvc-Recognition>
vue
<leven-uts-baiduFaceUvc-Recognition style="position: fixed; left: 0; right: 0; bottom: 0; top: 0;"
      ref="refLevenRegister" :configX="config" @onEvent="onEvent" @onError="onError"
      @onEventMethod="onEventMethod"></leven-uts-baiduFaceUvc-Recognition>

//组件的引用
const refLevenRegister = ref<LevenUtsBaiduFaceUvcRecognitionElement | null>(null)

页面示例

vue
<template>
  <view>
    <leven-uts-baiduFaceUvc-Recognition style="position: fixed; left: 0; right: 0; bottom: 0; top: 0;"
      ref="refLevenRegister" :config="config" @onEvent="onEvent" @onError="onError"
      @onEventMethod="onEventMethod"></leven-uts-baiduFaceUvc-Recognition>
    <cover-view style="position: fixed; right: 16px; bottom: 16px;">
      <button type="primary" size="mini" @click="selectImage">选择图片</button>
    </cover-view>
  </view>
</template>

<script>
  export default {
    data() {
      return {
        config: {
          //rgb摄像头旋转角度,可传入0、90、180、270四个选项
          rgbVideoDirection: 0,
          //rbg人脸检测角度 默认为0。可传入0、90、180、270四个选项。
          rgbDetectDirection: 0,
          //是否显示圆形识别区
          isFaceRoundView: false,
          //关闭人脸识别功能
          isRecognition: false,
          // rbg人脸检测镜像 0:RGB无镜像,1:有镜像
          mirrorDetectRGB: 1,
          //rgb摄像头是否镜像,0:RGB无镜像,1:有镜像
          mirrorVideoRGB: 1,
          //是否开启属性检测
          attribute: true,
          //是否开启openGL渲染,打开usb摄像头时需要开启
          isOpenGl: true,
          //摄像头位置
          rbgCameraId: -1,
        }
      }
    },
    methods: {
      selectImage() {
        uni.chooseImage({
          count: 1,
          sourceType: ['album'],
          success: (res) => {
            let realPath = plus.io.convertLocalFileSystemURL(res.tempFilePaths[0]);
            this.startIdentify(realPath)
          }
        })
      },
      //开始人证核检
      startIdentify(url) {
        this.$refs.refLevenRegister.startIdentify({
          url: url
        })
      },
      //显示消息
      showMessage(message) {
        uni.showToast({
          title: message,
          icon: "none"
        })
      },
      onEvent(e) {
        // console.log("onEvent:" + JSON.stringify(e.detail))
      },
      onError(e) {
        console.log("onError:" + JSON.stringify(e.detail))
      },
      onEventMethod(e) {
        // console.log("onEventMethod:" + JSON.stringify(e.detail))
        let detail = e.detail || {};
        let type = detail.type;
        let data = detail.data || {};
        if (type == "startIdentify") {
          if (data.code == 0) {
            this.showMessage("核检通过");
            //结束核检
            this.$refs.refLevenRegister.endIdentify();
          } else {
            //如果未调用结束核检的方法会一直核检,这里开发者可以做其他的逻辑处理
            //比如核检超过10次或20次自动结束核检
            this.showMessage(data.message)
          }
        }
      }
    }
  }
</script>

<style>

</style>
vue
<template>
  <!-- #ifdef APP -->
  <scroll-view style="flex:1">
  <!-- #endif -->
    <leven-uts-baiduFaceUvc-Recognition style="flex: 1;" ref="refLevenRegister" :configX="config" @onEvent="onEvent"
      @onError="onError" @onEventMethod="onEventMethod"></leven-uts-baiduFaceUvc-Recognition>
    <view style="position: fixed; right: 16px; bottom: 16px;">
      <button type="primary" size="mini" @click="selectImage">选择图片</button>
    </view>
  <!-- #ifdef APP -->
  </scroll-view>
  <!-- #endif -->
</template>

<script lang="uts" setup>
  import JSONObject from 'com.alibaba.fastjson.JSONObject'

  const refLevenRegister = ref<LevenUtsBaiduFaceUvcRecognitionElement | null>(null)

  //初始化配置
  const config = ref({
    //rgb摄像头旋转角度,可传入0、90、180、270四个选项
    rgbVideoDirection: 0,
    //rbg人脸检测角度 默认为0。可传入0、90、180、270四个选项。
    rgbDetectDirection: 0,
    //是否显示圆形识别区
    isFaceRoundView: false,
    //关闭人脸识别功能
    isRecognition: false,
    // rbg人脸检测镜像 0:RGB无镜像,1:有镜像
    mirrorDetectRGB: 1,
    //rgb摄像头是否镜像,0:RGB无镜像,1:有镜像
    mirrorVideoRGB: 1,
    //是否开启属性检测
    attribute: true,
    //是否开启openGL渲染,打开usb摄像头时需要开启
    isOpenGl: true,
    //摄像头位置
    rbgCameraId: -1,
  })

  //显示消息
  function showMessage(message : string) {
    uni.showToast({
      title: message,
      icon: "none"
    })
  }

  //开始人证核检
  function startIdentify(url : string) {
    let options = {
      url: url
    };
    let params = JSONObject.parse(JSON.stringify(options)) as JSONObject
    refLevenRegister.value?.startIdentify(params)
  }

  function selectImage() {
    uni.chooseImage({
      count: 1,
      sourceType: ['album'],
      success: (res) => {
        let realPath = res.tempFilePaths[0].replace("file://", "");
        startIdentify(realPath)
      }
    })
  }

  function onEventMethod(e : JSONObject) {
    console.log("onEventMethod:" + JSON.stringify(e))
    let type : string = e.getString("type");
    let data : JSONObject = e.getJSONObject("data");
    if (type == "startIdentify") {
      if (data.getInteger("code")! == 0) {
        showMessage("核检通过");
        //结束核检
        refLevenRegister.value?.endIdentify();
      } else {
        //如果未调用结束核检的方法会一直核检,这里开发者可以做其他的逻辑处理
        //比如核检超过10次或20次自动结束核检
        showMessage(data.getString("message"))
      }
    }
  }

  function onError(e : JSONObject) {
    console.log("onError:" + JSON.stringify(e))
  }

  function onEvent(_e : JSONObject) {
    // console.log("onEvent:" + JSON.stringify(e))
  }
</script>

<style>

</style>

演示界面

在线激活

离线激活

批量激活

演示程序首页

相机人脸注册

人脸管理

批量注册

单个注册

设备摄像头全屏识别

设备摄像头圆形识别

设备摄像头自定义圆角

设备摄像头人证核检

设备摄像头人脸属性

批量注册进度

删除人脸

UVC摄像头全屏识别

UVC摄像头圆形识别

UVC摄像头自定义圆角

UVC摄像头人证核检

UVC摄像头人脸属性