腾讯万象优图鉴黄使用-python版

来源:互联网 发布:ps网络培训班qq群 编辑:程序博客网 时间:2024/05/01 10:17

转自:http://bbs.qcloud.com/thread-9566-1-1.html


 最近,万众瞩目的 万象鉴黄系统终于上线了。 解决了很多站点被各种用户上传黄图却无力的尴尬局面。 相信很多人也在官方站点体验了一下。

                         jianhuang.png 




当然 如果还没体验过的同学 可以打开以下链接先感受下智能鉴黄工具的 效率。

               万象鉴黄体验


今天  我们主要来关注下 官网wiki给出的  文档.  

            万象优图黄图鉴别文档

wendang.png 

其实官网各个参数什么的已经给的很详细了。 程序大神,基本就可以根据这个文档开发出各个sdk 。 但同时,相信很多同学也和我一样。 面对这个如此生涩的api 文档望而却步。 所以,今天特意研究了下。 简单的写了一个小小的 python sdk。为什么选python 呢? 因为楼主比较菜~~ 
           
            说一下思想。 本质来说就是我们把 参数上传给鉴黄的接口,它给反过来返回值 我们根据返回值确定 ,此图是不是黄图。具体的算法。。当然官方不会给出了。。。
             
        熟悉优图的用户都知道 需要的 无非就那么几个参数 罢了

    bucketname   appid     Secret ID    Secretkey     这四个参数一定要  明确好。
之后  重点就是生成 签名了。 

    官方说 要使用以下算法:
万象优图使用 HMAC-SHA1 算法对请求进行签名;
签名串需要使用 Base64 编码。

这两个就是常用的加密,编码 算法。

总之 我们 要 利用以上 信息  加上  时间戳  生效时间   需要鉴定的图片的url   这几个参数 生成一个 签名。
签名得到完毕,我们 的任务就完成一半了。

得到了  签名 ,接下来 就是 准备 http包头 和 body   然后开始发送http post 请求。 得到返回值。 通过判断返回值来鉴定 是否黄图。

以上 是 简单的理论 。 下面 不多说  直接给出干货。 以下 代码供大家参考。
  1. #!/usr/bin/env python
  2. #  -*- coding:utf-8 -*-
  3. # File http_post.py


  4. import httplib
  5. import json
  6. import time
  7. import binascii


  8. conn = httplib.HTTPConnection("service.image.myqcloud.com")

  9. appid = 10000943      //自行修改
  10. bucket = "test305"     //自行修改
  11. SecretID = "xxxxxxxxxxxxxxxxxxxxxxxxx"       //自行修改
  12. SecretKey = "xxxxxxxxxxxxxxxxxxxxxxxxxx"    //自行修改
  13. current1 = int(time.time())
  14. current = str(current1)
  15. expired1 = current1 + 100
  16. expired = str(expired1)
  17. url = "http://test305-10000943.image.myqcloud.com/meinv2.jpg"   //自行修改
  18. orignal = "a=" + str(appid) + "&b=" + bucket + "&k=" + SecretID + "&t=" + current + "&e=" + expired + "&l=" + url

  19. from hashlib import sha1
  20. import hmac
  21. import base64

  22. hashed =  hmac.new(SecretKey, orignal, sha1)
  23. baseStr = hashed.hexdigest()
  24. baseStr = binascii.unhexlify(baseStr) + orignal
  25. Authorization = base64.b64encode(baseStr).rstrip()




  26. headers = {"Content-type":"application/json","Host":"service.image.myqcloud.com","Authorization":Authorization}

  27. params =  ({"appid":appid,"bucket":bucket,"url":url})
  28. conn.request("POST", "/detection/pornDetect", json.JSONEncoder().encode(params), headers)
  29. response = conn.getresponse()
  30. data = response.read()
  31. print  data
  32. conn.close()
复制代码
下面是 鉴定完成 给出的返回值。

    success.png 

返回 0 说明系统鉴定为不是黄图。 但是 请看  评分 porn_score  得到了 84.376分 说明 ,即使不是黄图也是 十分性感的图片了。 
官方给出的建议是 大于 83分的  还是人工审核下比较好 。

meinv4.jpg 


这个图 就是 我刚才 鉴定的图。 看来的确是个擦边球。 这个鉴黄系统 鉴定的 还是 有一定水平的。



最后感谢 开发大大 faithzhou 给出的大力帮助。 

===============================补充============================================


鉴于很多人 很苦恼  “擦边球” 黄图 , 那些图被我们的系统识别为色情值比较高而且返回值不是 1 , 但 这些图事实上已经碰触黄图的 底线了。 我们针对这些做出了新的优化:

我们给出了一个可疑度区间

  0-20,  21-40,  41-60,  61-80,  81-100


qujian.png 

review_status //0正常图片 1是黄图 2疑是 3人工黄图到正常的解禁 初始和result相同


result_type  //0默认,1系统(result为1时设置) 2 人工(review_status为1时设置) 
0 0
原创粉丝点击