Skip to content

Commit

Permalink
Merge pull request #253 from bug-is-zhang/master
Browse files Browse the repository at this point in the history
Add ci sdk and demo
  • Loading branch information
bug-is-zhanglinlin authored Sep 4, 2023
2 parents e070641 + 5a1953b commit d9cb553
Show file tree
Hide file tree
Showing 3 changed files with 251 additions and 8 deletions.
215 changes: 215 additions & 0 deletions demo/ci_audit.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,215 @@
# -*- coding=utf-8
import base64
import time

from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client

import os
import sys
import logging

# 腾讯云COSV5Python SDK, 目前可以支持Python2.6与Python2.7以及Python3.x

# https://cloud.tencent.com/document/product/436/46782

logging.basicConfig(level=logging.INFO, stream=sys.stdout)

# 设置用户属性, 包括 secret_id, secret_key, region等。Appid 已在CosConfig中移除,请在参数 Bucket 中带上 Appid。Bucket 由 BucketName-Appid 组成
secret_id = os.environ["SECRETID"] # 替换为用户的 SecretId,请登录访问管理控制台进行查看和管理,https://console.cloud.tencent.com/cam/capi
secret_key = os.environ["SECRETKEY"] # 替换为用户的 SecretKey,请登录访问管理控制台进行查看和管理,https://console.cloud.tencent.com/cam/capi

region = 'ap-chongqing' # 替换为用户的 region,已创建桶归属的region可以在控制台查看,https://console.cloud.tencent.com/cos5/bucket
# COS支持的所有region列表参见https://www.qcloud.com/document/product/436/6224
token = None
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token, Scheme='https') # 获取配置对象
client = CosS3Client(config)


bucket_name = 'test-1250000000'


def ci_auditing_video_submit():
response = client.ci_auditing_video_submit(Bucket=bucket_name,
Key="test.mp4",
Callback="http://www.demo.com",
CallbackVersion='Simple',
DetectContent=1,
Mode='Interval',
Count=1,
TimeInterval=1)
print(str(response))


def ci_auditing_video_query():
response = client.ci_auditing_video_query(Bucket=bucket_name, JobID="jobId")
print(response['JobsDetail']['State'])


def ci_auditing_image_batch():
user_info = {
'TokenId': '123456', # 一般用于表示账号信息,长度不超过128字节
'Nickname': '测试', # 一般用于表示昵称信息,长度不超过128字节
'DeviceId': '腾讯云', # 一般用于表示设备信息,长度不超过128字节
'AppId': '12500000', # 一般用于表示 App 的唯一标识,长度不超过128字节
'Room': '1', # 一般用于表示房间号信息,长度不超过128字节
'IP': '127.0.0.1', # 一般用于表示 IP 地址信息,长度不超过128字节
'Type': '测试', # 一般用于表示业务类型,长度不超过128字节
'ReceiveTokenId': '789123', # 一般用于表示接收消息的用户账号,长度不超过128字节
'Gender': '男', # 一般用于表示性别信息,长度不超过128字节
'Level': '100', # 一般用于表示等级信息,长度不超过128字节
'Role': '测试人员', # 一般用于表示角色信息,长度不超过128字节
}
input_info = []
input_info.append({
'Object': 'test.png', # 存储在 COS 存储桶中的图片文件名称
# 'Url': 'http://a-1250000.cos.ap-shanghai.myqcloud.com/image.jpg', # 图片文件的链接地址
# 'Content': base64.b64encode('我是测试'.encode("utf-8")).decode('utf-8'), # 图片文件的内容,需要先经过 base64 编码
# 'Interval': '5', # 截帧频率,GIF 图检测专用,默认值为5,表示从第一帧(包含)开始每隔5帧截取一帧。
# 'MaxFrames': '5', # 最大截帧数量,GIF 图检测专用,默认值为5,表示只截取 GIF 的5帧图片进行审核,必须大于0。
'DataId': 'my data id', # 图片标识,该字段在结果中返回原始内容,长度限制为512字节。
# 'LargeImageDetect': '0', # 对于超过大小限制的图片是否进行压缩后再审核,取值为: 0(不压缩),1(压缩)。默认为0。注:压缩最大支持32M的图片,且会收取压缩费用。
'UserInfo': user_info, # 用户业务字段。
})
input_info.append({
'Object': 'test.png', # 存储在 COS 存储桶中的图片文件名称
# 'Url': 'http://a-1250000.cos.ap-shanghai.myqcloud.com/image.jpg', # 图片文件的链接地址
# 'Content': base64.b64encode('我是测试1'.encode("utf-8")).decode('utf-8'), # 图片文件的内容,需要先经过 base64 编码
# 'Interval': '5', # 截帧频率,GIF 图检测专用,默认值为5,表示从第一帧(包含)开始每隔5帧截取一帧。
# 'MaxFrames': '5', # 最大截帧数量,GIF 图检测专用,默认值为5,表示只截取 GIF 的5帧图片进行审核,必须大于0。
'DataId': 'my data id', # 图片标识,该字段在结果中返回原始内容,长度限制为512字节。
# 'LargeImageDetect': '0', # 对于超过大小限制的图片是否进行压缩后再审核,取值为: 0(不压缩),1(压缩)。默认为0。注:压缩最大支持32M的图片,且会收取压缩费用。
'UserInfo': user_info, # 用户业务字段。
})

