diff --git a/demo/ci_audit.py b/demo/ci_audit.py new file mode 100644 index 0000000..8ec3c11 --- /dev/null +++ b/demo/ci_audit.py @@ -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() \ No newline at end of file diff --git a/demo/ci_media.py b/demo/ci_media.py index 49c2450..dd4f2d4 100644 --- a/demo/ci_media.py +++ b/demo/ci_media.py @@ -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) diff --git a/qcloud_cos/cos_client.py b/qcloud_cos/cos_client.py index a53d7b8..0c9659c 100644 --- a/qcloud_cos/cos_client.py +++ b/qcloud_cos/cos_client.py @@ -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): 存储桶名称. @@ -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类型. @@ -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