35
1 3 3 3 3 3 3 3 5 7 7 7 7 7 8 8 8 8 9 9 9 9 9 9 10 10 10 10 10 10 11 11 11 11 14 15 16 16 16 16 16 16 16 17 17 18 18 18 18 19 目录 目录 目录 内容安全图像识别API文档 调用方式 请求结构 公共参数 签名机制 图片格式支持 内容安全图像识别接口 内容安全批量图像识别接口 图像识别服务results字段说明 色情图像识别对应的results字段 色情图像识别二级标签映射 暴恐图像识别对应的results字段 暴恐图像识别二级标签映射 违规违法图像识别对应的results字段 违规违法图像识别对应的results字段 敏感人物图像识别对应的results字段 OCR图像识别对应的results字段 广告图像识别对应的results字段 广告图像识别二级标签映射 涉政图像识别对应的results字段 涉政图像识别二级标签映射 错误码说明 签名错误码 业务层级错误码 其他说明 内容安全视频识别API文档-离线视频 调用方式 请求结构 公共参数 签名机制 离线视频识别接口 离线视频识别任务提交 离线视频识别结果查询 直播流识别接口 回调字段说明 错误码说明 其他说明 业务层级错误码 内容安全音频识别API文档-长音频 调用方式 请求结构 公共参数 签名机制 短音频识别接口 违规音频识别对应的results字段 色情音频识别对应的results字段 长音频识别接口 长音频识别任务提交 长音频识别结果查询 目录 2020-10-22 金山云 1/35

目录 - ks3-cn-beijing.ksyun.com

  • Upload
    others

  • View
    42

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 目录 - ks3-cn-beijing.ksyun.com

1333333357777788889999991010101010101111111114151616161616161617171818181819

目录目录

目录内容安全图像识别API文档

调用方式请求结构公共参数签名机制

图片格式支持内容安全图像识别接口内容安全批量图像识别接口图像识别服务results字段说明

色情图像识别对应的results字段色情图像识别二级标签映射暴恐图像识别对应的results字段暴恐图像识别二级标签映射违规违法图像识别对应的results字段违规违法图像识别对应的results字段敏感人物图像识别对应的results字段OCR图像识别对应的results字段广告图像识别对应的results字段广告图像识别二级标签映射涉政图像识别对应的results字段涉政图像识别二级标签映射

错误码说明签名错误码业务层级错误码

其他说明内容安全视频识别API文档-离线视频

调用方式请求结构公共参数签名机制

离线视频识别接口离线视频识别任务提交离线视频识别结果查询

直播流识别接口回调字段说明

错误码说明其他说明

业务层级错误码内容安全音频识别API文档-长音频

调用方式请求结构公共参数签名机制

短音频识别接口违规音频识别对应的results字段色情音频识别对应的results字段

长音频识别接口长音频识别任务提交长音频识别结果查询

目录 2020-10-22

金山云 1/35

Page 2: 目录 - ks3-cn-beijing.ksyun.com

20202121222222222222222223232424242424252525262727282828282929313232343434343434353535353535

音频流检测接口音频流检测断流接口

回调字段说明违规音频识别对应的results字段色情音频识别对应的results字段

错误码说明其他说明

业务层级错误码内容安全文本识别API文档

调用方式请求结构公共参数签名机制

文本过滤接口错误码

金山云内容理解图像API文档调用方式

请求结构公共参数签名机制

Special识别接口通用标签识别接口直播标签识别接口错误码说明

签名错误码业务层级错误码

其他说明金山云签名机制文档

签名机制OpenAPI调用方式

python实现java实现php实现golang实现

签名错误码BadCase反馈接口

一、图像审核反馈接口1.接口描述2.接口参数3.请求示例

二、视频审核反馈接口1.接口描述2.接口参数3.请求示例4. 签名SDK

对接SDK

目录 2020-10-22

金山云 2/35

Page 3: 目录 - ks3-cn-beijing.ksyun.com

内容安全图像识别API文档内容安全图像识别API文档

目录目录

调用方式请求结构公共参数签名机制

图片格式支持内容安全图像识别接口内容安全批量图像识别接口图像识别服务results字段说明

色情图像识别对应的results字段色情图像识别二级标签映射暴恐图像识别对应的results字段暴恐图像识别二级标签映射违规违法图像识别对应的results字段违规违法图像识别二级标签映射敏感人物图像识别对应的results字段OCR图像识别对应的results字段广告图像识别对应的results字段广告图像识别二级标签映射涉政图像识别对应的results字段涉政图像识别二级标签映射

错误码说明签名错误码业务层级错误码

其他说明

调用方式调用方式

请求结构请求结构

服务地址服务地址

内容安全图像识别API的服务接入地址为:http://kir.api.ksyun.com

通信协议通信协议

支持通过HTTP或HTTPS协议进行请求通信。为保证您的服务安全性,请使用HTTPS协议进行通信。

请求方式请求方式

支持GET方法发送请求,注意参数需要进行urlencode。

公共参数公共参数

公共请求header公共请求header

参数名参数名 必选必选 类型类型 说明说明

Authorization是 string 必要的请求验证信息

X-Amz-Date 是 string 当前请求的时间戳,例如:20171129T114852Z

Host 否 string kir.api.ksyun.com

签名参数签名参数

Region:金山云机房信息,目前仅支持cn-beijing-6

Service:固定为kir

返回结果返回结果

接口统一返回json格式数据,满足以下格式:

{ "header":{ "err_no":200, "err_msg":"success" }, "cost":0.11, "request_id": "d679e27b-9f1b-44bf-b134-49a6d9f0adff", "request_time": 1234567890123}

调用成功,err_no返回200,msg为success,否则返回对应错误码及错误信息。

cost为服务端耗时,单位秒。

每此请求会返回唯一的请求表示request_id,调用失败时提供request_id给金山云客服,方便定位问题。

request_time为每次请求时的服务器时间。

调用失败示例:

{ "header":{ "err_no":510, "err_msg":"请求太频繁" }, "cost":0, "request_id": "d679e27b-9f1b-44bf-b134-49a6d9f0adff"}

签名机制签名机制

详见金山云签名机制文档

图片格式支持图片格式支持

格式格式 后缀后缀 说明说明

BMP .bmp 支持

JPEG .jpg .jpeg 支持

GIF .gif 选择一帧进行处理

PNG .png 支持

内容安全图像识别接口内容安全图像识别接口

输入:

GET参数部分

API对接说明 2020-10-22

金山云 3/35

Page 4: 目录 - ks3-cn-beijing.ksyun.com

参数名参数名 必选必选 类型类型 说明说明

Action=ClassifyImageGuard 是 string 固定此值

Version=2019-01-18 是 string API版本号,固定此值

POST请求示例

{ "guard_id":"xxxx", "image_url":"http://xxx.jpg", "image_data":"base64 for image data", "live_stream_id":"xxx"}

POST参数说明

参数参数 必选必选 类型类型 说明说明

guard_id 是 string 送审计划id

image_url 否 string 图片url

image_data 否 string 图片内容的BASE64编码,不能超过1MB

live_stream_id 否 string 直播流id,用户可以自定义内容

送审计划id获取路径:金睛内容识别 > 送审管理模块 > 送审计划列表/送审计划详情 > 复制送审计划id

详见金睛内容识别平台操作手册

接口返回:

{ "header":{ "err_no":200, "err_msg":"success" }, "cost":0.11, "request_id": "d679e27b-9f1b-44bf-b134-49a6d9f0adff", "request_time": 1234567890123, "body":{ "data_id":"7705a64b43f0b0778058aa2559c533a8", "image_url":"http://xxx.jpg", "err_no":400, //仅图片格式出现错误有此信息 "err_msg":"图片格式错误", //仅图片格式出现错误有此信息 "suggest_summary": "confirm_reject", "suggest_summary_code": "233000", "suggest_summary_message": "图像涉政", "results":[ { "err_no":400, //仅此业务结果出现错误有此信息 "err_msg":"模型输出错误", //仅此业务结果出现错误有此信息 "business": "porn", "label": "2", "label_desc": "低俗", "suggest": "suggest_review", "rate": 0.59970703125, "label_details": { "second_labels": [ { "rate": 0.59970703125, "label": "47", "label_desc": "ACG穿着低俗" } ] } },{ "business": "terrorism", "label": "2", "label_desc": "暴恐", "suggest": "suggest_review", "rate": 0.445998877286911, "label_details": { "second_labels": [ { "rate": 0.445998877286911, "label": "4", "label_desc": "极端旗帜" } ] } },{ "business": "illegal", "label": "1", "label_desc": "正常", "suggest": "normal", "rate": 0.9939418435096741, "label_details": { "second_labels": [ { "rate": 9939418435096741, "label": "101", "label_desc": "ACG违规" } ] } },{ "business": "politic", "label": "2", "label_desc": "敏感人物", "suggest": "confirm_reject", "rate": 0.990704357624054, "label_details": [ { "face_position": [ 117.89945855342201, 62.68863123655319, 363.25957166808683, 389.22652787715197

API对接说明 2020-10-22

金山云 4/35

Page 5: 目录 - ks3-cn-beijing.ksyun.com

], "faces": [ { "face_name": "陈水扁", "rate": 0.990704357624054 } ] } ], "face_name": "陈水扁", "face_data": [ { "face_position": [ 117.89945855342201, 62.68863123655319, 363.25957166808683, 389.22652787715197 ], "faces": [ { "face_name": "陈水扁", "rate": 0.990704357624054 } ] } ] },{ "business": "ocr", "label": "1", "label_desc": "正常", "suggest": "normal", "rate": 0.99, "label_details": { "word_list": [ "1" ], "text_filter": { "conclusion": "正常", "risk_type": "", "matched_item": "" } } },{ "business": "ad", "label": "2", "label_desc": "水印", "suggest": "confirm_reject", "rate": 0.9680339694023132, "label_details": { "second_labels": [ { "label": "302", "label_desc": "水印", "rate": 0.993783712387085 } ] } },{ "business": "sensitive", "label": "4", "label_desc": "涉政人物", "suggest": "suggest_review", "rate": 0.739, "label_details": { "second_labels": [ { "face_name": "陈水扁", "rate": 0.73970703125, "label": "21", "label_desc": "台独", "face_position": [ 117.89945855342201, 62.68863123655319, 363.25957166808683, 389.22652787715197 ] } ] } } ] }}

接口输出字段解释:

字段字段 类型类型 是否必须是否必须 说明说明

business string 是

调用服务名称色情图像识别:porn;暴恐图像识别:terrorism;违规违法图像识别:illegal;敏感人物图像识别:politic;OCR图像识别:ocr;广告图像识别:ad; 涉政图像识别: sensitive

label string 是 分类标签ID

label_desc string 是 分类标签

rate double 是 分类置信度 [0, 1.0],值越大置信度越高

image_url string 是 对应请求中的地址

data_id string 是 唯一标识该图片

suggest_summary string 是 confirm_reject:拒绝;suggest_review:疑似;normal:通过

suggest_summary_code string 是

295000:图像涉黄;229000:图像涉暴;233000:图像涉政;245000:图像OCR违规;237000:图像违规违法;241000:广告图片; 349000: 图像政治敏感;

suggest_summary_message string 是

295000:图像涉黄;229000:图像涉暴;233000:图像涉政;245000:图像OCR违规;237000:图像违规违法;241000:广告图片; 349000: 图像政治敏感;

results array 是 色情/暴恐/违规违法/敏感人物/OCR/广告/涉政识别结果,具体返回字段请参照下方图像识别服务results字段说明

内容安全批量图像识别接口内容安全批量图像识别接口

输入:

GET参数部分

API对接说明 2020-10-22

金山云 5/35

Page 6: 目录 - ks3-cn-beijing.ksyun.com

参数名参数名 必选必选 类型类型 说明说明

Action=ClassifyMultipleImages 是 string 固定此值

Version=2020-06-15 是 string API版本号,固定此值

POST请求示例

{ "guard_id":"xxxx", "image_urls":["http://xxx.jpg", "http://xxx.jpg"], "businesses":["porn","terrorism","illegal","ocr","ad","sensitive"], "live_stream_id":"xxx"}

POST参数说明

参数参数 必选必选 类型类型 说明说明

guard_id 是 string 送审计划id

image_urls 是 array 图片url列表, 数量不得大于10

businesses 否 array 指定送审模型列表,默认走送审计划下全部开通模型

live_stream_id 否 string 直播流id,用户自定义内容

送审计划id获取路径:金睛内容识别 > 送审管理模块 > 送审计划列表/送审计划详情 > 复制送审计划id

详见金睛内容识别平台操作手册

接口返回:

{ "header": { "err_no": 200, "err_msg": "success" }, "cost": 0.11, "request_id": "d679e27b-9f1b-44bf-b134-49a6d9f0adff", "request_time": 1234567890123, "body": [{ "err_no": 405, //仅图片识别结果出错时有此信息 "err_msg": "ImageInvalid", //仅图片识别结果出错时有此信息 "image_url": "http://xxx.jpg" }, { "data_id": "7705a64b43f0b0778058aa2559c533a8", "image_url": "http://xxx.jpg", "suggest_summary": "confirm_reject", "suggest_summary_code": "233000", "suggest_summary_message": "图像涉政", "results": [{ "err_no": 611, //仅此业务结果出现错误有此信息 "err_msg": "模型服务出错", //仅此业务结果出现错误有此信息 "business": "porn", "model_version": "XXXXXX" }, { "business": "terrorism", "model_version": "XXXXXX", "label": "2", "label_desc": "暴恐", "suggest": "suggest_review", "rate": 0.445998877286911, "label_details": { "second_labels": [{ "rate": 0.445998877286911, "label": "4", "label_desc": "极端旗帜" }] } }, { "business": "illegal", "model_version": "XXXXXX", "label": "1", "label_desc": "正常", "suggest": "normal", "rate": 0.9939418435096741, "label_details": { "second_labels": [{ "rate": 9939418435096741, "label": "101", "label_desc": "ACG违规" }] } }, { "business": "ad", "model_version": "XXXXXX", "label": "2", "label_desc": "水印", "suggest": "confirm_reject", "rate": 0.9680339694023132, "label_details": { "second_labels": [{ "label": "302", "label_desc": "水印", "rate": 0.993783712387085 }] } }, { "business": "sensitive", "model_version": "XXXXXX", "label": "4", "label_desc": "涉政人物", "suggest": "suggest_review", "rate": 0.739, "label_details": { "second_labels": [{ "face_name": "陈水扁", "rate": 0.73970703125, "label": "21",

API对接说明 2020-10-22

金山云 6/35

Page 7: 目录 - ks3-cn-beijing.ksyun.com

"label_desc": "台独", "face_position": [117.89945855342201, 62.68863123655319, 363.25957166808683, 389.22652787715197] }] } }] }]}

接口输出字段解释:

字段字段 类型类型 是否必须是否必须 说明说明

business string 是