freeze = {
'PornScore': '50', # 取值为[0,100],表示当色情审核结果大于或等于该分数时,自动进行冻结操作。不填写则表示不自动冻结,默认值为空。
'AdsScore': '50' # 取值为[0,100],表示当广告审核结果大于或等于该分数时,自动进行冻结操作。不填写则表示不自动冻结,默认值为空。
}
response = client.ci_auditing_image_batch(Bucket=bucket_name,
Input=input_info,
BizType='', # 表示审核策略的唯一标识
Async=0, # 是否异步进行审核
Callback="http://www.demo.com",
Freeze=freeze
)
print(str(response))


def ci_live_video_auditing():
# 提交视频流审核任务
response = client.ci_auditing_live_video_submit(
Bucket=bucket_name,
Url='rtmp://example.com/live/123',
Callback='http://callback.com/',
DataId='testdataid-111111',
UserInfo={
'TokenId': 'token',
'Nickname': 'test',
'DeviceId': 'DeviceId-test',
'AppId': 'AppId-test',
'Room': 'Room-test',
'IP': 'IP-test',
'Type': 'Type-test',
},
BizType='d0292362d07428b4f6982a31bf97c246',
CallbackType=1
)
assert (response['JobsDetail']['JobId'])
jobId = response['JobsDetail']['JobId']
time.sleep(5)
kwargs = {"CacheControl": "no-cache", "ResponseCacheControl": "no-cache"}
response = client.ci_auditing_live_video_cancle(
Bucket=bucket_name,
JobID=jobId,
**kwargs
)
print(response)


def ci_auditing_virus_submit_and_query():
kwargs = {"CacheControl": "no-cache", "ResponseCacheControl": "no-cache"}
response = client.ci_auditing_virus_submit(Bucket=bucket_name,
Key="test.png",
Callback="http://www.demo.com",
**kwargs)
jobId = response['JobsDetail']['JobId']
while True:
time.sleep(5)
kwargs = {"CacheControl": "no-cache", "ResponseCacheControl": "no-cache"}
response = client.ci_auditing_virus_query(Bucket=bucket_name, JobID=jobId, **kwargs)
print(response['JobsDetail']['State'])
if response['JobsDetail']['State'] == 'Success':
print(str(response))
break
print(response)


def ci_auditing_text_submit():
user_info = {
'TokenId': '123456', # 一般用于表示账号信息,长度不超过128字节
'Nickname': '测试', # 一般用于表示昵称信息,长度不超过128字节
'DeviceId': '腾讯云', # 一般用于表示设备信息,长度不超过128字节
'AppId': '12500000', # 一般用于表示 App 的唯一标识,长度不超过128字节
'Room': '1', # 一般用于表示房间号信息,长度不超过128字节
'IP': '127.0.0.1', # 一般用于表示 IP 地址信息,长度不超过128字节
'Type': '测试', # 一般用于表示业务类型,长度不超过128字节
'ReceiveTokenId': '789123', # 一般用于表示接收消息的用户账号,长度不超过128字节
'Gender': '男', # 一般用于表示性别信息,长度不超过128字节
'Level': '100', # 一般用于表示等级信息,长度不超过128字节
'Role': '测试人员', # 一般用于表示角色信息,长度不超过128字节
}
response = client.ci_auditing_text_submit(
Bucket=bucket_name, # 桶名称
Content='123456test'.encode("utf-8"), # 需要审核的文本内容
BizType='', # 表示审核策略的唯一标识
UserInfo=user_info, # 用户业务字段
DataId='456456456', # 待审核的数据进行唯一业务标识
)
print(response)


def ci_auditing_text_txt_submit():
user_info = {
'TokenId': '123456', # 一般用于表示账号信息,长度不超过128字节
'Nickname': '测试', # 一般用于表示昵称信息,长度不超过128字节
'DeviceId': '腾讯云', # 一般用于表示设备信息,长度不超过128字节
'AppId': '12500000', # 一般用于表示 App 的唯一标识,长度不超过128字节
'Room': '1', # 一般用于表示房间号信息,长度不超过128字节
'IP': '127.0.0.1', # 一般用于表示 IP 地址信息,长度不超过128字节
'Type': '测试', # 一般用于表示业务类型,长度不超过128字节
'ReceiveTokenId': '789123', # 一般用于表示接收消息的用户账号,长度不超过128字节
'Gender': '男', # 一般用于表示性别信息,长度不超过128字节
'Level': '100', # 一般用于表示等级信息,长度不超过128字节
'Role': '测试人员', # 一般用于表示角色信息,长度不超过128字节
}
response = client.ci_auditing_text_submit(
Bucket=bucket_name, # 桶名称
# Content='123456test'.encode("utf-8"), # 需要审核的文本内容
Key='shenhe.txt',
Url='https://test-1250000000.cos.ap-chongqing.myqcloud.com/shenhe.txt?q-sign-algorithm=sha1&q-ak=AKIDPdbIjuoRt40g5D4ex0nKaaJlvoRKzNVN&q-sign-time=1690968685;1690975885&q-key-time=1690968685;1690975885&q-header-list=&q-url-param-list=&q-signature=c93b2350e946ad1d5336286221edc66e53f18989',
BizType='', # 表示审核策略的唯一标识
UserInfo=user_info, # 用户业务字段
DataId='456456456', # 待审核的数据进行唯一业务标识
)
print(response)


