1. 引言
图片鉴黄是针对网络社会中存在的黄色、低俗等不良信息进行过滤和识别的一种技术。最近,据腾讯2021年业务报告显示,腾讯云人工智能的年增长率达到了54.7%,成为了腾讯云的一项重要业务。因此,结合腾讯云的API接口,使用Python编写的程序,可以快速准确地鉴别并且提示用户图片中是否存在涉黄信息。
2. 准备工作
2.1 腾讯云API密钥
在使用腾讯云的API之前,需要先获取腾讯云API密钥,即SECRET_ID 和 SECRET_KEY。可以通过访问 https://console.cloud.tencent.com/cam/capi 页面,选择“新建密钥”并进行申请。
注意:SecretId 和 SecretKey 是您访问腾讯云API的唯一凭证,需要妥善保管。
2.2 Python库安装
Python已经成为数据分析与人工智能领域的重要工具之一,相关库的安装可以使用 pip 工具,安装命令为:
pip install requests
pip install json
3. 接口调用方法
3.1 接口调用说明
腾讯云的图片鉴黄接口,基于HTTP协议,开发者可以通过该接口快速识别图片中是否存在色情、暴力等不良信息。其中鉴定分为四个级别:
正常(Normal)、性感(Hot)、色情(Porn)、色情(Sexy)和色情(Vulgar)。
鉴黄接口的 API 接入访问地址为:https://tbp.tencentcloudapi.com/
。
3.2 接口调用方法
与腾讯云鉴黄接口建立连接,通常有两种方式,即使用 HTTP 协议调用和使用 SDK 调用。
本次使用 HTTP 协议调用方式。
3.3 API参数说明
API鉴别参数和输出参数详见官方API文档说明 https://cloud.tencent.com/document/product/1125/53243。
4. Python 编写代码实现
下面我们来展示使用 Python 代码实现鉴黄检测功能,该代码实现的功能是:用户上传一张图片并且检测图片中是否存在涉黄信息。
# 导入需要的Python包
import time
import random
import requests
import json
# 腾讯云API鉴别参数
SecretId = '您的SecretId'
SecretKey = '您的SecretKey'
AppID = '您的AppID'
# 调用鉴别API接口
def PornDetect(img):
payload = {
"Image": img,
"Scenes": ["porn"]
}
url = "https://tbp.tencentcloudapi.com/"
TimeStamp=int(time.time())
Nonce=random.randint(0,100000000)
headers={
'Host':'tbp.tencentcloudapi.com',
'Content-Type':'application/json',
'Authorization':'TC3-HMAC-SHA256 Credential='+SecretId+'/'+str(TimeStamp)+'/'+'tbp/tc3_request, SignedHeaders=content-type;host, Signature='+signature,
'X-TC-Action':'PornDetect',
'X-TC-Version': '2019-05-29',
'X-TC-Timestamp': str(TimeStamp),
'X-TC-Nonce': str(Nonce),
'Content-Length':str(len(json.dumps(payload)))
}
data={'Action':'PornDetect','Version': '2019-05-29','Region':'ap-guangzhou','Timestamp':TimeStamp,'Nonce':Nonce,'SecretId':SecretId,'Payload':payload}
string_request = 'POST' + '\n' + '/' + '\n' + '\n' + 'content-type:'+'application/json' + '\n' + 'host:'+ 'tbp.tencentcloudapi.com\n'
string_payload = json.dumps(data['Payload'], separators=(',', ':'))
string_request += string_payload
hash1 = hashlib.sha256(string_request.encode('utf-8')).hexdigest()
date = time.strftime('%Y-%m-%d',time.localtime())
service = 'tbp'
string2 = 'TC3-HMAC-SHA256\n' + str(TimeStamp) + '\n' + date + '/' + service + '/tc3_request\n' + hash1
SecretKeyTmp = ('TC3' + SecretKey).encode('utf-8')
secretDate = hmac.new(SecretKeyTmp, date.encode('utf-8'), hashlib.sha256).digest()
secretService = hmac.new(secretDate, service.encode('utf-8'), hashlib.sha256).digest()
secretSigning = hmac.new(secretService, b'tc3_request', hashlib.sha256).hexdigest()
signature = hmac.new(bytes(secretSigning, 'utf-8'), bytes(string2, 'utf-8'), hashlib.sha256).hexdigest()
headers={
'Host':'tbp.tencentcloudapi.com',
'Content-Type':'application/json',
'Authorization':'TC3-HMAC-SHA256 Credential='+SecretId+'/'+str(TimeStamp)+'/'+'tbp/tc3_request, SignedHeaders=content-type;host, Signature='+signature,
'X-TC-Action':'PornDetect',
'X-TC-Version': '2019-05-29',
'X-TC-Timestamp': str(TimeStamp),
'X-TC-Nonce': str(Nonce),
'Content-Length':str(len(json.dumps(payload)))
}
url = "https://tbp.tencentcloudapi.com/"
result = requests.post(url, data=json.dumps(payload), headers=headers)
res = json.loads(result.content)
if res['Response']['PornDetect']['EvilFlag']>0:
return 1
elif res['Response']['PornDetect']['HotFlag']>0:
return 2
else:
return 0
注意:以上代码仅供参考,相关参数和API鉴证信息需要自行修改。
5. 测试与实现
考虑使用上传一张图片进行鉴黄检测测试,因此我们可以在代码中添加以下代码:
if __name__ == '__main__':
# 测试图片
img = 'path.jpg'
with open(img, 'rb') as img_obj:
base64_data = base64.b64encode(img_obj.read())
s = base64_data.decode()
res = PornDetect(s)
if res>0:
print("警告,该图片存在涉黄信息!")
else:
print("恭喜,该图片不存在涉黄信息!")
6. 总结
Python是一种脚本语言,开源免费,能够快速方便地编写程序,与腾讯云相结合,能够更好地使用腾讯云API接口,提供更好的服务。