Skip to content

Latest commit

 

History

History
156 lines (121 loc) · 5.76 KB

AI智能图象增值服务.md

File metadata and controls

156 lines (121 loc) · 5.76 KB

AI智能图象增值服务

功能概述

本文对应实现例子为tcb-demo-ai。本增值服务,AI智能图像能力是借助了腾讯云的人脸识别人脸核身人脸融合功能,通过云开发的云函数和存储简化了素材的存储、配置的拉取和服务的调用 tcb-servicve-sdk 来实现。

后续还会陆续支持智能鉴黄图片标签文字识别 OCR等服务。

体验

扫码体验

DEMO 源码

本章的案例代码,是在 tcb-demo-ai

DEMO 接入流程

  1. 请使用微信开发者工具打开 DEMO 源码,在根目录下的 project.config.json 文件,填写您的小程序 appid

  2. 通过此微信小程序第三方绑定流程登录小程序对应的腾讯云帐号(需要小程序管理员权限),然后在云API密钥 里获取 SecretIdSecretKey

  3. 在腾讯云的智能图像控制台,开通相应的服务:

开通服务

  1. 本案例,前端页面(client/pages/)和云函数(cloud/functions)一一对应,如下:
功能 前端页面 云函数
人脸融合 face-fusion FaceFusion
活体人脸检测 liveness-recognition GetLiveCode 和 LivenessRecognition
身份信息认证 idcard-verification IdCardVerification
人脸检测与分析 face-detect DetectFace
通用印刷体识别 ocr-general GeneralBasicOCR
身份证识别 ocr-idcard IDCardOCR

! 如果需要体验某个功能,需要在对应的云函数里参照 config/example.js 新建 config/index.js,并填入上面拿到的SecretIDSecretKey,然后创建并部署云函数。

  1. 如果是体验以下的功能,还需要做额外的准备工作:

人脸融合

如果想体验人脸融合,开通服务后,需要【创建活动】并【添加素材】,要获得以下配置:

人脸融合--活动管理面板

人脸融合--活动素材管理面板

人脸识别

人脸识别已经升级至全新的版,控制台地址请访问:人脸识别新控制台

如果你进入了旧版控制台,你会看到顶部有提示可以跳转到新版:

人脸识别新版控制台跳转提示

源码介绍

活体人脸核身

本案例实现了该服务的一些基础能力。整个逻辑流程如下:

实现逻辑

其中云函数 LivenessRecognition 的大体逻辑如下:

const {
  IdCard,
  Name,
  VideoFileID,
  LivenessType = 'SILENT',
  ValidateData
} = event

try {
  // 获取视频内容的字符合串
  let fileContent = await tcbService.utils.getContent({
      fileID: VideoFileID
  })

  if (!fileContent) {
      return { code: 10002, message: 'fileContent is empty' }
  }

  const result = await tcbService.callService({
      service: 'ai',
      action: 'LivenessRecognition',
      data: {
      IdCard,
        Name,
        VideoBase64: fileContent.toString('base64'), // 视频内容转 base64
        LivenessType,
        ValidateData
      },
      options: {
        secretID: SecretID,
        secretKey: SecretKey // 调用其它腾讯云账号的 AI 资源
    }
  })

  return result
}
catch (e) {
  return { code: 10001, message: e.message }
}

在小程序端,需要有类似的遮罩,才能提供视频通过的概率。

视频遮罩

那在小程序端怎么可以让图片等元素,盖在 <camera>, <video> 等原生的组件上面呢?答案是使用 <cover-view><cover-image>,譬如:

<camera
    device-position="front"
    flash="off"
    binderror="error"
>
    <cover-view class="camera-cover">
        <cover-image 
            class="camera-image"    
            src="image path"
        >
        </cover-image>
    </cover-view>
    <cover-view
      class="number"
      wx-if="{{isRecording}}"
    >
        请念数字:{{number}}
  </cover-view>
</camera>