调用服务名称色情图像识别:porn;暴恐图像识别:terrorism;违规违法图像识别:illegal;敏感人物图像识别:politic;OCR图像识别:ocr;广告图像识别:ad; 涉政图像识别: sensitive

label string 是 分类标签ID

label_desc string 是 分类标签

rate double 是 分类置信度 [0, 1.0],值越大置信度越高

image_url string 是 对应请求中的地址

data_id string 是 唯一标识该图片

suggest_summary string 是 confirm_reject:拒绝;suggest_review:疑似;normal:通过

suggest_summary_code string 是

295000:图像涉黄;229000:图像涉暴;233000:图像涉政;245000:图像OCR违规;237000:图像违规违法;241000:广告图片; 349000: 图像政治敏感;

suggest_summary_message string 是

295000:图像涉黄;229000:图像涉暴;233000:图像涉政;245000:图像OCR违规;237000:图像违规违法;241000:广告图片; 349000: 图像政治敏感;

results array 是 色情/暴恐/违规违法/敏感人物/OCR/广告/涉政识别结果,具体返回字段请参照下方图像识别服务results字段说明

图像识别服务results字段说明图像识别服务results字段说明

色情图像识别对应的results字段色情图像识别对应的results字段

字段字段 类型类型 是否必须是否必须 说明说明

suggest string 是 confirm_reject:拒绝;suggest_review:疑似;normal:通过

label string 是分类标签IDporn: 1正常;2低俗;3色情;1001自定义图像黑名单;1002自定义图像白名单

label_desc string 是分类标签porn: 1正常;2低俗;3色情;1001自定义图像黑名单;1002自定义图像白名单

label_details.second_labels.rate double 否 置信度

label_details.second_labels.label string 否 二级标签id

label_details.second_labels.label_desc string 否 二级标签描述

model_version string 否 模型版本号,仅批量图像识别接口返回

色情图像识别二级标签映射色情图像识别二级标签映射

label_details.second_labels.labellabel_details.second_labels.label label_details.second_labels.label_desclabel_details.second_labels.label_desc

47 ACG穿着低俗

13 露臀线

14 露背

15 女性露乳沟

62 ACG露乳轮廓

20 穿着低俗

22 男性裸露上体

46 ACG精乳液

45 ACG亲吻

17 亲吻

18 舔舐动作

50 ACG舔舐动作

49 ACG摸胸

16 揉胸

30 床上场景

19 性用品

51 ACG性用品

暴恐图像识别对应的results字段暴恐图像识别对应的results字段

字段字段 类型类型 是否必须是否必须 说明说明

suggest string 是 confirm_reject:拒绝;suggest_review:疑似;normal:通过

label string 是分类标签IDterrorism: 1正常;2暴恐;3血腥;1001自定义图像黑名单;1002自定义图像白名单

label_desc string 是分类标签terrorism: 1正常;2暴恐;3血腥;1001自定义图像黑名单;1002自定义图像白名单

label_details.second_labels.rate double 否 置信度

label_details.second_labels.label string 否 二级标签id

label_details.second_labels.label_desc string 否 二级标签描述

model_version string 否 模型版本号,仅批量图像识别接口返回

暴恐图像识别二级标签映射暴恐图像识别二级标签映射

label_details.second_labels.labellabel_details.second_labels.label label_details.second_labels.label_desclabel_details.second_labels.label_desc

1 武器携带

2 国内军装

3 特殊着装

4 大型武器

5 游行示威

6 暴乱场景

API对接说明 2020-10-22

金山云 7/35

Page 8: 目录 - ks3-cn-beijing.ksyun.com

7 极端组织

19 ACG涉徽

20 ACG大型武器

21 ACG极端组织

22 ACG恐怖

8 血腥场景

9 车祸现场

10 肢体残缺

18 ACG血腥

23 非作战类迷彩服装

24 旧军装

25 其他聚集

26 正常刀具

100 极端旗帜

201 违法运动

违规违法图像识别对应的results字段违规违法图像识别对应的results字段

字段字段 类型类型 是否必须是否必须 说明说明

suggest string 是 confirm_reject:拒绝;suggest_review:疑似;normal:通过

label string 是分类标签IDillegal: 1正常;2违法;3违规;4ACG违规;1001自定义图像黑名单;1002自定义图像白名单

label_desc string 是分类标签illegal: 1正常;2违法;3违规;4ACG违规;1001自定义图像黑名单;1002自定义图像白名单

label_details.second_labels.rate double 否 置信度

label_details.second_labels.label string 否 二级标签id

label_details.second_labels.label_desc string 否 二级标签描述

model_version string 否 模型版本号,仅批量图像识别接口返回

违规违法图像识别对应的results字段违规违法图像识别对应的results字段

label_details.second_labels.labellabel_details.second_labels.label label_details.second_labels.label_desclabel_details.second_labels.label_desc

101 ACG违规

15 涉毒

16 封建迷信

17 赌博场景

11 涉旗涉徽

12 吸烟持烟

14 危险驾驶

13 未成年

敏感人物图像识别对应的results字段敏感人物图像识别对应的results字段

字段字段 类型类型 是否必须是否必须 说明说明

label string 是分类标签IDpolitic: 1非敏感人物;2敏感人物;3无人脸;1001自定义图像黑名单;1002自定义图像白名单

label_desc string 是分类标签politic: 1非敏感人物;2敏感人物;3无人脸;1001自定义图像黑名单;1002自定义图像白名单

label_details object 是 敏感人物输出的特殊结果

face_name string 否 最相似的人物名称

face_data json array 否 当检测出人脸时含有该部分信息,一张图有可能返回多个敏感人脸结果

face_position json array 否 左上角坐标和右下角坐标

faces json array 否 一个人脸可能对应多个敏感人物信息

faces.face_name string 否 人脸名称

faces.rate double 否 该人物与该位置人脸的相似度

suggest string 是 confirm_reject:拒绝;normal:通过

model_version string 否 模型版本号,仅批量图像识别接口返回

OCR图像识别对应的results字段OCR图像识别对应的results字段

字段字段 类型类型 是否必须是否必须 说明说明

label string 是

分类标签ID1:正常2:涉黄3:广告4:涉暴5:涉政6:辱骂7:灌水8:其它违规11:广告法违规1001:自定义图像黑名单1002:自定义图像白名单

label_desc string 是

分类标签ID1:正常2:涉黄3:广告4:涉暴5:涉政6:辱骂7:灌水8:其它违规11:广告法违规1001:自定义图像黑名单1002:自定义图像白名单

label_details object 是 ocr识别详情

label_details.text_filter.conclusion string 是 同label_desc描述

label_details.text_filter.risk_type string 是 同label_desc描述

label_details.text_filter.matched_item string 否 违规文本

label_details.word_list array 是 识别出的详细的文本内容

label_details.position array 否

OCR文字结果对应的四边形各点的像素坐标,四边形是任意四边形,位置分别表示左上角右上角右下角左下角

suggest string 是 confirm_reject:拒绝;normal:通过

model_version string 否 模型版本号,仅批量图像识别接口返回

API对接说明 2020-10-22

金山云 8/35

Page 9: 目录 - ks3-cn-beijing.ksyun.com

广告图像识别对应的results字段广告图像识别对应的results字段

字段字段 类型类型 是否必须是否必须 说明说明

label string 是分类标签ID1:无广告;2:水印;3:二维码;4:条形码;1001自定义图像黑名单;1002自定义图像白名单

label_desc string 是分类标签1:无广告;2:水印;3:二维码;4:条形码;1001自定义图像黑名单;1002自定义图像白名单

label_details object 是 广告识别详情

suggest string 是 confirm_reject:拒绝;normal:通过

label_details.second_labels.rate double 否 置信度

label_details.second_labels.label string 否 二级标签id

label_details.second_labels.label_desc string 否 二级标签描述

model_version string 否 模型版本号,仅批量图像识别接口返回

广告图像识别二级标签映射广告图像识别二级标签映射

label_details.second_labels.labellabel_details.second_labels.label label_details.second_labels.label_desclabel_details.second_labels.label_desc

301 无广告

302 水印

303 二维码

304 条形码

涉政图像识别对应的results字段涉政图像识别对应的results字段

字段字段 类型类型 是否必须是否必须 说明说明

suggest string 是 confirm_reject:拒绝;suggest_review:疑似;normal:通过

label string 是分类标签ID1正常;2涉政运动;3涉政动漫4涉政人物;5涉政违规;1001自定义图像黑名单;1002自定义图像白名单

label_desc string 是分类标签1正常;2涉政运动;3涉政动漫4涉政人物;5涉政违规;1001自定义图像黑名单;1002自定义图像白名单

label_details.second_labels.rate double 否 置信度

label_details.second_labels.label string 否 二级标签id

label_details.second_labels.label_desc string 否 二级标签描述

model_version string 否 模型版本号,仅批量图像识别接口返回

涉政图像识别二级标签映射涉政图像识别二级标签映射

label_details.second_labels.labellabel_details.second_labels.label label_details.second_labels.label_desclabel_details.second_labels.label_desc

1 六四运动

2 七五事件

3 占中运动

4 反送中运动

5 其他涉政运动

6 涉一号首长

7 涉其他国家领导人

8 政治事件

9 其他涉政动漫

10 现任国级副国级领导人

11 历任国级副国级领导人

12 省部级及以下领导人

13 文革相关人员

14 落马官员及涉案人员

15 港澳领导人

16 台湾领导人

17 落马官员家属

18 重要领导人家属

19 民运及异见人士

20 港独

21 台独

22 疆独

23 藏独

24 广电封杀明星

25 极端组织和邪教人员

26 革命领袖和英雄

27 主要国外领导人

28 其他国外领导人

29 国内军装

30 大型武器

31 游行示威

32 暴乱场景

33 涉旗涉徽

错误码说明错误码说明

调用接口失败时,返回的HTTP消息体将中包含具体的错误信息,下表为错误码的具体说明,找不到错误原因时,可以联系我们,并提供Response中的RequestId/request_id,以便尽快解决问题。

签名错误码签名错误码

错误代码(Code)错误代码(Code) 错误消息(Message)错误消息(Message) 状态码状态码 说明说明

IncompleteSignature

Date must be in ISO-8601 'basic format'. Got '%s'. See http://en.wikipedia.org/wiki/ISO_8601.

400 Date必须符合ISO_8601基本格式,参考:http://en.wikipedia.org/wiki/ISO_8601

IncompleteSignature

KSC query-string parameters must include %s. Re-examine the query-string parameters.

400查询条件中缺少签署信息,查询条件中必须包含”X-Amz-Algorithm“、”X-Amz-Credential“、”X-Amz-SignedHeaders“、”X-Amz-Date“信息

IncompleteSignature

Unsupported ksc 'algorithm': %s. 400 只支持如下签名算法:AWS4-HMAC-SHA256

IncompleteSignature

Authorization header requires 'Credential' parameter. Authorization=%s. 400 请求Authorization header中需要包含“Credential”参数

IncompleteSignature

Credential must have exactly 5 slash-delimited elements, e.g. accesskeyid/date/region/service/aws4_request, got: %s.

400请求Authorization header中中“Credential”至少包含5项以斜杠分隔的元素,如:keyid/date/region/service/aws4_request

IncompleteSignature

Authorization header format error. 400 请求Authorization header的格式错误

IncompleteSignature

Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header, Authorization=%s

400 请求中缺少“X-Amz-Date”或者“Date” header信息

API对接说明 2020-10-22

金山云 9/35

Page 10: 目录 - ks3-cn-beijing.ksyun.com

IncompleteSignature

Authorization header requires 'Signature' parameter. Authorization=%s 400 请求Authorization header中缺少“Signature”信息

IncompleteSignature

Authorization header requires 'SignedHeaders' parameter. Authorization=%s 400 请求Authorization header中缺少“SignedHeaders”信息

MissingAuthenticationToken

Request is missing 'Host' header. 403 请求header中缺少Host

MissingAuthenticationToken

Request is missing Authentication Token. 403 请求header中缺少认证token

MissingAuthenticationToken

%s not in Http Header. 403 %s不在Http header中

SignatureDoesNotMatch

Host' must be a 'SignedHeader' in the Authorization. 403 请求的SignedHeader中必须包含Host

SignatureDoesNotMatch

Credential should be scoped with a valid terminator: 'aws4_request', not: %s.

403 请求Authorization header中的“Credential”末尾必须是“aws4_request”

SignatureDoesNotMatch

Credential should be scoped to a valid region, not:%s. 403 请求Authorization header中的“Credential”中的Region信息无效

SignatureDoesNotMatch

Credential should be scoped to correct service: %s. 403 请求Authorization header中的“Credential”中的Service信息无效

SignatureDoesNotMatch

The request signature we calculated does not match the signature you provided.

403 请求中提供的签名与实际计算结果不匹配

SignatureDoesNotMatch

Signature expired:%s. 403 签名已过期

SignatureDoesNotMatch

Date in Credential scope does not match YYYYMMDD from ISO-8601 version of date from HTTP.

403请求Authorization header中的“Credential”中的Date应该是ISO8601基本格式,形如”YYYYMMDD“

InvalidClientTokenId

The security token included in the request is invalid. 403 请求中提供的AccessKeyId无效

业务层级错误码业务层级错误码

err_msgerr_msg err_noerr_no 说明说明

请求参数有误 400 检查参数

图片格式不合法 405 检查图片格式、大小

图片太大 421 检查图片大小

图片为空 422 检查图片参数

下载图片超时 508 检查图片大小

请求太频繁 510 请求QPS超过限制

其他说明其他说明

图片大小限制为5M,长宽像素不大于10000,图片下载时间限制为2.5s内,如果下载时间超过2.5s返回下载超时;

图片像素建议不小于256*256,太小可能会影响识别效果;

图片检测接口响应时间依赖图片的下载时间,请保证所检测图片所在的存储服务的稳定,图片建议使用金山云对象存储或者cdn做缓存等;

建议客户端超时时间设置为4-5s;

接口regionId仅支持cn-beijing-6;

内容安全视频识别API文档-离线视频内容安全视频识别API文档-离线视频

目录目录

调用方式请求结构公共参数签名机制

离线视频识别接口离线视频识别任务提交离线视频识别结果查询

直播流识别接口回调字段说明

错误码说明其他说明

业务层级错误码

调用方式调用方式

请求结构请求结构

服务地址服务地址

内容安全视频识别API的服务接入地址为:http://kir.api.ksyun.com

通信协议通信协议

支持通过HTTP或HTTPS协议进行请求通信。为保证您的服务安全性,请使用HTTPS协议进行通信。

请求方式请求方式

支持GET方法发送请求,注意参数需要进行urlencode。

公共参数公共参数

公共请求header公共请求header

参数名参数名 必选必选 类型类型 说明说明

Authorization是 string 必要的请求验证信息

X-Amz-Date 是 string 当前请求的时间戳,例如:20171129T114852Z

Host 否 string kir.api.ksyun.com

签名参数签名参数

