做的小程序,后端都是用的 Laravel,验证是不是个人脸,验证是不是涉黄图片

关于小程序接入内容安全能力的警告通知2019-09-23

你好,因用户投诉并经平台审核,你的小程序在用户自定义昵称或头像、个人资料签名、聊天室、用户评论、上传图片视频、直播等场景。未具备过滤政治有害等违法违规不当信息的机制,接入微信公众平台内容安全API(imgSecCheck、msgSecCheck、mediaCheckAsync),以及通过其他技术或人工审核手段做好内容审核,对于检测有害的内容及时清理或拦截,确保小程序提供内容及用户产生内容符合相关法律法规的要求。
内容安全接口指引
如平台发现你在2019-9-26 前未进行能力完善,将对你的小程序采取能力限制直至下架处理。

小程序名字叫——签签

用户微信扫码登记进入校园,将人脸头像写入人脸识别机,下次刷脸进出。也不知道哪点做的不对了,用户竟然投诉内容。。。唉

我们在用户注册是这么做的
1.先调用face++的人脸接口监测是否是一张脸,不是一张脸的返回错误重新拍照。
2.是一张脸的话传到我们的云存储,再推送到人脸机。
这个过程用户再上传照片的时候差不多需要3秒钟的时间

以上问题我理解的是需要在1和2之间加个步骤,涉黄验证,就是:

1.先调用face++;

2.调用腾讯的imgSecCheck API;

3.上传到我们的云存储推送到人脸机。

做完后第一次用户到访需要8-9秒的时间传头像,20秒的时间填写姓名、身份证号(这个20秒是学校要求必填的鸡肋),3秒的获取微信手机。半分多钟。。。。。。。较真的用户获客不易啊

下面说下1.2.3个步骤技术实现:

1.调用face++验证人脸

注册face++的用户,申请一个试用的API key就好了(免费的)
用这个接口https://api-cn.faceplusplus.com/facepp/v3/...,这个我直接在小程序端验证了看下面的小程序部分代码

2.请求腾讯的接口进行涉黄验证

POST https://api.weixin.qq.com/wxa/img_sec_check?access_token=ACCESS_TOKEN

laravel控制器这么写的,接口调用picCheck这个方法

    public function curl_get($url)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $data = curl_exec($curl);
        $err = curl_error($curl);
        curl_close($curl);
        return $data;
    }

    public function get_access_token()
    {
    //这个建议每一小时更新一次放到缓存里能节省1-2秒
        $url = config('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET');
        return $data = $this->curl_get($url);
    }
    public function picCheck(Request $request){
        $file = $request->file('file');
        $access = json_decode($this->get_access_token(), true);
        $access_token = $access['access_token'];
        $url = 'https://api.weixin.qq.com/wxa/img_sec_check?access_token=' . $access_token;
        $file_path = $file->getRealPath();
        $file_data = array("media"  => new \CURLFile($file_path));
        $ch = curl_init();
        curl_setopt($ch , CURLOPT_URL , $url);
        curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch , CURLOPT_POST, 1);
        curl_setopt($ch , CURLOPT_POSTFIELDS, $file_data);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }

3.传到自己的云存储返回url链接

laravel的Controller这么写的,用的又拍云的存储,又拍云有个教程来很详细自己配置

private function avatarUpyun($avatar)
    {
        $file = $request->file('file');
        $ext = $file->getClientOriginalExtension();     // 扩展名
        $realPath = $file->getRealPath();   //临时文件的绝对路径
        $filename = 'avatar' . time() . uniqid() . '.' . $ext;
        $filePath = 'real_avatar/' . $filename;
        Storage::disk('upyun')->writeStream($filePath, fopen($realPath, 'r'));
        return $filePath;
    }

小程序部分代码

data:  {
    avatar:'',
    face_token:''
},
uploadAvatar(e){
    let that=this
    wx.chooseImage({
      sizeType: ['compressed']//压缩的就好了,
      sourceType: ['camera']//只能自拍,
      success: res => {
        that.setData({
          Avatar: res.tempFilePaths,
        })
        wx.showLoading({
          title: '人脸检测中',
          icon: 'loading',
          mask: true
        })
        wx.uploadFile({
          url: 'https://api-cn.faceplusplus.com/facepp/v3/detect',
          header: {
            'content-type': 'application/json'
          },
          name: 'image_file',
          filePath: that.data.Avatar[0],
          formData: {
            api_key: conf.FaceKey,//face++自己申请
            api_secret: conf.FaceSecret,//face++自己申请
          },
          success(res) {
            let faceData = JSON.parse(res.data)
            if (faceData.face_num != 1) {
            //只要返回的不是一个脸
              wx.hideLoading()
              Notify('非人脸头像,上传失败')//用的vant框架自己加载进来
              return
            } else {
              that.setData({
                'face_token': faceData.faces[0].face_token,//这个挺有用的,建议写到自己的用户表,再对比其他的时候减少传图
              })
              wx.hideLoading()
              wx.showLoading({
                title: '涉黄检测中...',
                icon: 'loading',
                mask: true
              })
              wx.uploadFile({
                url: api.PicCheckUrl,//这个上面第2点的接口请求微信的接口验证是不是露点图片
                filePath: that.data.Avatar[0],
                name: 'file',
                success(res) {
                  let resData=JSON.parse(res.data)
                  if (resData.errcode=='0'){
                  //正常图片的操作
                    wx.hideLoading()
                    wx.showLoading({
                      title: '头像上传中...',
                      icon: 'loading',
                      mask: true
                    })
                    wx.uploadFile({
                      url: conf.AvatarUrl,//传到我们的云存储先
                      header: {
                        'Content-Type': 'application/json',
                      },
                      filePath: that.data.Avatar[0],
                      name: 'file',
                      success: (res) => {
                        wx.hideLoading()
                        that.setData({
                          'avatar': res.data,
                        })
                        Notify( '头像上传成功')
                      }
                    })
                  }else{
                    wx.hideLoading()
                    Notify('涉黄照片,禁止上传!')
                  }
                }
              })

            }
          }
        })
      }
    })
  }
本帖已被设为精华帖!
本帖由系统于 4年前 自动加精
讨论数量: 1
直面苦痛的人生

不得不佩服,牛b

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!