选择图片后使用detectFace人脸检测session.on的updateAnchors不触发?
Page({
data: {
faceImgUrl: '',
faceImgBuffer: null,
},
MychooseImg() {
wx.chooseMedia({
count: 1, // 默认9 最多可以选择的文件个数
mediaType: ['image'], // 文件类型
sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
success: (res) => {
const tempFilePaths = res.tempFiles[0].tempFilePath;
console.log('chooseMedia res', tempFilePaths);
this.setData({
faceImgUrl: tempFilePaths,
})
// 接下来,可以对图片进行进一步处理
wx.getImageInfo({
src: tempFilePaths,
success: rep => {
console.log('getImageInfo rep', rep);
// 获取文件系统管理器
const fs = wx.getFileSystemManager();
fs.readFile({
filePath: tempFilePaths, // 指定要读取的文件路径
encoding: 'base64', // 读取文件的编码方式
success: (res) => {
// res.data 是文件的 Base64 编码字符串
const base64Data = res.data;
// 将 Base64 字符串转换为 ArrayBuffer
const arrayBuffer = wx.base64ToArrayBuffer(base64Data);
this.setData({
faceImgBuffer: arrayBuffer,
})
console.log(this.data.faceImgBuffer);
// 调用识别
this.face();
},
fail: function (err) {
// 读取文件失败
console.error('读取文件失败', err);
}
});
},
})
}
})
},
face() {
console.log('调用face---');
const session = wx.createVKSession({
track: {
face: {
mode: 2
} // mode: 1 - 使用摄像头;2 - 手动传入图像
},
version: 'v2'
})
// 需要调用一次 start 以启动
session.start(errno => {
if (errno) {
console.log('errno-----', errno);
// 如果失败,将返回 errno
} else {
// 否则,返回null,表示成功
console.log(this.data.faceImgBuffer)
session.detectFace({
frameBuffer: this.data.faceImgBuffer, // 图片 ArrayBuffer 数据。人脸图像像素点数据,每四项表示一个像素点的 RGBA
width: 1080, // 图像宽度
height: 1080, // 图像高度
scoreThreshold: 0.9, // 评分阈值
sourceType: 1,
modelMode: 1,
open3d: true, // 开启人脸3D关键点检测能力,默认为false
})
console.log('this.session.detectFace', session.detectFace)
}
})
session.on('addAnchors', addAnchors => {
console.log('addAnchors----------', addAnchors);
// anchor.id - anchor 唯一标识
// anchor.type - anchor 类型,0 表示是平面 anchor
// anchor.transform - 包含位置、旋转、放缩信息的矩阵,以列为主序
// anchor.size - 尺寸
// anchor.alignment - 方向
// do something
})
// 静态图片检测模式下,每调一次 detectFace 接口就会触发一次 updateAnchors 事件
session.on('updateAnchors', updateAnchors => {
console.log('updateAnchors----------', updateAnchors);
anchors.forEach(anchor => {
console.log('anchor.points', anchor.points)
console.log('anchor.origin', anchor.origin)
console.log('anchor.size', anchor.size)
console.log('anchor.angle', anchor.angle)
})
})
}
})