Region:金山云机房信息,目前仅支持cn-beijing-6

Service:固定为kir

返回结果返回结果

接口统一返回json格式数据,满足以下格式:

{ "header":{ "err_no":200, "err_msg":"success"

API对接说明 2020-10-22

金山云 10/35

Page 11: 目录 - ks3-cn-beijing.ksyun.com

}, "cost":0.11, "request_id": "d679e27b-9f1b-44bf-b134-49a6d9f0adff", "request_time": 1234567890123, "body":{}}

调用成功,err_no返回200,msg为success,否则返回对应错误码及错误信息。

cost为服务端耗时,单位秒。

每此请求会返回唯一的请求表示request_id,调用失败时提供request_id给金山云客服,方便定位问题。

request_time为每次请求时的服务器时间

签名机制签名机制

详见金山云签名机制文档

离线视频识别接口离线视频识别接口

离线视频识别任务提交离线视频识别任务提交

GET参数部分

参数名参数名 必选必选 类型类型 说明说明

Action=AnalyzeVideo 是 string 固定此值

Version=2018-09-03 是 string API版本号,固定此值

POST请求示例:

{ "video_id": "3d6e528b8a0710986e229cd525491259", "guard_id": "1548746633316469125", "video_url": "https://test.com/364.mp4", "callback": "https://www.test.com", "origin_name": "生活区第三批", "media_intro": "{\"title\":\"美丽海岸\",\"tag\":\"大连,VLOG\",\"content\":\"景区介绍\"}", "user_id": "12345678", "priority": 5}

POST参数说明

参数参数 必选必选 类型类型 最大长度最大长度 说明说明

video_id 是 string 100视频id, 视频唯一标识由字母、数字、下划线、中线任意组成,必须以字母或数字开头

guard_id 是 string 64 送审计划id

video_url 是 string 512视频url支持http(s)、ftp等协议支持mp4、m3u8、ts、avi、mkv、flv、wmv、mov、rmvb等格式

callback 否 string 1024 回调地址,视频处理结果通过此地址回传

origin_name 否 string 64 来源名称,用于记录来源、批次等信息

media_intro 否 string 1024 媒体介绍,JSON格式的字符串

user_id 否 string 128 用户id

priority 否 Int [0,10] 处理优先级,默认0,值越高越优先处理

送审计划id获取路径:金睛内容识别 > 送审管理模块 > 送审计划列表/送审计划详情 > 复制送审计划id

详见金睛内容识别平台操作手册

接口返回:

{ "request_id": "d679e27b-9f1b-44bf-b134-49a6d9f0adff", "request_time": 1536148409363, "cost": 0.02, "header": { "err_no": 200, "err_msg": "success" }}

离线视频识别结果查询离线视频识别结果查询

GET参数部分

参数名参数名 必选必选 类型类型 说明说明

Action= GetAnalyzeVideoResult 是 string 固定此值

Version=2018-09-03 是 string API版本号,固定此值

POST请求示例:

{ "video_id": "3d6e528b8a0710986e229cd525491259"}

POST参数说明

参数参数 必选必选 类型类型 最大长度最大长度 说明说明

video_id 是 string 100 视频id

API对接说明 2020-10-22

金山云 11/35

Page 12: 目录 - ks3-cn-beijing.ksyun.com

接口返回:

{ "request_id":"ff35f7a5-7b65-4aaf-a97f-cf63bec2218c", "request_time":1560240162393, "cost":0.24, "header":{ "err_no":200, "err_msg":"success" }, "body":{ "video_id":"3d6e528b8a0710986e229cd525491259", "video_url":"http://test.com/test78116.mp4", "video_duration":229, "video_suggestion":"confirm_reject", "suggestSummaryCode":"350000", "suggestSummaryMessage":"视频图像政治敏感", "image_result":[ { "business":"ad", "suggest":"confirm_reject", "detail":[ { "imageUrl":"https://ks3-cn-beijing.ksyun.com/videodb/smarttag/2000074681/test08102/0.jpg", "timestamp":0, "labelId":"2", "labelDesc":"水印", "rate":"0.95" }, { "imageUrl":"https://ks3-cn-beijing.ksyun.com/videodb/smarttag/2000074681/test08102/1.jpg", "timestamp":1, "labelId":"2", "labelDesc":"水印", "rate":"0.93" } ] }, { "business":"terrorism", "suggest":"suggest_review", "detail":[ { "imageUrl":"https://ks3-cn-beijing.ksyun.com/videodb/smarttag/2000074681/test08102/30.jpg", "timestamp":30, "labelId":"2", "labelDesc":"暴恐", "rate":"0.98", "label2":"2", "label2_desc":"国类军装", "rate2":"0.96" } ] }, { "business":"ocr", "suggest":"confirm_reject", "detail":[ { "imageUrl":"https://ks3-cn-beijing.ksyun.com/videodb/smarttag/2000074681/test08102/6.jpg", "timestamp":6, "labelId":"5", "labelDesc":"涉政", "rate":"0.96", "keywords":[ { "matched_item":"共军" } ] } ] }, { "business":"porn", "suggest":"confirm_reject", "detail":[ { "imageUrl":"https://ks3-cn-beijing.ksyun.com/videodb/smarttag/2000074681/test08102/8.jpg", "timestamp":8, "labelId":"2", "labelDesc":"低俗", "rate":"0.98", "label2":"30", "label2_desc":"床上场景", "rate2":"0.95" }, { "imageUrl":"https://ks3-cn-beijing.ksyun.com/videodb/smarttag/2000074681/test08102/9.jpg", "timestamp":9, "labelId":"2", "labelDesc":"低俗", "rate":"0.96", "label2":"30", "label2_desc":"床上场景", "rate2":"0.96" } ] }, { "business":"politic", "suggest":"normal", "detail":[

] }, { "business":"illegal", "suggest":"suggest_review", "detail":[ { "imageUrl":"https://ks3-cn-beijing.ksyun.com/videodb/smarttag/2000074681/test08102/33.jpg", "timestamp":33, "labelId":"4", "labelDesc":"ACG违规", "rate":"0.99", "label2":"13", "label2_desc":"未成年", "rate2":"0.98" } ] }, { "business":"sensitive", "suggest":"suggest_review", "detail":[ { "imageUrl":"https://ks3-cn-beijing.ksyun.com/videodb/smarttag/2000074681/test08102/33.jpg", "timestamp":33, "labelId":"4", "labelDesc":"涉政人物", "rate":"0.97", "label2":"21", "label2_desc":"台独", "rate2":"0.96",

API对接说明 2020-10-22

金山云 12/35

Page 13: 目录 - ks3-cn-beijing.ksyun.com

"keywords":[ { "matched_item":"白云" } ] } ] } ], "audio_result":[ { "business":"illegal", "suggest":"confirm_reject", "detail":[ { "text":"共产党一定要把文革的真相告诉同学们。", "label":"5", "label_desc":"涉政", "rate":"0.99", "start_seconds":0, "end_seconds":30, "keywords":[ { "matched_item":"共产党", "matched_item":"文革" } ] }, { "text":"走资派,那些赤裸裸的反对毛主席。", "label":"5", "label_desc":"涉政", "rate":"0.99", "start_seconds":210, "end_seconds":229, "keywords":[ { "matched_item":"毛主席" } ] } ] }, { "business":"porn", "suggest":"confirm_reject", "detail":[ { "text":"", "label":"2", "label_desc":"色情", "rate":"0.97", "start_seconds":36, "end_seconds":44 }, { "text":"", "label":"2", "label_desc":"色情", "rate":"0.98", "start_seconds":40, "end_seconds":48 }, { "text":"", "label":"2", "label_desc":"色情", "rate":"0.96", "start_seconds":44, "end_seconds":52 } ] } ] }}

接口输出字段解释:

释:

字段字段 类型类型 是否必须是否必须 说明说明

video_id string 是 视频ID

Video_url string 是 视频URL

video_duration int 是 视频时长,单位秒

video_suggestion string 是

视频处理建议:normal:通过suggest_review:疑似confirm_reject:拒绝

suggestSummaryCode string 是

识别建议原因编码 100000:正常350000:视频图像政治敏感234000:视频图像涉政250000:视频图像涉黄230000:视频图像涉暴246000:视频OCR违规238000:视频图像违规违法242000:视频涉嫌推广206000:视频音频违规211000:视频音频涉黄

suggestSummaryMessage string 是 识别建议原因描述

business string 是

对应请求中的参数值image_result中:sensitive:图像政治敏感politic:敏感人物图像识别porn:色情图像识别terrorism:暴恐图像识别ocr:OCR图像识别illegal:违规违法图像识别ad:广告图像识别audio_result中:illegal:色情音频识别porn:违规音频识别

suggest string 是

建议normal:通过suggest_review:疑似confirm_reject:拒绝

image_result list 否 违规图片识别结果集

imageUrl string 是 图片地址

timestamp int 是 相对于视频起始位置的秒数

API对接说明 2020-10-22

金山云 13/35

Page 14: 目录 - ks3-cn-beijing.ksyun.com

labelId string 是

分类标签ID(int类型)sensitive:1-正常;2-涉政运动;3-涉政动漫;4-涉政人物;5-涉政违规politic:1-非敏感人物;2-敏感人物;3-无人脸porn:1-正常;2-低俗;3-色情terrorism:1-正常;2-暴恐;3-血腥ocr:1-正常,2-涉黄,3-广告,4-涉暴,5-涉政,6--辱骂,7-灌水illegal:1-正常;2-违法;3-违规;4-ACG违规ad:1-无广告;2-水印;3-二维码;4-条形码

labelDesc string 是 分类标签描述(string类型)

rate string 是 分类置信度 [0, 1.0],值越大置信度越高(double类型)

label2 string 否 二级标签

label2_desc string 否 二级标签描述

rate2 string 否 二级分类置信度 [0, 1.0],值越大置信度越高(double类型)

keywords list 否 命中关键字列表

matched_item string 否

sensitive:图像政治敏感,对应命中face_namepolitic:敏感人物图像识别,对应命中face_nameocr:OCR图像识别,对应匹配文字illegal:色情音频识别,对应匹配关键字

audio_result list 否 违规音频段识别结果集

label string 是分类标签ID(int类型)illegal:1-正常,2-涉黄,3-广告,4-涉暴,5-涉政,6--辱骂,7-灌水 porn:1-正常;2-娇喘

label_desc string 是 分类标签描述(string类型)

text string 否 音频识别出的文字

start_seconds int 是 音频结果开始秒数

end_seconds int 是 音频结果结束秒数

直播流识别接口直播流识别接口

输入:

GET参数部分

参数名参数名 必选必选 类型类型 说明说明

Action=AnalyzeVideoStream 是 string 固定此值

Version= 2019-07-03 是 string API版本号,固定此值

POST请求示例

{ "guard_id":"125211231231", "stream_url":"http://xxx.com/xx.flv", "stream_id":"xaaw123", "callback_url":"http://xxxxx/xxxcallback"}

POST参数说明

参数参数 必选必选 类型类型 说明说明

guard_id 是 string 送审计划id

stream_url 是 string 直播流url

stream_id 是 string 直播流id

callback_url 是 string 回调url

送审计划id获取路径:金睛内容识别 > 送审管理模块 > 送审计划列表/送审计划详情 > 复制送审计划id

详见金睛内容识别平台操作手册

接口返回:

{ "header":{ "err_no":200, "err_msg":"success" }, "cost":0.11, "request_id": "d679e27b-9f1b-44bf-b134-49a6d9f0adff", "request_time": 1234567890123, "body":{}}

违规直播流抽帧的图片回调结构:

{ "data_id": "31a43e1d08ee1023c2daa99c9d159628", "guard_id": "1559203003873916078", "image_url": "http://ks3-cn-beijing.ksyun.com/videodb/31a43e1d08ee1023c2daa99c9d159628.jpg", "results": [{ "business": "illegal", "label": "1", "label_desc": "正常", "rate": 0.929911196231842, "suggest": "normal" }, { "business": "ad", "label": "2", "label_desc": "水印", "label_details": [{ "rate": 0.9767667055130005, "type": "watermark" }], "rate": 0.9767667055130005, "suggest": "confirm_reject" }, {

API对接说明 2020-10-22

金山云 14/35

Page 15: 目录 - ks3-cn-beijing.ksyun.com

"business": "ocr", "label": "1", "label_desc": "正常", "label_details": { "text_filter": { "conclusion": "正常", "risk_type": "正常" }, "word_list": ["15635", "#精##特r1、1物1#,精#", "##的B#.n、##人#,1#", "#43((0)#。人##歌分", "L##.10.3###,#0", "队福持你榜#####看0#的#", "、#.a有MB银#", "##4#####速###),####,", "加#技有#,间有机50t", "#毒级##自#春####", "a##行###,####人#数了#[#。", "3d/.00r", "###位aa#t4", "2:人", "本丸B#8", "####民", "#:我#播使##后#########人", "####人6##", "言#:2给.2"] }, "rate": 0.99, "suggest": "normal" }, { "business": "terrorism", "label": "1", "label_desc": "正常", "rate": 0.8627758026123047, "suggest": "normal" }, { "business": "politic", "label": "3", "label_desc": "无人脸", "rate": 0.99, "suggest": "normal" }, { "business": "porn", "label": "1", "label_desc": "正常", "rate": 0.9583984375, "suggest": "normal" }], "stream_id": "1234452231122345-23333", "suggest_summary": "confirm_reject", "suggest_summary_code": "244000", "suggest_summary_message": "直播涉嫌推广"}

违规直播流抽帧的音频回调结构:

{ "body": { "data_id": "4a75a3be104ec296058047941c261a21", "audio_url": "https://ks3-cn-beijing.ksyun.com/airesearch/datasets/test_mp3_20190311/lover_30s.mp3", "suggest_summary": "confirm_reject", "suggest_summary_code": "210000", "suggest_summary_message": "直播音频违规", "stream_id": "1111111", "start_time":1556266149000, "end_time":15562661491000, "results": [ { "business": "illegal", "text": "XXXXXXXXXXXXXXXXXX", "label": "5", "label_desc": "涉政", "label_details": [ { "word": "XXX" }, { "word": "XX" } ], "suggest": "confirm_reject" }, { "business": "porn", "label": "2", "label_desc": "娇喘", "label_details": [ { "start_time": 1556266149000, "end_time": 1556266149000 }, { "start_time": 155626614900, "end_time": 1556266149000 } ], "rate":0.99, "suggest": "confirm_reject" } ] }, "header": { "err_no": 200, "err_msg": "success" }, "request_id": "7e106d4a-25f1-4a9a-98fc-ba9b9a4fd74d", "request_time":"1557906136463"}

违规直播流回调期望返回:

{ "code":0}

回调字段说明回调字段说明

字段字段 类型类型 是否必须是否必须 说明说明

body.data_id string 是 视频段唯一id

body.image_url string 否 直播流抽帧的图片url

body.audio_url string 是 视频抽帧的音频url