def ci_auditing_text_txt_query():

response = client.ci_auditing_text_query(
Bucket=bucket_name, # 桶名称
JobID='st6a7d90fe311xxxxxxxxxxxxxxxxx', # 需要查询的文本文件审核任务ID
)
print(response)


if __name__ == '__main__':
# ci_auditing_video_submit()
# ci_auditing_video_query()
ci_auditing_image_batch()
# ci_live_video_auditing()
# ci_auditing_virus_submit_and_query()
# ci_auditing_text_submit()
# ci_auditing_text_txt_submit()
# ci_auditing_text_txt_query()
31 changes: 24 additions & 7 deletions demo/ci_media.py
Original file line number Diff line number Diff line change
Expand Up @@ -1908,16 +1908,33 @@ def ci_create_words_generalize_jobs():

def ci_get_presigned_download_url():
param = {
"object": "test.gif",
"format": "mp4"
# 想要处理的文件路径
# 支持cos对象的绝对路径
# 必选参数
"object": "test1026.gif",
# 转码后的视频流格式
# 当前仅支持mp4
# 必选参数
"format": "mp4",
# 转码后视频的宽
# 取值范围:(0,4096]。默认为0
# 非必传参数
# "width": "200",
# 转码后视频的高
# 取值范围:(0,4096]。默认为0
# 非必传参数
# 当 width 和 height 都为0时,表示使用视频的宽高。如果单个为0,则以另外一个值按视频宽高比例自动适应
# "heigth": "200"
}
url = client.get_presigned_download_url(
Bucket=bucket_name,
Key='/convert',
Expired=3600,
Params=param,
UseCiEndPoint=True,
Bucket=bucket_name, # 存储桶名称
Key="/convert", # 请求uri 同步转码固定为/convert
Expired=3600, # 预签名超时时间
Params=param, # 请求处理参数
UseCiEndPoint=True, # 是否使用数据万象的请求域名
)
if token is not None:
url = url + "&x-cos-security-token=" + token
print(url)


Expand Down
13 changes: 12 additions & 1 deletion qcloud_cos/cos_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5965,7 +5965,7 @@ def ci_auditing_html_query(self, Bucket, JobID, **kwargs):

return data

def ci_auditing_image_batch(self, Bucket, Input, DetectType=None, BizType=None, **kwargs):
def ci_auditing_image_batch(self, Bucket, Input, DetectType=None, BizType=None, Async=0, Callback=None, Freeze=None, **kwargs):
"""图片同步批量审核接口 https://cloud.tencent.com/document/product/436/63593
:param Bucket(string): 存储桶名称.
Expand All @@ -5983,6 +5983,11 @@ def ci_auditing_image_batch(self, Bucket, Input, DetectType=None, BizType=None,
UserInfo: 用户业务字段。
:param DetectType(int): 内容识别标志,位计算 1:porn, 8:ads
:param BizType(string): 审核策略的唯一标识,由后台自动生成,在控制台中对应为Biztype值.
:param Async(string): 是否异步进行审核,0:同步返回结果,1:异步进行审核。默认值为 0。
:param Callback(string): 审核结果(Detail版本)以回调形式发送至您的回调地址,异步审核时生效,支持以 http:// 或者 https:// 开头的地址,例如:http://www.callback.com。
:param Freeze(dict): 可通过该字段,设置根据审核结果给出的不同分值,对图片进行自动冻结,仅当 input 中审核的图片为 object 时有效。
PornScore: 取值为[0,100],表示当色情审核结果大于或等于该分数时,自动进行冻结操作。不填写则表示不自动冻结,默认值为空。
AdsScore: 取值为[0,100],表示当广告审核结果大于或等于该分数时,自动进行冻结操作。不填写则表示不自动冻结,默认值为空。
:param kwargs(dict): 设置请求的headers.
:return(dict):任务提交成功返回的结果,dict类型.
Expand Down Expand Up @@ -6019,6 +6024,12 @@ def ci_auditing_image_batch(self, Bucket, Input, DetectType=None, BizType=None,
if DetectType is not None:
detect_type = CiDetectType.get_detect_type_str(DetectType)
conf['DetectType'] = detect_type
if Async == 0:
conf['Async'] = Async
if Callback is not None:
conf["Callback"] = Callback
if Freeze is not None:
conf["Freeze"] = Freeze
request = {
'Input': Input,
'Conf': conf
Expand Down

0 comments on commit d9cb553

Please sign in to comment.