收藏
回答

security.imgSecCheck图片检测,很黄的图片都能通过怎么回事呢?

API: security.imgSecCheck

微信版本号:7.0.6

基础库版本号:2.6.6

描述:java实现校验一张图片是否含有违法违规内容,代码参考:https://blog.csdn.net/leisure_life/article/details/93881581 这篇文章。

检测一张很黄的图片,返回结果:{errcode=0, errmsg=ok}

请教下是什么问题呢?

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

8 个回答

  • 社区技术运营专员-娇华
    社区技术运营专员-娇华
    2019-09-03

    确认下这两个:

    1、是否采用post请求方式 

    2、是否已经把unicode转为utf-8   

    (参考链接:https://www.jb51.net/article/70251.htm)


    2019-09-03
    赞同
    回复 2
    • 放空
      放空
      2019-09-04
      确认是post,请求头是设置了utf-8,图片路径也转为utf-8吗?
      2019-09-04
      回复
    • 杨先生
      杨先生
      2019-09-05
      能回复哈我的问题嘛?
      2019-09-05
      1
      回复
  • 周永申
    周永申
    2019-12-31

    如果你想测试检查不通过的情况,可以在搜索引擎上搜索一些政治人物的图片进行测试。我在使用某些政治任务的图片做测试的时候就会报 《87014-内容含有违法违规内容》这个错误。

    2019-12-31
    赞同 1
    回复
  • 爆竹声中一岁除
    爆竹声中一岁除
    2019-09-03

    说明没到黄的程度

    2019-09-03
    赞同 1
    回复 1
    • 放空
      放空
      2019-09-03
      全裸的那种,还要怎么黄
      2019-09-03
      1
      回复
  • kanen
    kanen
    2019-09-25

    求 能不通过的图 来做验证啊。。。愁死了。。

    2019-09-25
    赞同
    回复
  • 小康¹⁸
    小康¹⁸
    2019-09-25

    兄弟,问题解决了哈,把你的图发来我试试呗,我找的图也提示没问题,qq:1345649302

    2019-09-25
    赞同
    回复 4
    • 孝杰 👣'
      孝杰 👣'
      2019-09-27
      多谢兄弟给图
      2019-09-27
      回复
    • 小康¹⁸
      小康¹⁸
      2019-09-27回复孝杰 👣'
      仅供内部测试使用,请勿商用。本人不承担任何法律责任。哈哈哈
      2019-09-27
      回复
    • ←_←
      ←_←
      2019-09-29回复小康¹⁸
      大哥,能提供一下那张图片不?我测试了半天,都是能过的!谢谢哈 qq:592993988
      2019-09-29
      回复
    • 小康¹⁸
      小康¹⁸
      2019-09-29回复←_←
      加q吧
      2019-09-29
      回复
  • 科
    2019-09-24

    这个API我也很服,我上传一张黄颜色的瓷砖图片。都判为非法。

    2019-09-24
    赞同
    回复 7
    • 小康¹⁸
      小康¹⁸
      2019-09-25
      兄弟,把你的图借来用一下呗,qq:1345649302
      2019-09-25
      回复
    • 小康¹⁸
      小康¹⁸
      2019-09-25
      我找了个两点式的图,都通过了。。想用你的试试
      2019-09-25
      回复
    • 科
      2019-09-25回复小康¹⁸
      哥哥。我是代码写错了,图片太大,返回的错误,我误以为api 错判。现在还在重新构建代码。
      2019-09-25
      回复
    • 科
      2019-09-25回复小康¹⁸
      可能代码没写对。建议先检查代码。 https://developers.weixin.qq.com/community/develop/article/doc/00082e74b58ab81d88e85de6e52013 可以参考下这前辈的代码
      2019-09-25
      回复
    • 小康¹⁸
      小康¹⁸
      2019-09-25回复
      你这是云服务调用呀,我这是https
      2019-09-25
      回复
    查看更多(2)
  • 放空
    放空
    2019-09-04

    我通过QQ群的一个技术群,咨询大牛找到了我个人的问题原因。

    原因是:把图片地址当做图片内容,去调用检测接口。是图片文件的问题

    2019-09-04
    赞同
    回复 5
    • kanen
      kanen
      2019-09-26
      能提供个正解例子吗?
      2019-09-26
      回复
    • aa
      aa
      2019-10-10
      你好  我是把图片路径用new \CURLFILE(realpath($path)) 处理之后,调用接口,不管什么图片都是ok,请问你的参数是什么样的
      2019-10-10
      回复
    • 放空
      放空
      2019-10-15
      我是通过http把图片上传到FastDFS文件服务里,用以下方法解决的


      /********* 文件上传 ********/
      @Override
          public ResponseData upload(MultipartFile file) {
              // imgSecCheck是图片检测方法
              JSONObject jsonObject = imgSecCheck(file);
             
              if (null == jsonObject){
                  return ResponseData.fail("jsonObject返回值为空");
              } else {
                  Integer errcode = Integer.parseInt(jsonObject.get("errcode").toString());
                  log.info("upload, errcode:{}", errcode);
                  if (0 == errcode){
                      String str = FastDFSClient.uploadImageAndCrtThumbImage(file);
                      String result = FastDFSClient.getResAccessUrl(str);
                      return ResponseData.ok(result);
                  }
                  if (87014 == errcode){
                      return ResponseData.fail("图片含有违法违规内容");
                  }
                  return ResponseData.fail("未知错误");
              }
          }


      /*********** FastDFSClient文件内容 ********/
      package xxx; // FastDFSClient文件包路径
      import com.github.tobato.fastdfs.conn.FdfsWebServer;
      import com.github.tobato.fastdfs.domain.StorePath;
      import com.github.tobato.fastdfs.proto.storage.DownloadByteArray;
      import com.github.tobato.fastdfs.service.FastFileStorageClient;
      import org.apache.commons.io.FilenameUtils;
      import org.apache.commons.lang3.StringUtils;
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Component;
      import org.springframework.web.multipart.MultipartFile;
      import java.io.*;


      @Component
      public class FastDFSClient {
          private static Logger log =LoggerFactory.getLogger(FastDFSClient.class);
          private static FastFileStorageClient fastFileStorageClient;
          private static FdfsWebServer fdfsWebServer;
          @Autowired
          public void setFastDFSClient(FastFileStorageClient fastFileStorageClient, FdfsWebServer fdfsWebServer) {
              FastDFSClient.fastFileStorageClient = fastFileStorageClient;
              FastDFSClient.fdfsWebServer = fdfsWebServer;
          }
          /**
           * @param multipartFile 文件对象
           * @return 返回文件地址
           * @author qbanxiaoli
           * @description 上传文件
           */
          public static String uploadFile(MultipartFile multipartFile) {
              try {
                  StorePath storePath = fastFileStorageClient.uploadFile(multipartFile.getInputStream(), multipartFile.getSize(), FilenameUtils.getExtension(multipartFile.getOriginalFilename()), null);
                  return storePath.getFullPath();
              } catch (IOException e) {
                  log.error(e.getMessage());
                  return null;
              }
          }
          /**
           * @param multipartFile 图片对象
           * @return 返回图片地址
           * @author qbanxiaoli
           * @description 上传缩略图
           */
          public static String uploadImageAndCrtThumbImage(MultipartFile multipartFile) {
              try {
                  StorePath storePath = fastFileStorageClient.uploadImageAndCrtThumbImage(multipartFile.getInputStream(), multipartFile.getSize(), FilenameUtils.getExtension(multipartFile.getOriginalFilename()), null);
                  return storePath.getFullPath();
              } catch (Exception e) {
                  log.error(e.getMessage());
                  return null;
              }
          }
          /**
           * @param file 文件对象
           * @return 返回文件地址
           * @author qbanxiaoli
           * @description 上传文件
           */
          public static String uploadFile(File file) {
              try {
                  FileInputStream inputStream = new FileInputStream(file);
                  StorePath storePath = fastFileStorageClient.uploadFile(inputStream, file.length(), FilenameUtils.getExtension(file.getName()), null);
                  return storePath.getFullPath();
              } catch (Exception e) {
                  log.error(e.getMessage());
                  return null;
              }
          }
          /**
           * @param file 图片对象
           * @return 返回图片地址
           * @author qbanxiaoli
           * @description 上传缩略图
           */
          public static String uploadImageAndCrtThumbImage(File file) {
              try {
                  FileInputStream inputStream = new FileInputStream(file);
                  StorePath storePath = fastFileStorageClient.uploadImageAndCrtThumbImage(inputStream, file.length(), FilenameUtils.getExtension(file.getName()), null);
                  return storePath.getFullPath();
              } catch (Exception e) {
                  log.error(e.getMessage());
                  return null;
              }
          }
          /**
           * @param bytes byte数组
           * @param fileExtension 文件扩展名
           * @return 返回文件地址
           * @author qbanxiaoli
           * @description 将byte数组生成一个文件上传
           */
          public static String uploadFile(byte[] bytes, String fileExtension) {
              ByteArrayInputStream stream = new ByteArrayInputStream(bytes);
              StorePath storePath = fastFileStorageClient.uploadFile(stream, bytes.length, fileExtension, null);
              return storePath.getFullPath();
          }
          /**
           * @param fileUrl 文件访问地址
           * @param file 文件保存路径
           * @author qbanxiaoli
           * @description 下载文件
           */
          public static boolean downloadFile(String fileUrl, File file) {
              try {
                  StorePath storePath = StorePath.praseFromUrl(fileUrl);
                  byte[] bytes = fastFileStorageClient.downloadFile(storePath.getGroup(), storePath.getPath(), new DownloadByteArray());
                  FileOutputStream stream = new FileOutputStream(file);
                  stream.write(bytes);
              } catch (Exception e) {
                  log.error(e.getMessage());
                  return false;
              }
              return true;
          }
          /**
           * @param fileUrl 文件访问地址
           * @author qbanxiaoli
           * @description 删除文件
           */
          public static boolean deleteFile(String fileUrl) {
              if (StringUtils.isEmpty(fileUrl)) {
                  return false;
              }
              try {
                  StorePath storePath = StorePath.praseFromUrl(fileUrl);
                  fastFileStorageClient.deleteFile(storePath.getGroup(), storePath.getPath());
              } catch (Exception e) {
                  log.error(e.getMessage());
                  return false;
              }
              return true;
          }
          // 封装文件完整URL地址
          public static String getResAccessUrl(String path) {
              String url = fdfsWebServer.getWebServerUrl() + path;
              log.info("上传文件地址为:\n" + url);
              return url;
          }
      }


      /****** pom.xml *******/

             
                  com.github.tobato
                  fastdfs-client
                  1.26.2
                 
             
      2019-10-15
      回复
    • 王士铭
      王士铭
      01-03
      其实我想看你的imgSecCheck方法
      01-03
      回复
    • 放空
      放空
      01-03回复王士铭
      /**
           * 校验一张图片是否含有违法违规内容
           * @param multipartFile
           * @return
           */
          private JSONObject imgSecCheck(MultipartFile multipartFile) {
              try {
                  String accessToken = getAccessToken().getData().toString();
                  CloseableHttpClient httpclient = HttpClients.createDefault();
                  CloseableHttpResponse response = null;
                  HttpPost request = new HttpPost("https://api.weixin.qq.com/wxa/img_sec_check?access_token=" + accessToken);
                  request.addHeader("Content-Type", "application/octet-stream");
                  InputStream inputStream = multipartFile.getInputStream();
                  byte[] byt = new byte[inputStream.available()];
                  inputStream.read(byt);
                  request.setEntity(new ByteArrayEntity(byt, ContentType.create("image/jpg")));
                  response = httpclient.execute(request);
                  HttpEntity httpEntity = response.getEntity();
                  String result = EntityUtils.toString(httpEntity, "UTF-8");// 转成string
                  JSONObject jsonObject = JSONObject.parseObject(result);
                  return jsonObject;
              } catch (Exception e) {
                  log.info("----------------调用腾讯内容过滤系统出错------------------");
                  e.printStackTrace();
                  return null;
              }
          }


      你自己再优化下代码吧
      01-03
      回复
  • 铭锋科技
    铭锋科技
    2019-09-03

    所以说不要依靠api来检测,ugc必须人工审核

    2019-09-03
    赞同
    回复 2
    • 放空
      放空
      2019-09-03
      小公司全靠人工审核也不太现实,还是要靠api过滤下,再弄个用户投诉按钮,公司内部人员再每天抽查
      2019-09-03
      回复
    • 铭锋科技
      铭锋科技
      2019-09-03回复放空

      不人工审核就始终过不了审,明白了?

      2019-09-03
      回复
登录 后发表内容
问题标签