body.suggest_summary string 是confirm_reject:拒绝;suggest_review:疑似;normal:通过

body.suggest_summary_code string 是

236000:直播图像涉政;205000:直播图像涉黄;232000:直播图像涉暴;294000:直播图像OCR违规;240000:直播图像违规违法;244000:直播涉嫌推广;210000:直播音频违规;215000:直播音频涉黄;100000:正常

API对接说明 2020-10-22

金山云 15/35

Page 16: 目录 - ks3-cn-beijing.ksyun.com

body.suggest_summary_message string 是

236000:直播图像涉政;205000:直播图像涉黄;232000:直播图像涉暴;294000:直播图像OCR违规;240000:直播图像违规违法;244000:直播涉嫌推广;210000:直播音频违规;215000:直播音频涉黄;100000:正常

labelId int 是

直播视频图片porn: 1正常;2低俗;3色情terrorism: 1正常;2暴恐;3血腥politic: 1非敏感人物;2敏感人物;3无人脸ocr:1正常,2涉黄,3广告,4涉暴,5涉政,6辱骂,7灌水,0其他illegal: 1正常;2违法;3违规;4ACG违规ad:1无广告;2水印;3二维码;4条形码直播视频音频porn: 1正常,2娇喘illegal: 1正常,2涉黄,3广告,4涉暴,5涉政,6辱骂,7灌水,0其他

body.stream_id string 是 直播流id

body.start_time long 是 直播流段开始时间单位毫秒

错误码说明错误码说明

调用接口失败时,返回的HTTP消息体将中包含具体的错误信息,下表为错误码的具体说明,找不到错误原因时,可以联系我们,并提供Response中的request_id/video_id,以便尽快解决问题。

其他说明其他说明

接口regionId仅支持cn-beijing-6;

业务层级错误码业务层级错误码

err_msgerr_msg err_noerr_no 说明说明

下载失败 -10 视频下载失败/连接超时

获取媒体信息失败 -20 获取视频时长等信息失败

图片抽帧失败 -30 视频抽取图片失败

音频抽取失败 -40 视频抽取音频失败

调用图片服务失败 -50 调用图片识别服务失败

调用音频服务失败 -60 调用音频识别服务失败

媒体汇总失败 -70 视频汇总决策审核信息失败

媒体审核失败 -80 视频审核策略失败

媒体处理失败 -5 视频处理过程中出现异常

请传入必须参数 410 按照接口文档传入必须参数

媒体ID已经存在 411 视频ID是全局唯一标识

参数媒体ID不合法 412 视频ID必须由字母、数字、下划线、中线任意组成,必须以字母或数字开头

参数媒体ID长度不能大于100字节 413 参数视频ID长度不能大于100字节

参数媒体URL长度不能大于512字节 414 参数视频URL长度不能大于512字节

参数回调地址长度不能大于1024字节 415 参数回调地址长度不能大于1024字节

参数来源名称长度不能大于64字节 416 参数来源名称长度不能大于64字节

参数媒体介绍长度不能大于1024字节 417 参数媒体介绍长度不能大于1024字节

参数用户ID长度不能大于128字节 418 参数用户ID长度不能大于128字节

参数媒体URL格式有误 419 参数视频URL格式有误,支持http(s)、ftp等协议

系统异常 500 服务内部错误

媒体记录不存在 504 查询视频记录不存在

媒体检测中,请稍后 505 视频正在检测/排队中

送审计划有误 1001 送审计划有误

账号未开通服务 1003 账号未开通服务

查询数据已过期 1010 查询数据已过期

内容安全音频识别API文档-长音频内容安全音频识别API文档-长音频

目录目录

调用方式请求结构公共参数签名机制

短音频识别接口违规音频识别对应的results字段色情音频识别对应的results字段

长音频识别接口长音频识别任务提交长音频识别结果查询

音频流检测接口音频流检测断流接口

回调字段说明违规音频识别对应的results字段色情音频识别对应的results字段

错误码说明其他说明

业务层级错误码

调用方式调用方式

请求结构请求结构

服务地址服务地址

内容安全音频识别API的服务接入地址为:http://ksr.api.ksyun.com

通信协议通信协议

支持通过HTTP或HTTPS协议进行请求通信。为保证您的服务安全性,请使用HTTPS协议进行通信。

请求方式请求方式

支持GET方法发送请求,注意参数需要进行urlencode。

公共参数公共参数

公共请求header公共请求header

API对接说明 2020-10-22

金山云 16/35

Page 17: 目录 - ks3-cn-beijing.ksyun.com

参数名参数名 必选必选 类型类型 说明说明

Authorization是 string 必要的请求验证信息

X-Amz-Date 是 string 当前请求的时间戳,例如:20171129T114852Z

Host 否 string ksr.api.ksyun.com

签名参数签名参数

Region:金山云机房信息,目前仅支持cn-beijing-6

Service:固定为ksr

返回结果返回结果

接口统一返回json格式数据,满足以下格式:

{ "header":{ "err_no":200, "err_msg":"success" }, "cost":0.11, "request_id": "d679e27b-9f1b-44bf-b134-49a6d9f0adff", "request_time": 1234567890123, "body":{}}

调用成功,err_no返回200,msg为success,否则返回对应错误码及错误信息。

cost为服务端耗时,单位秒。

每此请求会返回唯一的请求表示request_id,调用失败时提供request_id给金山云客服,方便定位问题。

request_time为每次请求时的服务器时间

签名机制签名机制

详见金山云签名机制文档

短音频识别接口短音频识别接口

调用限制: 支持mp3/wav/aac/ape/wma/ogg/flac/m4a/flv音频格式; 音频时长限制为60s以内,语音识别返回时长较长,请耐心等待。

输入:

GET参数部分

参数名参数名 必选必选 类型类型 说明说明

Action=AnalyzeAudio 是 string 固定此值

Version=2019-03-15 是 string API版本号,固定此值

POST请求示例

{ "guard_id":"xxxx", "audio_url":"http://xxx.mp3", "stream_id":"xxxx", "user_id":"xxxx"}

POST参数说明

参数参数 必选必选 类型类型 说明说明

guard_id 是 string 送审计划id

audio_url 是 string 音频url

stream_id 否 string 音频所属流id,或音频所属房间号。

user_id 否 string 用户id

送审计划id获取路径:金睛内容识别 > 送审管理模块 > 送审计划列表/送审计划详情 > 复制送审计划id

详见金睛内容识别平台操作手册

接口返回:

{ "body": { "data_id": "4a75a3be104ec296058047941c261a21", "audio_url": "https://ks3-cn-beijing.ksyun.com/airesearch/datasets/test_mp3_20190311/lover_30s.mp3", "suggest_summary": "confirm_reject", "suggest_summary_code": "207000", "suggest_summary_message": "音频违规", "stream_id": "1111111", "results": [ { "business": "illegal", "text": "XXXXXXXXXXXXXXXXXX", "label": "5", "label_desc": "涉政", "label_details": [ { "word": "XXX" }, { "word": "XX" } ], "suggest": "confirm_reject"

API对接说明 2020-10-22

金山云 17/35

Page 18: 目录 - ks3-cn-beijing.ksyun.com

}, { "business": "porn", "label": "2", "label_desc": "娇喘", "rate": 0.99, "label_details": [ { "start_time": 8000, "end_time": 16000 }, { "start_time": 32000, "end_time": 40000 } ], "suggest": "confirm_reject" } ] }, "header": { "err_no": 200, "err_msg": "success" }, "cost": 6.851, "request_id": "7e106d4a-25f1-4a9a-98fc-ba9b9a4fd74d", "request_time": 1552448974013}

接口输出字段解释:

字段字段 类型类型 是否必须是否必须 说明说明

label string 是 分类标签ID

label_desc string 是 分类标签

auido_url string 是 对应请求中的地址

data_id string 是 唯一标识该音频

suggest_summary string 是 confirm_reject:拒绝;normal:通过;suggest_review: 疑似;

suggest_summary_code string 是207000:音频违规;212000:音频涉黄;100000:正常

suggest_summary_message string 是207000:音频违规;212000:音频涉黄;100000:正常

违规音频识别对应的results字段违规音频识别对应的results字段

字段字段 类型类型 是否必须是否必须 说明说明

business string 是 调用服务名称,违规音频识别:illegal

label string 是分类标签ID1:正常;2:涉黄;3:广告,4:涉暴,5:涉政,6:辱骂,7:灌水

label_desc string 是分类标签1:正常;2:涉黄;3:广告,4:涉暴,5:涉政,6:辱骂,7:灌水

label_details object 是 音频违规详情

text string 是 音频识别结果

suggest string 是 confirm_reject:拒绝;normal:通过; suggest_review: 疑似;

色情音频识别对应的results字段色情音频识别对应的results字段

字段字段 类型类型 是否必须是否必须 说明说明

business string 是 调用服务名称,色情音频识别:porn

label string 是分类标签ID1:正常;2:娇喘

label_desc string 是分类标签1:正常;2:娇喘

label_details object 是 音频涉黄详情

suggest string 是 confirm_reject:拒绝;normal:通过;

rate double 是 分类置信度 [0, 1.0],值越大置信度越高

长音频识别接口长音频识别接口

长音频识别任务提交长音频识别任务提交

GET参数部分

参数名参数名 必选必选 类型类型 说明说明

Action=AnalyzeLongAudio 是 string 固定此值

Version=2019-04-02 是 string API版本号,固定此值

POST请求示例:

{ "audio_id": "dfe8bd36-91a7-486b-bdf3-d9b4c3355b79", "guard_id": "1548746633316469125", "audio_url": "https://test.com/123.mp3", "callback": "https://www.test.com", "origin_name": "生活区第三批", "media_intro": "{\"title\":\"美丽海岸\",\"tag\":\"大连,VLOG\",\"content\":\"景区介绍\"}", "user_id": "12345678"}

POST参数说明

参数参数 必选必选 类型类型 最大长度最大长度 说明说明

audio_id 是 string 100音频id, 音频唯一标识由字母、数字、下划线、中线任意组成,必须以字母或数字开头

guard_id 是 string 64 送审计划id

audio_url 是 string 512音频url支持http(s)、ftp等协议支持mp3、wav、aac、ape、wma、ogg、flac、m4a等格式

callback 否 string 1024 回调地址,音频处理结果通过此地址回传

origin_name 否 string 64 来源名称,用于记录来源、批次等信息

media_intro 否 string 1024 媒体介绍,JSON格式的字符串

user_id 否 string 128 用户id

送审计划id获取路径:金睛内容识别 > 送审管理模块 > 送审计划列表/送审计划详情 > 复制送审计划id

API对接说明 2020-10-22

金山云 18/35

Page 19: 目录 - ks3-cn-beijing.ksyun.com

详见金睛内容识别平台操作手册

接口返回:

{ "request_id": "d679e27b-9f1b-44bf-b134-49a6d9f0adff", "request_time": 1536148409363, "cost": 0.02, "header": { "err_no": 200, "err_msg": "success" }}

长音频识别结果查询长音频识别结果查询

GET参数部分

参数名参数名 必选必选 类型类型 说明说明

Action=GetLongAudioResult 是 string 固定此值

Version=2019-04-02 是 string API版本号,固定此值

POST请求示例:

{ "audio_id": "3d6e528b8a0710986e229cd525491259"}

POST参数说明

参数参数 必选必选 类型类型 最大长度最大长度 说明说明

audio_id 是 string 100 音频id

接口返回:

{ "request_id": "ff35f7a5-7b65-4aaf-a97f-cf63bec2218c", "request_time": 1560240162393, "cost": 0.24, "header": { "err_no": 200, "err_msg": "success" }, "body": { "audio_id": "3d6e528b8a0710986e229cd525491259", "audio_url": "http://test.com/test78116.mp4", "audio_duration": 229, "audio_suggest": "confirm_reject", "suggest_summary_code": "208000", "suggest_summary_message": "违规音频", "audio_results": [ { "audio_url": "https://ks3-cn-beijing.ksyun.com/videodb/b23.mp3", "text": "共产党一定要把文革的真相告诉同学们。", "start_seconds": 0, "end_seconds": 30, "audio_suggest": "confirm_reject", "audio_suggest_code": "208000", "audio_suggest_message": "音频违规", "audio_details": [ { "business": "illegal", "suggest": "confirm_reject", "label": 5, "label_desc": "涉政", "rate": 0.94, "keywords": [ { "matched_item": "共产党" }, { "matched_item": "文革" } ] } ] }, { "audio_url": "https://ks3-cn-beijing.ksyun.com/videodb/b47.mp3", "text": "", "start_seconds": 15, "end_seconds": 45, "audio_suggest": "confirm_reject", "audio_suggest_code": "213000", "audio_suggest_message": "音频涉黄", "audio_details": [ { "business": "porn", "suggest": "confirm_reject", "label": 2, "label_desc": "娇喘", "rate": 0.92 } ] } ] }}

接口输出字段解释:

字段字段 类型类型 是否必须是否必须 说明说明

API对接说明 2020-10-22

金山云 19/35

Page 20: 目录 - ks3-cn-beijing.ksyun.com

audio_id string 是 视频ID

audio_url string 是 视频地址

audio_duration int 是 视频时长,单位秒

audio_suggest string 是

视频处理建议normal:通过suggest_review:疑似confirm_reject:拒绝

suggest_summary_code string 是

识别建议原因编码 100000:正常208000:违规音频213000:色情音频

suggest_summary_message string 是 识别建议原因描述

audio_results list 否 违规音频段识别结果集

audio_results.audio_url string 是 音频段地址

audio_results.text string 否 音频段识别出的文字

audio_results.start_seconds int 是 音频段在视频中所在开始秒数

audio_results.end_seconds int 是 音频段在视频中所在结束秒数

audio_results.audio_suggest string 是

音频段建议normal:通过suggest_review:疑似confirm_reject:拒绝

audio_results.audio_suggest_code string 是

音频段识别建议原因编码 100000:正常208000:音频违规213000:音频涉黄

audio_results.audio_suggest_message string 是

audio_results.audio_details list 是 违规音频段详情

audio_results.audio_details.business

string 是服务名称illegal:违规音频porn:色情音频

audio_results.audio_details.suggest

string 是

建议normal:通过suggest_review:疑似confirm_reject:拒绝

audio_results.audio_details.label

int 是分类标签IDillegal:1-正常,2-涉黄,3-广告,4-涉暴,5-涉政,6--辱骂,7-灌水porn:1-正常;2-娇喘

audio_results.audio_details.label_desc

string 是 分类标签描述

audio_results.audio_details.rate

double 是 分类标签置信度 [0, 1.0],值越大置信度越高

audio_results.audio_details.keywords

list 否 命中违规关键字列表

audio_results.audio_details.keywords.matched_item

string 是 命中关键字

音频流检测接口音频流检测接口

输入:

GET参数部分

参数名参数名 必选必选 类型类型 说明说明

Action=AnalyzeAudioStream 是 string 固定此值

