评论

小程序利用云开发实现图片安全检测(imgSecCheck,msgSecCheck)

云开发图片安全检测

最近在做一款拍照的小程序,审核时被拒绝,需要增加云安全检测,使用的方法流程是,小程序使用云上传,云平台下载图片在云检测,将检测结果返回给小程序,小程序通过结果来判断是否安全

  // 小程序端
   // 主方法
   handleCamera: function () {
      let that = this
      this.selectImg().then(fileImg => {
        wx.showLoading({
          title: '分析中',
          mask: true
        })
         wx.cloud.uploadFile({
            cloudPath,
            filePath: fileImg,
            success(res) {
               wx.cloud.callFunction({
                    name: "imgSecCheck",
                    data: {
                      fileID: res.fileID
                    }
                  }).then(res => {
                    if (res.result.errCode !== 0) {
                      wx.showToast({
                        title: '违规图片,请重新上传',
                        icon: 'none'
                      })
                    }
                    else {
                      wx.hideLoading()
                      that.jumptoresult()
                    }
                  }).catch(err => {
                    wx.showToast({
                      title: '违规图片,请重新上传',
                      icon: 'none'
                    })
                    console.log(err)
                  })
                },
                fail(err) {
                  console.log(err)
                  wx.showToast({
                    title: '上传失败',
                    icon: 'none'
               })
            }
        });
      })
    },
   // 选择图片
   selectImg: function () {
      if(!this.data.isShowAdv){
         return 
      }
      let that = this
      return new Promise((resolve, reject) => {
        wx.chooseImage({
          count: 1,
          sizeType: ["compressed"],
          sourceType: ["camera", "album"],
          success: function (chooseFile) {
            that.setData({
              imagex: chooseFile.tempFiles[0].path,
            })
            resolve(chooseFile.tempFilePaths[0])
          },
        })
      })
    }
 //  云开发端
  // 云函数入口文件
   const cloud = require('wx-server-sdk')
   cloud.init()

  // 云函数入口函数
   exports.main = async(event, context) => {
     const fileID = event.fileID
     const res = await cloud.downloadFile({
       fileID: fileID,
     })
     const buffer = res.fileContent
     try {
       var result = await cloud.openapi.security.imgSecCheck({
         media: {
           contentType: 'image/png',
           value: buffer
        }
      });
      return result
    } catch (err) {
       return err
    }
  }

试了一些其它方案没走下去,我列举下大家可以参考

1、用户拍完照使用云安全检测报错提示 data maxsize 等等 因为云安全检测的大小限制为1M 我们手机多数拍出来都比较大,所以更换了文中那种方案

2、使用canvas画图把图片搞小,然后在安全检测 失败告终,图片小了可以上传,但安全检测也识别不出来了

还有一个云文本安全检测,用法同云安全图片比图片还简单一些,大家改改就行,需要帮助也可以私聊我

下面是成品,可扫码测试


最后一次编辑于  2021-10-07  
点赞 6
收藏
评论

2 个评论

  • 诗酒年华
    诗酒年华
    05-17

    本地处理的图片,不上传云,不能分享,也要图片安全内容检测吗?这个图片安全检测必须使用云开发功能或者云服务器才能实现吗?

    05-17
    赞同
    回复 1
  •  
     
    2021-04-01

    imgSecCheck可以批量检测图片吗?做的相册,一次性上传多张图片,可以一起提交检测吗?除了循环,我还没找到别的方法

    2021-04-01
    赞同
    回复 3
    • 小泽摔不倒
      小泽摔不倒
      2021-04-12
      官方文档原文是 校验一张图片是否含有违法违规内容, 只能循环一张一张的检测
      2021-04-12
      回复
    • 名字先留着,以后再写
      名字先留着,以后再写
      2022-11-28
      创建画布,把所有图片压缩到一个画布中。然后再提交这个画布
      2022-11-28
      回复
    • 天空之城
      天空之城
      2023-09-06回复名字先留着,以后再写
      大佬,求教
      2023-09-06
      回复
登录 后发表内容