本文对应实现例子为tcb-demo-ai。本增值服务,AI智能图像能力是借助了腾讯云的人脸识别、人脸核身和人脸融合功能,通过云开发的云函数和存储简化了素材的存储、配置的拉取和服务的调用 tcb-servicve-sdk 来实现。
后续还会陆续支持智能鉴黄、图片标签、文字识别 OCR等服务。
扫码体验
本章的案例代码,是在 tcb-demo-ai。
-
请使用微信开发者工具打开
DEMO
源码,在根目录下的project.config.json
文件,填写您的小程序appid
。 -
通过此微信小程序第三方绑定流程登录小程序对应的腾讯云帐号(需要小程序管理员权限),然后在云API密钥 里获取
SecretId
和SecretKey
。 -
在腾讯云的智能图像控制台,开通相应的服务:
开通服务
- 本案例,前端页面(
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
,并填入上面拿到的SecretID
和SecretKey
,然后创建并部署云函数。
- 如果是体验以下的功能,还需要做额外的准备工作:
如果想体验人脸融合,开通服务后,需要【创建活动】并【添加素材】,要获得以下配置:
人脸融合--活动管理面板
人脸融合--活动素材管理面板
人脸识别已经升级至全新的版,控制台地址请访问:人脸识别新控制台。
如果你进入了旧版控制台,你会看到顶部有提示可以跳转到新版:
人脸识别新版控制台跳转提示
本案例实现了该服务的一些基础能力。整个逻辑流程如下:
实现逻辑
其中云函数 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>