Version= 2019-05-15 是 string API版本号,固定此值

POST请求示例

{ "guard_id":"125211231231", "stream_url":"http://xxx.com/xx.flv", "stream_id":"xaaw123", "user_id":"userceshi", "callback_url":"http://xxxxx/xxxcallback"}

POST参数说明

参数参数 必选必选 类型类型 说明说明

guard_id 是 string 送审计划id

stream_url 是 string 音频流url

stream_id 是 string 音频流id

callback_url 是 string 回调url

user_id 否 string 用户id

音频流检测断流接口音频流检测断流接口

输入:

GET参数部分

参数名参数名 必选必选 类型类型 说明说明

Action=AnalyzeAudioStream 是 string 固定此值

Version= 2019-05-15 是 string API版本号,固定此值

POST请求示例

{ "guard_id":"125211231231", "stream_url":"http://xxx.com/xx.flv", "stream_id":"xaaw123", "user_id":"userceshi", "callback_url":"http://xxxxx/xxxcallback", "action":"end"}

POST参数说明

参数参数 必选必选 类型类型 说明说明

guard_id 是 string 送审计划id

stream_url 是 string 音频流url

stream_id 是 string 音频流id

callback_url 是 string 回调url

user_id 否 string 用户id

API对接说明 2020-10-22

金山云 20/35

Page 21: 目录 - ks3-cn-beijing.ksyun.com

action 是 string 断流标识,值固定:end

送审计划id获取路径:金睛内容识别 > 送审管理模块 > 送审计划列表/送审计划详情 > 复制送审计划id

详见金睛内容识别平台操作手册

接口返回:

{ "header":{ "err_no":200, "err_msg":"success" }, "cost":0.11, "request_id": "d679e27b-9f1b-44bf-b134-49a6d9f0adff", "request_time": 1234567890123, "body":{}}

违规音频段回调结构:

{ "body": { "data_id": "4a75a3be104ec296058047941c261a21", "audio_url": "https://ks3-cn-beijing.ksyun.com/airesearch/datasets/test_mp3_20190311/lover_30s.mp3", "suggest_summary": "confirm_reject", "suggest_summary_code": "209000", "suggest_summary_message": "音频违规", "user_id":"userceshi", "stream_id": "1111111", "start_time":1556266149000, "end_time":15562661491000, "results": [ { "business": "illegal", "text": "XXXXXXXXXXXXXXXXXX", "label": "5", "label_desc": "涉政", "label_details": [ { "word": "XXX" }, { "word": "XX" } ], "suggest": "confirm_reject" }, { "business": "porn", "label": "2", "label_desc": "娇喘", "label_details": [ { "start_time": 1556266149000, "end_time": 1556266149000 }, { "start_time": 155626614900, "end_time": 1556266149000 } ], "rate":0.99, "suggest": "confirm_reject" } ] }, "header": { "err_no": 200, "err_msg": "success" }, "request_id": "7e106d4a-25f1-4a9a-98fc-ba9b9a4fd74d", "request_time":"1557906136463"}

违规音频段回调期望返回:

{ "code":0}

回调字段说明回调字段说明

字段字段 类型类型 是否必须是否必须 说明说明

body.data_id string 是 音频段唯一id

body.audio_url string 是 音频段url

body.suggest_summary string 是confirm_reject:拒绝;suggest_review:疑似;normal:通过

body.suggest_summary_code string 是209000:音频违规;214000:音频涉黄;100000:正常

body.suggest_summary_message string 是209000:音频违规;214000:音频涉黄;100000:正常

body.stream_id string 是 音频流id

body.start_time long 是 音频段开始时间单位毫秒

user_id string 否 用户id

违规音频识别对应的results字段违规音频识别对应的results字段

API对接说明 2020-10-22

金山云 21/35

Page 22: 目录 - ks3-cn-beijing.ksyun.com

字段字段 类型类型 是否必须是否必须 说明说明

business string 是 调用服务名称,违规音频识别:illegal

label string 是分类标签ID1:正常;2:涉黄;3:广告,4:涉暴,5:涉政,6:辱骂,7:灌水

label_desc string 是分类标签1:正常;2:涉黄;3:广告,4:涉暴,5:涉政,6:辱骂,7:灌水

label_details object 是 音频违规详情

text string 是 音频识别结果

suggest string 是 confirm_reject:拒绝;normal:通过;suggest_review:疑似;

色情音频识别对应的results字段色情音频识别对应的results字段

字段字段 类型类型 是否必须是否必须 说明说明

business string 是 调用服务名称,色情音频识别:porn

label string 是分类标签ID1:正常;2:娇喘

label_desc string 是分类标签1:正常;2:娇喘

label_details object 是 音频涉黄详情

suggest string 是 confirm_reject:拒绝;normal:通过

rate double 是 分类置信度 [0, 1.0],值越大置信度越高

错误码说明错误码说明

调用接口失败时,返回的HTTP消息体将中包含具体的错误信息,下表为错误码的具体说明,找不到错误原因时,可以联系我们,并提供Response中的request_id/audio_id,以便尽快解决问题。

其他说明其他说明

接口regionId仅支持cn-beijing-6;

业务层级错误码业务层级错误码

err_msgerr_msg err_noerr_no 说明说明

下载失败 -10 长音频下载失败/连接超时

获取媒体信息失败 -20 获取长音频时长等信息失败

音频抽取失败 -40 长音频切分音频段失败

调用音频服务失败 -60 调用音频识别服务失败

媒体汇总失败 -70 长音频汇总决策审核信息失败

媒体审核失败 -80 长音频审核策略失败

媒体处理失败 -5 长音频处理过程中出现异常

请传入必须参数 410 按照接口文档传入必须参数

媒体ID已经存在 411 音频ID是全局唯一标识

参数媒体ID不合法 412 音频ID必须由字母、数字、下划线、中线任意组成,必须以字母或数字开头

参数媒体ID长度不能大于100字节 413 参数音频ID长度不能大于100字节

参数媒体URL长度不能大于512字节 414 参数音频URL长度不能大于512字节

参数回调地址长度不能大于1024字节 415 参数回调地址长度不能大于1024字节

参数来源名称长度不能大于64字节 416 参数来源名称长度不能大于64字节

参数媒体介绍长度不能大于1024字节 417 参数媒体介绍长度不能大于1024字节

参数用户ID长度不能大于128字节 418 参数用户ID长度不能大于128字节

参数媒体URL格式有误 419 参数音频URL格式有误,支持http(s)、ftp等协议

系统异常 500 服务内部错误

媒体记录不存在 504 查询长音频记录不存在

媒体检测中,请稍后 505 长音频正在检测/排队中

送审计划有误 1001 送审计划有误

账号未开通服务 1003 账号未开通服务

查询数据已过期 1010 查询数据已过期

内容安全文本识别API文档内容安全文本识别API文档

目录目录

调用方式请求结构公共参数签名机制

文本过滤接口错误码

调用方式调用方式

请求结构请求结构

服务地址服务地址

内容安全文本识别API的服务接入地址为:http://itr.api.ksyun.com

通信协议通信协议

支持通过HTTP或HTTPS协议进行请求通信。为保证您的服务安全性,请使用HTTPS协议进行通信。

请求方式请求方式

支持GET方法发送请求,注意参数需要进行urlencode。

公共参数公共参数

公共请求header公共请求header

参数名参数名 必选必选 类型类型 说明说明

Authorization是 string 必要的请求验证信息

X-Amz-Date 是 string 当前请求的时间戳,例如:20181026T114852Z

Host 否 string itr.api.ksyun.com

签名参数签名参数

Region:金山云机房信息,目前仅支持cn-beijing-6

Service:固定为itr

API对接说明 2020-10-22

金山云 22/35

Page 23: 目录 - ks3-cn-beijing.ksyun.com

返回结果返回结果

接口统一返回json格式数据,满足以下格式:

{ "header":{ "err_no":200, "err_msg":"success" }, "cost":0.11, "request_id": "d679e27b-9f1b-44bf-b134-49a6d9f0adff", "request_time": 1234567890123, "body":{}}

调用成功,err_no返回200,msg为success,否则返回对应错误码及错误信息。

cost为服务端耗时,单位秒。

每此请求会返回唯一的请求表示request_id,调用失败时提供request_id给金山云客服,方便定位问题。

request_time为每次请求时的服务器时间

签名机制签名机制

详见金山云签名机制文档

文本过滤接口文本过滤接口

输入:

GET参数部分

参数名参数名 必选必选 类型类型 说明说明

Action=ClassifyText 是 string 固定此值

Version=2018-10-26 是 string API版本号,固定此值

POST请求示例

{ "text":"社会主义好,毛主席万岁,以人为本,邓小平理论", "guard_id":"1553754923733682476"

}

POST参数说明

参数参数 必选必选 类型类型 说明说明

text 是 string 需要识别的文本内容

guard_id 是 string 送审id

送审计划id获取路径:金睛内容识别 > 送审管理模块 > 送审计划列表/送审计划详情 > 复制送审计划id

详见金睛内容识别平台操作手册

接口返回:

{ "cost": 0.25, "header": { "err_no": 200, "err_msg": "success" }, "request_id": "b59c67bf196a4876465e42f76670ceba", "request_time": 1554166003593, "body": { "suggest_summary": "suggest_review", "suggest_summary_code": "216000", "suggest_summary_message": "文本违规", "results": [ { "business": "tfs", "label": "5", "rate": 0.95455, "label_desc": "涉政", "match_item": [ { "word": "毛主席" }, { "word": "邓小平" } ] } ] }}

文本正常时接口返回:

{ "cost": 0.199, "header": { "err_no": 200, "err_msg": "success" }, "request_id": "b59c67bf196a4876465e42f76670ceba", "request_time": 1554166590982, "body": { "suggest_summary": "normal",

API对接说明 2020-10-22

金山云 23/35

Page 24: 目录 - ks3-cn-beijing.ksyun.com

"suggest_summary_code": "100000", "suggest_summary_message": "正常", "results": [ { "business": "tfs", "label": "1", "rate": 1.0, "label_desc": "正常", "match_item":[] } ] }}

接口输出字段解释:

字段字段 类型类型 是否必须是否必须 说明说明

cost float 是 接口耗时

suggest_summary string 是 摘要:normal,suggest_review ,confirm_reject

suggest_summary_code string 是 摘要码:100000、216000

suggest_summary_message string 摘要信息:正常、文本违规

business string 是业务类型tfs文本过滤

score double 是 置信度

label string 是分类标签ID(int类型)tfs: 1正常,2涉黄,3广告,4涉暴,5涉政,6辱骂,7灌水,8其它违规,9正常-自定义文本白名单,10文本违规-自定义文本黑名单,11广告法违规

label_desc string 是分类标签(string类型)tfs: 1正常,2涉黄,3广告,4涉暴,5涉政,6辱骂,7灌水,8其它违规,9正常-自定义文本白名单,10文本违规-自定义文本黑名单,11广告法违规

match_item array 是命中敏感词当文本不包含违规词,通过上下文语意推理得出违规的识别结果时,该字段为空

错误码错误码

err_noerr_no err_msgerr_msg 说明说明

421 未开通文本过滤服务 未开通文本过滤服务

500 Service Internal Error 内部错误

400 传入的参数不对 传入的参数不对

509 模型处理异常! 模型处理异常!

510 请求太频繁 请求QPS超过限制

1003 文本长度过长! 文本长度过长!最大支持6000词

× 拖拽到此处 图片将完成下载

金山云内容理解图像API文档金山云内容理解图像API文档

目录目录

调用方式请求结构公共参数签名机制

Special识别接口通用标签识别接口直播标签识别接口错误码说明

签名错误码业务层级错误码

其他说明

调用方式调用方式

请求结构请求结构

服务地址服务地址

金山云图像识别API的服务接入地址为:http://kir.api.ksyun.com

通信协议通信协议

支持通过HTTP或HTTPS协议进行请求通信。为保证您的服务安全性,请使用HTTPS协议进行通信。

请求方式请求方式

支持GET方法发送请求,注意参数需要进行urlencode。

公共参数公共参数

公共请求header公共请求header

参数名参数名 必选必选 类型类型 说明说明

Authorization是 string 必要的请求验证信息

X-Amz-Date 是 string 当前请求的时间戳,例如:20171129T114852Z

Host 否 string kir.api.ksyun.com

签名参数签名参数

Region:金山云机房信息,目前仅支持cn-beijing-6

Service:固定为kir

返回结果返回结果

接口统一返回json格式数据,满足以下格式:

{ "header":{ "err_no":200, "err_msg":"success" }, "cost":0.11, "request_id": "d679e27b-9f1b-44bf-b134-49a6d9f0adff", "request_time": 1234567890123, "body":{}}

调用成功,err_no返回200,msg为success,否则返回对应错误码及错误信息。

cost为服务端耗时,单位秒。

每此请求会返回唯一的请求表示request_id,调用失败时提供request_id给金山云客服,方便定位问题。

API对接说明 2020-10-22

金山云 24/35

Page 25: 目录 - ks3-cn-beijing.ksyun.com

request_time为每次请求时的服务器时间

签名机制签名机制

详见金山云签名机制文档

Special识别接口Special识别接口

输入:

GET参数部分

参数名参数名 必选必选 类型类型 说明说明

Action=ClassifyImage 是 string 固定此值

Version=2017-11-07 是 string API版本号,固定此值

POST请求示例

{ "business":["special"], "image_urls":[ "http://xxx.jpg", "http://xxx.jpg", "....." ], "image_data":"base64 for image data"}

POST参数说明

参数参数 必选必选 类型类型 说明说明

business 是 array业务类型(可同时识别多类型) special特殊场景识别

image_urls 否 array 图片url列表(最多10张图片)

image_data 否 string 图片内容的BASE64编码

接口返回:

