收藏
回答

选择图片后使用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)
      })
    })


  }
})
回答关注问题邀请回答
收藏

1 个回答

  • Jinx
    Jinx
    04-24

    请问有解决吗,官方demo真的是用不了一点

    04-24
    有用
    回复
登录 后发表内容