{ "header": { "err_no": 200, "err_msg": "success" }, "cost": 0.11, "request_id": "d679e27b-9f1b-44bf-b134-49a6d9f0adff", "request_time": 1234567890123, "body": [ { "err_no": 400,//仅图片格式出现错误有此信息 "err_msg": "图片格式错误",//仅图片格式出现错误有此信息 "data_id": "3c029d154350f6e94a8be2398b296fd4", "image_url": "http://ip/xxx.jpg", "results": [ { "err_no": 500,//仅模型出现错误有此信息 "err_msg": "内部错误",//仅模型出现错误有此信息 "business": "special", "label": "2", "label_desc": "CCTV", "rate": 0.99, "review": 0, "suggest": "normal" } ] } ]}

接口输出字段解释:

字段字段 类型类型 是否必须是否必须 说明说明

business string 是 对应请求中的参数值

label string 是 分类标签ID

label_desc string 是分类标签(string类型)0其他,2:CCTV,3:CNN,4:BBC

image_url string 是 对应请求中的地址

data_id string 是 唯一标识该图片

suggest string 是 confirm_reject:cnn,bbc,新唐人,美国之音标签下,确认状态;normal:其它标签状态

通用标签识别接口通用标签识别接口

输入:

GET参数部分

参数名参数名 必选必选 类型类型 说明说明

Action=ClassifyImage 是 string 固定此值

Version=2017-11-07 是 string API版本号,固定此值

POST请求示例

{ "business":["general"], "image_urls":[ "http://xxx.jpg", "http://xxx.jpg", "....." ], "image_data":"base64 for image data"}

POST参数说明

参数参数 必选必选 类型类型 说明说明

business 是 array业务类型(可同时识别多类型) general通用标签场景识别

image_urls 否 array 图片url列表(最多10张图片)

image_data 否 string 图片内容的BASE64编码

接口返回:

{ "header": { "err_no": 200, "err_msg": "success"

API对接说明 2020-10-22

金山云 25/35

Page 26: 目录 - ks3-cn-beijing.ksyun.com

}, "cost": 0.11, "request_id": "d679e27b-9f1b-44bf-b134-49a6d9f0adff", "request_time": 1234567890123, "body": [ { "err_no": 400,//仅图片格式出现错误有此信息 "err_msg": "图片格式错误",//仅图片格式出现错误有此信息 "data_id": "3c029d154350f6e94a8be2398b296fd4", "image_url": "http://ip/xxx.jpg", "results": [ { "err_no": 500,//仅模型出现错误有此信息 "err_msg": "内部错误",//仅模型出现错误有此信息 "business": "general", "label": "1", "label_desc": "人体", "rate": 0.9896137118339539, "review": 0, "task_id": "f9315ef8-8fbd-11e8-bce7-107b4445769f", "label_details": [ { "label": "1", "label_desc":"人体", "rate": 0.9896137118339539 }, { "label": "5", "label_desc": "穿着配饰", "rate": 0.9821652770042419 }, { "label":"20", "label_desc": "体育建筑", "rate": 0.5532062649726868 } ] } ] } ]}

接口输出字段解释:

字段字段 类型类型 是否必须是否必须 说明说明

business string 是 对应请求中的参数值

label string 是置信度最高标签ID(string类型) 详见通用标签表

label_desc string 是置信度最高标签结果 详见通用标签列表

rate double 是 标签置信度 [0, 1.0],值越大置信度越高

label_details object 是通用标签详情(object类型) 包含所有匹配标签与其置信度

review int 是 结果是否需要人工复审

image_url string 是 对应请求中的地址

data_id string 是 唯一标识该图片

task_id string 是 标示该次检测任务

通用标签表:

通用标签ID通用标签ID 通用标签通用标签

1 人体

2 交通工具

3 基础设施

4 动物

5 穿着配饰

6 运动装备

7 餐具

8 食物

9 家具

10 植物

11 电子产品

12 家用电器

13 工具装饰

14 公共建筑

15 商业建筑

16 居住建筑

17 文教建筑

18 自然景观

19 体育建筑

20 医疗建筑

21 科研建筑

22 园林建筑

23 交通建筑

直播标签识别接口直播标签识别接口

输入:

GET参数部分

参数名参数名 必选必选 类型类型 说明说明

Action=ClassifyImage 是 string 固定此值

Version=2017-11-07 是 string API版本号,固定此值

POST请求示例

{ "business":["llr"], "image_urls":[ "http://xxx.jpg", "http://xxx.jpg", "....." ], "image_data":"base64 for image data"}

POST参数说明

参数参数 必选必选 类型类型 说明说明

API对接说明 2020-10-22

金山云 26/35

Page 27: 目录 - ks3-cn-beijing.ksyun.com

business 是 array业务类型(可同时识别多类型) llr直播标签场景识别

image_urls 否 array 图片url列表(最多10张图片)

image_data 否 string 图片内容的BASE64编码

接口返回:

{ "header": { "err_no": 200, "err_msg": "success" }, "cost": 0.11, "request_id": "d679e27b-9f1b-44bf-b134-49a6d9f0adff", "request_time": 1536904935959, "body": [ { "err_no": 400,//仅图片格式出现错误有此信息 "err_msg": "图片格式错误",//仅图片格式出现错误有此信息 "data_id": "05009b51d54de716ea5abd0ebe47488b", "image_url": "http://ip/xxx.jpg", "results": [ { "err_no": 500,//仅模型出现错误有此信息 "err_msg": "内部错误",//仅模型出现错误有此信息 "business": "llr", "label": "25", "label_desc": "性感", "rate": 0.9603763818740845, "review": 0, "task_id": "a477fe1e-b702-11e8-ab07-107b4445769f", "label_details": [ { "label": "25", "label_desc": "性感", "rate": 0.9603763818740845 }, { "label": "15", "label_desc": "萌妹", "rate": 0.8293153643608093 } ] } ] } ]}

接口输出字段解释:

字段字段 类型类型 是否必须是否必须 说明说明

business string 是 对应请求中的参数值

label string 是置信度最高标签ID(string类型) 详见直播标签表

label_desc string 是置信度最高标签结果 详见直播标签列表

rate double 是 标签置信度 [0, 1.0],值越大置信度越高

label_details object 是直播标签详情(object类型) 包含所有匹配标签与其置信度

review int 是 结果是否需要人工复审

image_url string 是 对应请求中的地址

data_id string 是 唯一标识该图片

task_id string 是 标示该次检测任务

直播标签表:

直播标签ID直播标签ID 直播标签直播标签

1 家里

2 宿舍

3 教室

4 餐厅

5 办公室

6 娱乐场所

7 商场

8 直播间

9 健身房

10 交通工具内部

11 运动场

12 户外

13 素人

14 小鲜肉

15 萌妹

16 御姐

17 嘻哈

18 小清新

19 大叔

20 型男

21 运动服

22 职业制服

23 学院

24 民族

25 性感

错误码说明错误码说明

调用接口失败时,返回的HTTP消息体将中包含具体的错误信息,下表为错误码的具体说明,找不到错误原因时,可以联系我们,并提供Response中的RequestId/request_id,以便尽快解决问题。

签名错误码签名错误码

错误代码(Code)错误代码(Code) 错误消息(Message)错误消息(Message) 状态码状态码 说明说明

IncompleteSignature

Date must be in ISO-8601 'basic format'. Got '%s'. See http://en.wikipedia.org/wiki/ISO_8601.

400 Date必须符合ISO_8601基本格式,参考:http://en.wikipedia.org/wiki/ISO_8601

IncompleteSignature

KSC query-string parameters must include %s. Re-examine the query-string parameters.

400查询条件中缺少签署信息,查询条件中必须包含”X-Amz-Algorithm“、”X-Amz-Credential“、”X-Amz-SignedHeaders“、”X-Amz-Date“信息

IncompleteSignature

Unsupported ksc 'algorithm': %s. 400 只支持如下签名算法:AWS4-HMAC-SHA256

API对接说明 2020-10-22

金山云 27/35

Page 28: 目录 - ks3-cn-beijing.ksyun.com

IncompleteSignature

Authorization header requires 'Credential' parameter. Authorization=%s. 400 请求Authorization header中需要包含“Credential”参数

IncompleteSignature

Credential must have exactly 5 slash-delimited elements, e.g. accesskeyid/date/region/service/aws4_request, got: %s.

400请求Authorization header中中“Credential”至少包含5项以斜杠分隔的元素,如:keyid/date/region/service/aws4_request

IncompleteSignature

Authorization header format error. 400 请求Authorization header的格式错误

IncompleteSignature

Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header, Authorization=%s

400 请求中缺少“X-Amz-Date”或者“Date” header信息

IncompleteSignature

Authorization header requires 'Signature' parameter. Authorization=%s 400 请求Authorization header中缺少“Signature”信息

IncompleteSignature

Authorization header requires 'SignedHeaders' parameter. Authorization=%s 400 请求Authorization header中缺少“SignedHeaders”信息

MissingAuthenticationToken

Request is missing 'Host' header. 403 请求header中缺少Host

MissingAuthenticationToken

Request is missing Authentication Token. 403 请求header中缺少认证token

MissingAuthenticationToken

%s not in Http Header. 403 %s不在Http header中

SignatureDoesNotMatch

Host' must be a 'SignedHeader' in the Authorization. 403 请求的SignedHeader中必须包含Host

SignatureDoesNotMatch

Credential should be scoped with a valid terminator: 'aws4_request', not: %s.

403 请求Authorization header中的“Credential”末尾必须是“aws4_request”

SignatureDoesNotMatch

Credential should be scoped to a valid region, not:%s. 403 请求Authorization header中的“Credential”中的Region信息无效

SignatureDoesNotMatch

Credential should be scoped to correct service: %s. 403 请求Authorization header中的“Credential”中的Service信息无效

SignatureDoesNotMatch

The request signature we calculated does not match the signature you provided.

403 请求中提供的签名与实际计算结果不匹配

SignatureDoesNotMatch

Signature expired:%s. 403 签名已过期

SignatureDoesNotMatch

Date in Credential scope does not match YYYYMMDD from ISO-8601 version of date from HTTP.

403请求Authorization header中的“Credential”中的Date应该是ISO8601基本格式,形如”YYYYMMDD“

InvalidClientTokenId

The security token included in the request is invalid. 403 请求中提供的AccessKeyId无效

业务层级错误码业务层级错误码

err_msgerr_msg err_noerr_no 说明说明

ImageURLInvalid 404 图片不可用

未开通鉴黄服务 405 未开通鉴黄服务

未开通鉴黄服务 405 未开通鉴黄服务

未开通暴恐服务 406 未开通暴恐服务

未开通敏感人物服务 407 未开通敏感人物服务

未知的业务类型 408 未知的业务类型

未开通游戏服务 409 未开通游戏服务

未开通OCR服务 410 未开通OCR服务

未开通图片预测服务 411 未开通图片预测服务

未开通特殊场景识别服务 412 未开通特殊场景识别服务

未开通人物分类场景识别服务 413 未开通人物分类场景识别服务

未开通通用标签识别服务 414 未开通通用标签识别服务

未开通直播标签识别服务 416 未开通直播标签识别服务

Service Internal Error 500 内部错误

调用图片预测服务失败. 500 openAPI服务暂不可用。

主站的账户id为空 501 主站的账户id为空。

主站的账户id格式不对 502 主站的账户id格式不对。

传入的参数不对 503 传入的参数有误,请修改无误后再次调用,具体请参见接口文档。

传入参数business中的值不对 504 传入的business参数有误,请修改无误后再次调用,具体请参见接口文档。

传入参数image_urls中的值不对 505 传入的image_urls参数有误,请修改无误后再次调用,具体请参见接口文档。

单次请求中图片数量超过十张 506 单次请求中图片数量超过十张,请减少图片数量。

请求太频繁 510 请求QPS超过限制。

其他说明其他说明

图片大小限制为5M,图片下载时间限制为3s内,如果下载时间超过3s返回下载超时;

图片像素建议不小于256*256,太小可能会影响识别效果;

图片检测接口响应时间依赖图片的下载时间,请保证所检测图片所在的存储服务的稳定,图片建议使用金山云对象存储或者cdn做缓存等;

接口regionId仅支持cn-beijing-6;

金山云签名机制文档金山云签名机制文档

目录目录

签名机制OpenAPI调用方式

python实现java实现php实现golang实现

签名错误码

签名机制签名机制

第一次使用金山云openAPI之前,用户需要登录金山云控制台获取账户秘钥。

账户秘钥主要有两部分组成:

Access Key:简称AK,账户秘钥的唯一标示,可以在公网进行传递。Secret Key:简称SK,账户秘钥的加密秘钥,使用加密秘钥对请求进行加密。SK切记不要在公网传递。

以图像识别服务为例,以下是调用图像识别服务的原始的请求:

GET /?Action=ClassifyTerrorismImage&Version=2017-11-07&image_url=https://ks3-cn-beijing.ksyun.com/imgdb/vision.jpg HTTP/1.1Content-Type: application/x-www-form-urlencodedHost: kir.api.ksyun.comX-Amz-Date: 20171129T100303Z

您可使用 Authorization header将身份验证信息添加到请求中,Authorization header包含以下信息:

用于签名的算法 (AWS4-HMAC-SHA256)

API对接说明 2020-10-22

金山云 28/35

Page 29: 目录 - ks3-cn-beijing.ksyun.com

凭证范围(包含您的访问密钥 ID)参与签名计算的header列表计算签名。该签名基于您的请求信息,由您使用金山云Secret Key生成。该签名用于向 金山云 确认您的身份。

以下是添加了签名信息的请求:

GET /?Action=ClassifyTerrorismImage&Version=2017-11-07&image_url=https://ks3-cn-beijing.ksyun.com/imgdb/vision.jpg HTTP/1.1

Authorization: AWS4-HMAC-SHA256 Credential=AKLTfERrGQtUQNiiirSQFW7BzQ/20171129/cn-beijing-6/kir/aws4_request, SignedHeaders=host;x-amz-date, Signature=dd6a401930a04a78c1c1d374bd63f89a960355aef346d70b4b7d185c48a2ffe9

Content-Type: application/x-www-form-urlencoded

Host: kir.api.ksyun.com

X-Amz-Date: 20171129T100303Z

签名过程签名过程

1. 创建规范请求

规范请求伪码:

CanonicalRequest = HTTPRequestMethod + '\n' + CanonicalURI + '\n' + CanonicalQueryString + '\n' + CanonicalHeaders + '\n' + SignedHeaders + '\n' + HexEncode(Hash(RequestPayload))

HTTPRequestMethod是 HTTP 请求方法(GET、PUT、POST 等),后跟换行符,此处是GET

CanonicalURI是指规范化后的HTTP的URI绝对路径,如果绝对路径为空,则使用正斜杠/

CanonicalQueryString是指规范化的参数列表,如果不包括query string,使用空字符代替,此处是Action=ClassifyTerrorismImage&Version=2017-11-07&image_url=http://kvision.qyvideo.net/static/vision.jpg

要构建规范查询字符串,请完成以下步骤:

1. 按字符代码点以升序顺序对参数名称进行排序。例如,以大写字母 F 开头的参数名称排在以小写字母 b 开头的参数名称之前。2. 根据以下规则对每个参数名称和值进行 URI 编码:

请勿对 RFC 3986 定义的任何非预留字符进行 URI 编码,这些字符包括:A-Z、a-z、0-9、连字符 (-)、下划线 (_)、句点 (.) 和波浪符 ( ~ )。使用 %XY 对所有其他字符进行百分比编码,其中“X”和“Y”为十六进制字符(0-9 和大写字母 A-F)。例如,空格字符必须编码为 %20(不像某些编码方案那样使用“+”),扩展 UTF-8 字符必须采用格式 %XY%ZA%BC。

3. 以排序后的列表中第一个参数名称开头,构造规范查询字符串。4. 对于每个参数,追加 URI 编码的参数名称,后跟等号字符 (=),再接 URI 编码的参数值。对没有值的参数使用空字符串。5. 在每个参数值后追加与字符 (&),列表中最后一个值除外。

CanonicalHeaderss是指规范化后的HTTP header部分,此处是

content-type:application/x-www-form-urlencoded + '\n' +host:kir.api.ksyun.com + '\n' +x-amz-date:20171129T100303Z + '\n'

规范化过程如下:

1. 必须包含host header2. 将所有header名转换为小写形式3. 以header名称进行字母排序4. 将第3部的结果用换行符\n进行连接,最后一个header后也需要换行符

SignedHeaders是指参加签名的header名称列表,此处为content-type;host;x-amz-date

RequestPayload为HTTP的请求body,如果为空那么就是空字符串

2. 创建待签字符串

1. 以算法名称开头,后跟换行符。该值是您用于计算规范请求摘要的哈希算法。对于 SHA256,算法是 AWS4-HMAC-SHA256。

2. 追加请求日期值,后跟换行符。该日期是使用 ISO8601 基本格式以 YYYYMMDD'T'HHMMSS'Z' 格式在 x-amz-dateheader中指定的。此值必须与您在前面所有步骤中使用的值匹配。

3. 追加凭证范围值,后跟换行符。此值是一个字符串,包含日期、目标区域、所请求的服务和小写字符形式的终止字符串(“aws4_request”)。区域和服务名称字符串必须采用 UTF-8 编码,日期必须为 YYYYMMDD 格式。请注意,日期不包括时间值。

4. 追加CanonicalRequest的hash(sha256)结果,此处是

AWS4-HMAC-SHA25620171129T100303Z20171129/cn-beijing-6/kir/aws4_request65e3a839cb411c645880bb07d3ff3e0a3a1ea4696d0c2e2b9de507bf63e79883

3. 创建签名秘钥

伪码如下:

kSecret = your secret access keykDate = HMAC("AWS4" + kSecret, Date)kRegion = HMAC(kDate, Region)kService = HMAC(kRegion, Service)kSigning = HMAC(kService, "aws4_request")

4. 计算签名

signature = HexEncode(HMAC(kSigning, step 2's result))

5. 将签名添加到header Authorization,此处是

Authorization: AWS4-HMAC-SHA256 Credential=AKLTfERrGQtUQNiiirSQFW7BzQ/20171129/cn-beijing-6/kir/aws4_request, SignedHeaders=host;x-amz-date, Signature=dd6a401930a04a78c1c1d374bd63f89a960355aef346d70b4b7d185c48a2ffe9

OpenAPI调用方式OpenAPI调用方式

每个API均会提供以下参数,将SDK中相应值进行替换即可

参数名参数名 必选必选 类型类型 说明说明

Action 是 string API名称

Version 是 string API版本号

Service 是 string 服务名,对多种Action进行逻辑分组

python实现python实现

# -*- coding: utf-8 -*-# Summary: OpenAPI# Author: Hongchen Dou# Time-stamp: Mon Dec 4 20:06:38 2017import datetimeimport hashlibimport hmacimport json

API对接说明 2020-10-22

金山云 29/35

Page 30: 目录 - ks3-cn-beijing.ksyun.com

import sysimport requests

if sys.version_info < (3, 0): import urllibelse: from urllib import parse

def _sign(key, msg): return hmac.new(key, msg.encode('utf-8'), hashlib.sha256).digest()

def get_signature_key(key, dateStamp, regionName, serviceName): kDate = _sign(('AWS4' + key).encode('utf-8'), dateStamp) kRegion = _sign(kDate, regionName) kService = _sign(kRegion, serviceName) kSigning = _sign(kService, 'aws4_request') return kSigning

def api_request(action, version, access_key, secret_key, host='kir.api.ksyun.com', method='POST', service='kir', req_params=None, post_data=None): """ openapi 请求 :param host: 主机名 :param method: 'GET'/ 'POST' :param service: 取值'kir' :param action: ClassifyImage :param version: API版本号 :param access_key: :param secret_key: :param req_params: 请求参数. eg: {"image_url":"http://pica.nipic.com/2008-01-06/20081611025280_2.jpg"} :param post_data: json请求体,参考api文档 """

# ************* REQUEST VALUES ************* region = 'cn-beijing-6' endpoint = 'http://{}'.format(host) if req_params: if sys.version_info < (3, 0): request_parameters = 'Action={}&Version={}&'.format(action, version) + urllib.urlencode(req_params) else: request_parameters = 'Action={}&Version={}&'.format(action, version) + parse.urlencode(req_params) else: request_parameters = 'Action={}&Version={}'.format(action, version)

if access_key is None or secret_key is None: print('No access key is available.') return (400, None)

# Create a date for headers and the credential string t = datetime.datetime.utcnow() amzdate = t.strftime('%Y%m%dT%H%M%SZ') datestamp = t.strftime('%Y%m%d') # Date w/o time, used in credential scope #amzdate = '20171129T100303Z' #datestamp = '20171129'

# ************* TASK 1: CREATE A CANONICAL REQUEST *************

# Step 1 is to define the verb (GET, POST, etc.)--already done.

# Step 2: Create canonical URI--the part of the URI from domain to query # string (use '/' if no path) canonical_uri = '/'

# Step 3: Create the canonical query string. In this example (a GET request), # request parameters are in the query string. Query string values must # be URL-encoded (space=%20). The parameters must be sorted by name. # For this example, the query string is pre-formatted in the request_parameters variable. canonical_querystring = request_parameters

# Step 4: Create the canonical headers and signed headers. Header names # must be trimmed and lowercase, and sorted in code point order from # low to high. Note that there is a trailing \n. canonical_headers = 'content-type:application/json' + '\n' + 'host:' + host + '\n' + 'x-amz-date:' + amzdate + '\n'

# Step 5: Create the list of signed headers. This lists the headers # in the canonical_headers list, delimited with ";" and in alpha order. # Note: The request can include any headers; canonical_headers and # signed_headers lists those that you want to be included in the # hash of the request. "Host" and "x-amz-date" are always required. signed_headers = 'content-type;host;x-amz-date'

# Step 6: Create payload hash (hash of the request body content). For GET # requests, the payload is an empty string (""). if post_data is None: payload_hash = hashlib.sha256(''.encode('utf-8')).hexdigest() else: payload_hash = hashlib.sha256(post_data.encode('utf-8')).hexdigest()

# Step 7: Combine elements to create canonical request canonical_request = method + '\n' + canonical_uri + '\n' + canonical_querystring + '\n' + canonical_headers + '\n' + signed_headers + '\n' + payload_hash

# ************* TASK 2: CREATE THE STRING TO SIGN************* # Match the algorithm to the hashing algorithm you use, either SHA-1 or # SHA-256 (recommended) algorithm = 'AWS4-HMAC-SHA256' credential_scope = datestamp + '/' + region + '/' + service + '/' + 'aws4_request' string_to_sign = algorithm + '\n' + amzdate + '\n' + credential_scope + '\n' + hashlib.sha256(canonical_request.encode('utf-8')).hexdigest()

# ************* TASK 3: CALCULATE THE SIGNATURE ************* # Create the signing key using the function defined above. signing_key = get_signature_key(secret_key, datestamp, region, service)

# Sign the string_to_sign using the signing_key signature = hmac.new(signing_key, (string_to_sign).encode('utf-8'), hashlib.sha256).hexdigest()

# ************* TASK 4: ADD SIGNING INFORMATION TO THE REQUEST ************* # The signing information can be either in a query string value or in # a header named Authorization. This code shows how to use a header. # Create authorization header and add to request headers authorization_header = algorithm + ' ' + 'Credential=' + access_key + '/' + credential_scope + ', ' + 'SignedHeaders=' + signed_headers + ', ' + 'Signature=' + signature

# The request can include any headers, but MUST include "host", "x-amz-date", # and (for this scenario) "Authorization". "host" and "x-amz-date" must # be included in the canonical_headers and signed_headers, as noted # earlier. Order here is not significant. # Python note: The 'host' header is added automatically by the Python 'requests' library. headers = {'Content-Type': 'application/json', 'X-Amz-Date': amzdate, 'Authorization':authorization_header}

# ************* SEND THE REQUEST ************* request_url = endpoint + '?' + canonical_querystring

# print '\nBEGIN REQUEST++++++++++++++++++++++++++++++++++++' # print 'Request URL = ' + request_url r = requests.request(method, request_url, headers=headers, data=post_data) return (r.status_code, r.text)

if __name__ == "__main__": post_data = { "guard_id":"1547778774476511751", "image_url": "https://ks3-cn-beijing.ksyun.com/datasets/sdk/chenshuibian.png" }

ak = "ak from www.ksyun.com" sk = "sk from www.ksyun.com"

API对接说明 2020-10-22

金山云 30/35

Page 31: 目录 - ks3-cn-beijing.ksyun.com

code, text = api_request( host='kir.api.ksyun.com', method='POST', service='kir', action='ClassifyImageGuard', version='2019-01-18', access_key=ak, secret_key=sk, post_data=json.dumps(post_data) ) print(text)

java实现java实现

import javax.crypto.Mac;import javax.crypto.spec.SecretKeySpec;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.HttpURLConnection;import java.net.URL;import java.security.MessageDigest;import java.text.SimpleDateFormat;import java.util.Date;import java.util.TimeZone;

public class KingeyeSdk {

public static void main(String[] args) throws Exception { String access_key = "ak from www.ksyun.com"; String secret_key = "sk from www.ksyun.com";

String postData = "{\n \"guard_id\": \"1547778774476511751\",\n \"image_url\": \"https://ks3-cn-beijing.ksyun.com/datasets/sdk/chenshuibian.png\"\n}";

System.out.println(request("kir.api.ksyun.com", "POST", "kir", "ClassifyImageGuard", "2019-01-18", access_key, secret_key, postData));

} public static String request( String host, String method, String service, String action, String version, String access_key, String secret_key, String postData) throws Exception { String contenttype = "application/json"; String region = "cn-beijing-6"; String endpoint = "http://" + host; String request_parameters = "Action=" + action + "&Version=" + version;

Date t = new Date(); SimpleDateFormat timeFormater = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); timeFormater.setTimeZone(TimeZone.getTimeZone("UTC")); String amzdate = timeFormater.format(t);// String amzdate = "20171211T123249Z";

SimpleDateFormat dateFormater = new SimpleDateFormat("yyyyMMdd"); timeFormater.setTimeZone(TimeZone.getTimeZone("UTC")); String datestamp = dateFormater.format(t);// String datestamp = "20171211";

String canonical_uri = "/"; String canonical_querystring = request_parameters; String canonical_headers = "content-type:" + contenttype + "\n" + "host:" + host + "\n" + "x-amz-date:" + amzdate + "\n"; String signed_headers = "content-type;host;x-amz-date";

String payload_hash = toHex(hash(postData));

String canonical_request = method + '\n' + canonical_uri + '\n' + canonical_querystring + '\n' + canonical_headers + '\n' + signed_headers + '\n' + payload_hash;

String algorithm = "AWS4-HMAC-SHA256"; String credential_scope = datestamp + '/' + region + '/' + service + '/' + "aws4_request"; String string_to_sign = algorithm + '\n' + amzdate + '\n' + credential_scope + '\n' + toHex(hash(canonical_request)); byte[] signing_key = getSignatureKey(secret_key, datestamp, region, service);

String signature = toHex(hmacSHA256(string_to_sign, signing_key));

String authorization_header = algorithm + ' ' + "Credential=" + access_key + '/' + credential_scope + ", " + "SignedHeaders=" + signed_headers + ", " + "Signature=" + signature;

String request_url = endpoint + '?' + canonical_querystring;

HttpURLConnection connection = (HttpURLConnection)new URL(request_url).openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("x-amz-date", amzdate); connection.setRequestProperty("Authorization", authorization_header); connection.setRequestProperty("Content-Type", contenttype); connection.setDoOutput(true);

OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream()); wr.write(postData); wr.flush();

try { int code = connection.getResponseCode(); if (code == HttpURLConnection.HTTP_OK) { BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));

String content = ""; String line = null; while ((line = reader.readLine()) != null) { content += line; } reader.close(); return content; } else { System.out.println(connection.getResponseMessage() + connection.getResponseCode()); } } catch (Exception e) {

} return null; } public static String toHex(byte[] src) { StringBuilder stringBuilder = new StringBuilder(""); if (src == null || src.length <= 0) { return null; } for (int i = 0; i < src.length; i++) { int v = src[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv); } return stringBuilder.toString(); } static byte[] hash(String text) throws Exception { if (text == null) text = "";

API对接说明 2020-10-22

金山云 31/35

Page 32: 目录 - ks3-cn-beijing.ksyun.com

MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(text.getBytes("UTF8")); return md.digest(); }

static byte[] hmacSHA256(String data, byte[] key) throws Exception { String algorithm="HmacSHA256"; Mac mac = Mac.getInstance(algorithm); mac.init(new SecretKeySpec(key, algorithm)); return mac.doFinal(data.getBytes("UTF8")); }

static byte[] getSignatureKey(String key, String dateStamp, String regionName, String serviceName) throws Exception { byte[] kSecret = ("AWS4" + key).getBytes("UTF8"); byte[] kDate = hmacSHA256(dateStamp, kSecret); byte[] kRegion = hmacSHA256(regionName, kDate); byte[] kService = hmacSHA256(serviceName, kRegion); byte[] kSigning = hmacSHA256("aws4_request", kService); return kSigning; }}

php实现php实现

<?php

$access_key = 'ak from www.ksyun.com';$secret_key = 'sk from www.ksyun.com';

$post_data = '{ "guard_id": "1547778774476511751", "image_url": "https://ks3-cn-beijing.ksyun.com/datasets/sdk/chenshuibian.png"}';

$method = "POST";$service = "kir";$host = "kir.api.ksyun.com";$region = 'cn-beijing-6';$endpoint = 'http://' . $host;$action = 'ClassifyImageGuard';$version = '2019-01-18';$contenttype = 'application/json';$request_parameters = 'Action=' . $action . '&Version=' . $version;

function sign($key, $msg) { return hash_hmac("sha256", $msg, $key, true);}function getSignatureKey($key, $dateStamp, $regionName, $serviceName) { $kDate = sign('AWS4' . $key, $dateStamp); $kRegion = sign($kDate, $regionName); $kService = sign($kRegion, $serviceName); $kSigning = sign($kService, 'aws4_request'); return $kSigning;}

date_default_timezone_set('UTC');$time = time() ;$amzdate = date("Ymd",$time)."T".date("His",$time) . "Z";$datestamp = date("Ymd",$time);#$amzdate = '20180202T035703Z';#$datestamp = '20180202';

$canonical_uri = '/';

$canonical_querystring = $request_parameters;

$canonical_headers = 'content-type:' . $contenttype . "\n" . 'host:' . $host . "\n" . 'x-amz-date:' . $amzdate . "\n";

$signed_headers = 'content-type;host;x-amz-date';

$payload_hash = hash("sha256", $post_data);

echo 'payload_hash:' . $payload_hash. "\n";

$canonical_request = $method . "\n" . $canonical_uri . "\n" . $canonical_querystring . "\n" . $canonical_headers . "\n" . $signed_headers . "\n" . $payload_hash;

echo 'canonical_request:' . $canonical_request . "\n";

$algorithm = 'AWS4-HMAC-SHA256';$credential_scope = $datestamp . '/' . $region . '/' . $service . '/' . 'aws4_request';$string_to_sign = $algorithm . "\n" . $amzdate . "\n" . $credential_scope . "\n" . hash("sha256", $canonical_request);

echo 'string_to_sign:' . $string_to_sign . "\n";

$signing_key = getSignatureKey($secret_key, $datestamp, $region, $service);

#echo $secret_key . "\n" . $datestamp . "\n" . $region . "\n" . $service;#echo $signing_key . "\n";

$signature = hash_hmac("sha256", $string_to_sign, $signing_key);

echo 'signature:' . $signature . "\n";

#echo "sign:" . $signature . "\n";$authorization_header = $algorithm . ' ' . 'Credential=' . $access_key . '/' . $credential_scope . ', ' . 'SignedHeaders=' . $signed_headers . ', ' . 'Signature=' . $signature;

echo 'authorization_header:' . $authorization_header . "\n";

$request_url = $endpoint . '?' . $canonical_querystring;

$ch = curl_init($request_url);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);curl_setopt($ch, CURLOPT_HTTPHEADER, array("x-amz-date:$amzdate", "Authorization:$authorization_header", "Content-Type:$contenttype"));

echo "\n\n-------------result--------------\n\n";

$result = json_decode(curl_exec($ch));

var_dump($result);

?>

golang实现golang实现

package main

import ( "fmt" "crypto/hmac" "crypto/sha256" "encoding/json" "net/url" "time" "net/http" "strings" "io/ioutil")

func _sign(key []byte, msg string) []byte { h := hmac.New(sha256.New, key)

API对接说明 2020-10-22

金山云 32/35

Page 33: 目录 - ks3-cn-beijing.ksyun.com

h.Write([]byte(msg)) return h.Sum(nil)}

func get_signature_key(key string, dateStamp string, regionName string, serviceName string) []byte { kDate := _sign([]byte("AWS4" + key), dateStamp) kRegion := _sign(kDate, regionName) kService := _sign(kRegion, serviceName) kSigning := _sign(kService, "aws4_request") return kSigning}

func api_request(action, version, access_key, secret_key, host, method, service string, req_params map[string]string, post_data map[string]interface{}) (int, string) {

// ************* REQUEST VALUES ************* region := "cn-beijing-6" endpoint := "http://" + host request_parameters := "Action=" + action + "&Version=" + version if req_params != nil { params := url.Values{} for key := range req_params { params.Add(key, req_params[key]) } request_parameters += "&" + params.Encode() } if access_key == "" || secret_key == "" { fmt.Println("No access key is available.") return 400, "" } t := time.Now().UTC() amzdate := t.Format("20060102T150405Z") datestamp := t.Format("20060102")

// ************* TASK 1: CREATE A CANONICAL REQUEST ************* // Step 1 is to define the verb (GET, POST, etc.)--already done.

// Step 2: Create canonical URI--the part of the URI from domain to query // string (use '/' if no path) canonical_uri := "/"

// Step 3: Create the canonical query string. In this example (a GET request), // request parameters are in the query string. Query string values must // be URL-encoded (space=%20). The parameters must be sorted by name. // For this example, the query string is pre-formatted in the // request_parameters variable. canonical_querystring := request_parameters

// Step 4: Create the canonical headers and signed headers. Header names // must be trimmed and lowercase, and sorted in code point order from // low to high. Note that there is a trailing \n. canonical_headers := "content-type:application/json" + "\n" + "host:" + host + "\n" + "x-amz-date:" + amzdate + "\n"

// Step 5: Create the list of signed headers. This lists the headers // in the canonical_headers list, delimited with ";" and in alpha order. // Note: The request can include any headers; canonical_headers and // signed_headers lists those that you want to be included in the // hash of the request. "Host" and "x-amz-date" are always required. signed_headers := "content-type;host;x-amz-date"

// Step 6: Create payload hash (hash of the request body content). For GET // requests, the payload is an empty string (""). h := sha256.New() var json_data string if post_data == nil { h.Write([]byte("")) } else { data, _ := json.Marshal(post_data) json_data = string(data) //fmt.Println(string(json_data)) //data := "{\"business\": [\"porn\"], \"image_urls\": [\"https://ks3-cn-beijing.ksyun.com/datasets/sdk/chenshuibian.png\"]}" //fmt.Println(data) h.Write([]byte(json_data)) } payload_hash := fmt.Sprintf("%x", h.Sum(nil)) //fmt.Printf("%x\n", payload_hash)

// Step 7: Combine elements to create canonical request canonical_request := method + "\n" + canonical_uri + "\n" + canonical_querystring + "\n" + canonical_headers + "\n" + signed_headers + "\n" + payload_hash

// ************* TASK 2: CREATE THE STRING TO SIGN************* // Match the algorithm to the hashing algorithm you use, either SHA-1 or // SHA-256 (recommended) algorithm := "AWS4-HMAC-SHA256" credential_scope := datestamp + "/" + region + "/" + service + "/" + "aws4_request" ha := sha256.New() ha.Write([]byte(canonical_request)) hash := fmt.Sprintf("%x", ha.Sum(nil)) string_to_sign := algorithm + "\n" + amzdate + "\n" + credential_scope + "\n" + hash

// ************* TASK 3: CALCULATE THE SIGNATURE ************* // Create the signing key using the function defined above. signing_key := get_signature_key(secret_key, datestamp, region, service)

// Sign the string_to_sign using the signing_key s := hmac.New(sha256.New, signing_key) s.Write([]byte(string_to_sign)) signature := fmt.Sprintf("%x", s.Sum(nil))

// ************* TASK 4: ADD SIGNING INFORMATION TO THE REQUEST *********** // The signing information can be either in a query string value or in // a header named Authorization. This code shows how to use a header. // Create authorization header and add to request headers authorization_header := algorithm + " " + "Credential=" + access_key + "/" + credential_scope + ", " + "SignedHeaders=" + signed_headers + ", " + "Signature=" + signature

// ************* SEND THE REQUEST ************* request_url := endpoint + "?" + canonical_querystring client := &http.Client{} req, _ := http.NewRequest(method, request_url, strings.NewReader(json_data)) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Amz-Date", amzdate) req.Header.Set("Authorization", authorization_header) resp, _ := client.Do(req) defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) code := resp.StatusCode

return code, string(body)}

func main() { post_data := map[string]interface{}{ "guard_id": "1547778774476511751", "image_url": "https://ks3-cn-beijing.ksyun.com/datasets/sdk/chenshuibian.png", }

ak := "ak from www.ksyun.com" sk := "sk from www.ksyun.com"

code, text := api_request( "ClassifyImageGuard", "2019-01-18", ak, sk,

API对接说明 2020-10-22

金山云 33/35

Page 34: 目录 - ks3-cn-beijing.ksyun.com

"kir.api.ksyun.com", "POST", "kir", nil, post_data, ) fmt.Println(code) fmt.Println(text)}

签名错误码签名错误码

错误代码(Code)错误代码(Code) 错误消息(Message)错误消息(Message) 状态码状态码 说明说明

IncompleteSignature

Date must be in ISO-8601 'basic format'. Got '%s'. See http://en.wikipedia.org/wiki/ISO_8601.

400 Date必须符合ISO_8601基本格式,参考:http://en.wikipedia.org/wiki/ISO_8601

IncompleteSignature

KSC query-string parameters must include %s. Re-examine the query-string parameters.

400查询条件中缺少签署信息,查询条件中必须包含”X-Amz-Algorithm“、”X-Amz-Credential“、”X-Amz-SignedHeaders“、”X-Amz-Date“信息

IncompleteSignature

Unsupported ksc 'algorithm': %s. 400 只支持如下签名算法:AWS4-HMAC-SHA256

IncompleteSignature

Authorization header requires 'Credential' parameter. Authorization=%s. 400 请求Authorization header中需要包含“Credential”参数

IncompleteSignature

Credential must have exactly 5 slash-delimited elements, e.g. accesskeyid/date/region/service/aws4_request, got: %s.

400请求Authorization header中中“Credential”至少包含5项以斜杠分隔的元素,如:keyid/date/region/service/aws4_request

IncompleteSignature

Authorization header format error. 400 请求Authorization header的格式错误

IncompleteSignature

Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header, Authorization=%s

400 请求中缺少“X-Amz-Date”或者“Date” header信息

IncompleteSignature

Authorization header requires 'Signature' parameter. Authorization=%s 400 请求Authorization header中缺少“Signature”信息

IncompleteSignature

Authorization header requires 'SignedHeaders' parameter. Authorization=%s 400 请求Authorization header中缺少“SignedHeaders”信息

MissingAuthenticationToken

Request is missing 'Host' header. 403 请求header中缺少Host

MissingAuthenticationToken

Request is missing Authentication Token. 403 请求header中缺少认证token

MissingAuthenticationToken

%s not in Http Header. 403 %s不在Http header中

SignatureDoesNotMatch

Host' must be a 'SignedHeader' in the Authorization. 403 请求的SignedHeader中必须包含Host

SignatureDoesNotMatch

Credential should be scoped with a valid terminator: 'aws4_request', not: %s.

403 请求Authorization header中的“Credential”末尾必须是“aws4_request”

SignatureDoesNotMatch

Credential should be scoped to a valid region, not:%s. 403 请求Authorization header中的“Credential”中的Region信息无效

SignatureDoesNotMatch

Credential should be scoped to correct service: %s. 403 请求Authorization header中的“Credential”中的Service信息无效

SignatureDoesNotMatch

The request signature we calculated does not match the signature you provided.

403 请求中提供的签名与实际计算结果不匹配

SignatureDoesNotMatch

Signature expired:%s. 403 签名已过期

SignatureDoesNotMatch

Date in Credential scope does not match YYYYMMDD from ISO-8601 version of date from HTTP.

403请求Authorization header中的“Credential”中的Date应该是ISO8601基本格式,形如”YYYYMMDD“

InvalidClientTokenId

The security token included in the request is invalid. 403 请求中提供的AccessKeyId无效

BadCase反馈接口BadCase反馈接口

为了提高模型对客户数据的识别准确率,提供此内容识别badcase反馈接口,将根据此数据针对性优化模型。

一、图像审核反馈接口一、图像审核反馈接口

1.接口描述1.接口描述

协议:HTTP请求类型:POST格式: json

2.接口参数2.接口参数

输入:

通用参数部分

参数名参数名 必选必选 类型类型 说明说明

Action=CorrectLabel 是 string 接口名

Version=2018-09-27 是 string API版本号,固定此值

Host=kir.api.ksyun.com 是 string 接入地址

Service=kir 是 string 服务名

POST参数部分

参数参数 是否必填是否必填 数据类型数据类型 描述描述

img_url 是 string 图片http地址

business 是 string

调用服务名称色情图像识别:porn;暴恐图像识别:terrorism;违规违法图像识别:illegal;敏感人物图像识别:politic;OCR图像识别:ocr;广告图像识别:ad;

label 否 string 客户判定的标签值,参考金山云相应服务的标签说明https://docs.ksyun.com/documents/6213

customer_label 否 string 客户判定的标签值,客户自定标签取值,如色情、低俗、正常,16个字符以内

request_id 是 string 金山返回的接口调用唯一标识

timestamp 是 long 时间戳,毫秒,金山返回的接口调用时间

origin_label 否 string 金山云返回的原始标签

guard_id 否 string 送审计划ID

suggest_summary 否 string 客户判定的识别结果:confirm_reject:拒绝;suggest_review:疑似;normal:通过

origin_suggest_summary 否 string 金山云返回的识别结果:confirm_reject:拒绝;suggest_review:疑似;normal:通过

3.请求示例3.请求示例

{ "img_url":"http://xxx.jpg",

API对接说明 2020-10-22

金山云 34/35

Page 35: 目录 - ks3-cn-beijing.ksyun.com

"request_id":"d679e27b-9f1b-44bf-b134-49a6d9f0adff", "timestamp":1234567890123, "guard_id":"13502984950393", "origin_suggest_summary":"", "suggest_summary":"", "labels":[ { "business":"porn", "label":"1", "origin_label":"2", "customer_label":"色情" } ]}

接口返回:

{ "code": 0}

二、视频审核反馈接口二、视频审核反馈接口

1.接口描述1.接口描述

协议:HTTP请求类型:POST格式: json

2.接口参数2.接口参数

输入:

通用参数部分

参数名参数名 必选必选 类型类型 说明说明

Action=CorrectVideoLabel 是 string 接口名

Version=2018-09-27 是 string API版本号,固定此值

Host=kir.api.ksyun.com 是 string 接入地址

Service=kir 是 string 服务名

POST参数部分

参数参数 是否必填是否必填 数据类型数据类型 描述描述

video_id 是 string 调用视频分析服务时传递的视频ID

video_url 是 string 视频http地址

business 是 string

调用服务名称色情图像识别:porn;暴恐图像识别:terrorism;违规违法图像识别:illegal;敏感人物图像识别:politic;OCR图像识别:ocr;广告图像识别:ad;

label 否 string 客户判定的标签值,参考金山云相应服务的标签说明https://docs.ksyun.com/documents/6222

customer_label 否 string 客户判定的标签值,客户自定标签取值,如色情、低俗、正常,16个字符以内

request_id 否 string 金山返回的接口调用唯一标识

timestamp 是 long 时间戳,毫秒,金山返回的接口调用时间

origin_label 否 string 金山返回的原始标签

video_suggestion 否 string 客户判定的识别结果:confirm_reject:拒绝;suggest_review:疑似;normal:通过

origin_video_suggestion否 string 金山云返回的识别结果:confirm_reject:拒绝;suggest_review:疑似;normal:通过

audio_labels.starttime 否 string 问题音频开始时间

audio_labels.endtime 否 string 问题音频结束时间

3.请求示例3.请求示例

{ "video_url":"http://xxx.jpg", "request_id":"d679e27b-9f1b-44bf-b134-49a6d9f0adff", "timestamp":1234567890123, "origin_video_suggestion":"", "video_suggestion":"", "image_labels":[ { "business":"porn", "label":"1", "origin_label":"2", "custome_label":"色情" } ], "audio_labels":[ { "starttime":1000, "endtime":1500, "customer_label":"音频涉黄" } ]}

接口返回:

{ "code": 0}

4. 签名SDK4. 签名SDK

https://docs.ksyun.com/documents/6192

对接SDK对接SDK

分别提供Java、PHP、Python、Golang、Nodejs 五种语言的对接sdk,下载链接:https://ks3-cn-beijing.ksyun.com/datasets/sdk/kingeye_sdk.tar.gz

具体签名机制原理参见:https://docs.ksyun.com/documents/6192

API对接说明 2020-10-22

金山云 35/35