功能描述
数据万象二维码识别功能可识别图片中有效二维码的位置及内容,输出图像中二维码包含的文本信息(每个二维码对应的 URL 或文本),并可对识别出的二维码添加马赛克。
授权说明
通过子账号使用时,需要在 授权策略 的 action 中添加对应的权限。对象存储支持的所有操作接口请参见 COS action,数据万象支持的所有操作接口请参见 CI action。通过不同方式使用此功能时,授权策略如下:
下载时识别:授权策略 中 action 设置为
cos:GetObject
、ci:CreateDetectQRcodeJob
。上传时识别:授权策略 中 action 设置为
cos:PutObject
。注意:
注意 GetObject 对应的 resource 为源文件,PutObject 对应的 resource 为转存的文件。
服务开通
注意:
数据万象绑定后,如果您手动对存储桶进行数据万象的解绑操作,将无法继续使用该功能。
使用限制
费用说明
请求一:上传时识别
图片上传时识别二维码的请求包与 COS 简单上传文件接口一致,只需在请求头部增加图片处理参数 Pic-Operations。
请求
请求示例
PUT /<ObjectKey> HTTP/1.1Host: <BucketName-APPID>.cos.<Region>.myqcloud.comDate: GMT DateAuthorization: Auth StringPic-Operations:{"is_pic_info": 1,"rules": [{"fileid": "exampleobject","rule": "QRcode/cover/<cover>/bar-type/<bar-type>/segment/<segment>/size/<size>"}]}
说明:
Authorization: 携带鉴权信息,用于验证请求的合法性的请求头,Pic-Operations 头部需签入签名信息中,详情请参见 请求签名 文档。
<ObjectKey>:对象文件名,例如 folder/sample.jpg。
当
fileid
与 ObjectKey
相同时,处理后的图片将覆盖原图存储;不相同时将分别存储原图和处理后图片。请求头
公有请求头
特有请求头
除公共头部外,还需要传入如下头部:
头部名称 | 描述 | 类型 |
Pic-Operations | 对图片进行操作的参数 | String |
Pic-Operations 为 json 格式的字符串,具体参数如下:
参数名称 | 描述 | 类型 | 是否必选 |
is_pic_info | 是否返回原图信息,0不返回原图信息,1返回原图信息,默认为0 | Int | 否 |
rules | 处理规则,一条规则对应一个处理结果(目前最多支持五条规则),不填则不进行图片处理 | Array | 否 |
rules(json 数组)中每一项具体参数如下:
参数名称 | 描述 | 类型 | 是否必选 |
bucket | 存储结果的目标存储桶,格式为 BucketName-APPID,如果不指定的话默认保存到当前存储桶 | String | 否 |
fileid | 处理结果的文件路径名称,例如以 / 开头,则存入指定文件夹中,否则存入与原图文件相同的目录位置 | String | 否 |
rule | 处理参数。若按指定样式处理,则以 style/ 开头,后加样式名。此处样式名为 QRcode ,则 rule 字段为 QRcode/test 。 | String | 是 |
rule 中参数说明如下:
参数名称 | 描述 | 类型 | 是否必选 |
cover | 二维码覆盖功能。可选值如下: 0(默认值):不开启二维码覆盖 1:开启二维码覆盖 功能开启后,将对识别出的二维码覆盖马赛克 | Int | 否 |
bar-type | 二维码/条形码识别功能,将对识别出的二维码/条形码 覆盖马赛克。可选值如下: 0(默认值):都识别 1:识别二维码 2:识别条形码 | Int | 否 |
segment | 通用的切片开关参数,指定是否需要切片,可选值如下: 0(默认值):表示不切片 1:表示切片 需要切片时,后台会根据图片尺寸进行切片识别 | Int | 否 |
size | 当 segment 取值为1时生效,默认1000像素,取值范围为大于等于500的整数。当 size 指定的数值大于图片像素时,则不进行切片,直接识别 | Int | 否 |
请求体
该请求的请求体为待处理的本地文件。
响应
响应头
响应体
响应体具体数据内容如下:
节点名称(关键字) | 父节点 | 描述 | 类型 |
UploadResult | 无 | 原图信息 | Container |
UploadResult 节点的内容:
节点名称(关键字) | 父节点 | 描述 | 类型 |
OriginalInfo | UploadResult | 原图信息 | Container |
ProcessResults | UploadResult | 图片处理结果 | Container |
OriginalInfo 节点的内容:
节点名称(关键字) | 父节点 | 描述 | 类型 |
Key | UploadResult.OriginalInfo | 原图文件名 | String |
Location | UploadResult.OriginalInfo | 图片路径 | String |
ImageInfo | UploadResult.OriginalInfo | 原图信息 | Container |
ETag | UploadResult.OriginalInfo | 图片的 ETag 值 | String |
ImageInfo 节点的内容:
节点名称(关键字) | 父节点 | 描述 | 类型 |
Format | UploadResult.OriginalInfo.ImageInfo | 格式 | String |
Width | UploadResult.OriginalInfo.ImageInfo | 图片宽度 | Int |
Height | UploadResult.OriginalInfo.ImageInfo | 图片高度 | Int |
Quality | UploadResult.OriginalInfo.ImageInfo | 图片质量 | Int |
Ave | UploadResult.OriginalInfo.ImageInfo | 图片主色调 | String |
Orientation | UploadResult.OriginalInfo.ImageInfo | 图片旋转角度 | Int |
Md5 | UploadResult.OriginalInfo.ImageInfo | 图片的 MD5值 | String |
FrameCount | UploadResult.OriginalInfo.ImageInfo | 图片的帧数。静态图为1,动图为对应的帧数 | Int |
BitDepth | UploadResult.OriginalInfo.ImageInfo | 图片的位深度 | Int |
VerticalDpi | UploadResult.OriginalInfo.ImageInfo | 图像水平方向的分辨率 | Int |
HorizontalDpi | UploadResult.OriginalInfo.ImageInfo | 图像垂直方向的分辨率 | Int |
ProcessResults 节点的内容:
节点名称(关键字) | 父节点 | 描述 | 类型 |
Object | UploadResult.ProcessResults | 每一个图片处理结果 | Container |
Object 节点的内容:
节点名称(关键字) | 父节点 | 描述 | 类型 |
Key | UploadResult.ProcessResults.Object | 文件名 | String |
Location | UploadResult.ProcessResults.Object | 图片路径 | String |
Format | UploadResult.ProcessResults.Object | 图片格式 | String |
Md5 | UploadResult.ProcessResults.Object | 图片的 MD5值 | String |
Width | UploadResult.ProcessResults.Object | 图片宽度 | Int |
Height | UploadResult.ProcessResults.Object | 图片高度 | Int |
Size | UploadResult.ProcessResults.Object | 图片大小 | Int |
Quality | UploadResult.ProcessResults.Object | 图片质量 | Int |
FrameCount | UploadResult.ProcessResults.Object | 图片的帧数。静态图为1,动图为对应的帧数 | Int |
BitDepth | UploadResult.ProcessResults.Object | 图片的位深度 | Int |
VerticalDpi | UploadResult.ProcessResults.Object | 图像水平方向的分辨率 | Int |
HorizontalDpi | UploadResult.ProcessResults.Object | 图像垂直方向的分辨率 | Int |
ETag | UploadResult.ProcessResults.Object | 图片的 ETag 值 | String |
CodeStatus | UploadResult.ProcessResults.Object | 二维码识别结果。0表示未识别到二维码,1表示识别到二维码 | Int |
QRcodeInfo | UploadResult.ProcessResults.Object | 二维码识别结果,可能有多个 | Container |
QRcodeInfo 节点的内容:
节点名称(关键字) | 父节点 | 描述 | 类型 |
CodeUrl | UploadResult.ProcessResults.Object.QRcodeInfo | 二维码的内容。可能识别不出 | String |
CodeLocation | UploadResult.ProcessResults.Object.QRcodeInfo | 图中识别到的二维码位置坐标 | Container |
CodeLocation 节点内容:
节点名称(关键字) | 父节点 | 描述 | 类型 |
Point | UploadResult.ProcessResults.Object.QRcodeInfo.CodeLocation | 二维码坐标点 | String |
实际案例
请求
PUT /picture.png HTTP/1.1Host: examplebucket-1250000000.cos.ap-chengdu.myqcloud.comDate: Tue, 03 Apr 2018 09:06:15 GMTAuthorization:q-sign-algorithm=sha1&q-ak=****************&q-sign-time=1754615854;1754619454&q-key-time=1754615854;1754619454&q-header-list=&q-url-param-list=&q-signature=*******************Pic-Operations: {"is_pic_info":1,"rules":[{"fileid":"test.jpg","rule":"QRcode/cover/1"}]}Content-Length: 64[Object]
响应
HTTP/1.1 200 OKContent-Type: application/xmlContent-Length: 645Date: Tue, 03 Apr 2018 09:06:16 GMTStatus: 200 OKx-cos-request-id: NWFjMzQ0MDZfOTBmYTUwXzZkZV8z****<UploadResult><OriginalInfo><Key>picture.png</Key><Location>examplebucket-1250000000.cos.ap-chengdu.myqcloud.com/picture.png</Location><ETag>"3824c0d430726c*************"</ETag><VersionId>MTg0NDQ5ODgz*************</VersionId><ImageInfo><Md5>3824c0d43072****************</Md5><Format>PNG</Format><Width>2797</Width><Height>1448</Height><Quality>100</Quality><Ave>0x060e0</Ave><FrameCount>1</FrameCount><BitDepth>8</BitDepth><VerticalDpi>94</VerticalDpi><HorizontalDpi>94</HorizontalDpi></ImageInfo></OriginalInfo><ProcessResults><Object><Key>pircture.png</Key><Location>examplebucket-1250000000.cos.ap-chengdu.myqcloud.com/pircture.png</Location><Format>png</Format><Md5>24bba1d14*****************</Md5><Width>2797</Width><Height>1448</Height><Size>54879</Size><Quality>80</Quality><FrameCount>1</FrameCount><BitDepth>8</BitDepth><VerticalDpi>94</VerticalDpi><HorizontalDpi>94</HorizontalDpi><ETag>"24bba1d1422e**********************"</ETag><VersionId>MTg0NDQ5ODgz****************8</VersionId><CodeStatus>1</CodeStatus><QRcodeInfo><CodeUrl>http://example.com</CodeUrl><CodeLocation><Point>2043,975</Point><Point>2043,528</Point><Point>2488,528</Point><Point>2488,975</Point></CodeLocation></QRcodeInfo></Object></ProcessResults></UploadResult>
请求二:下载时识别
请求
GET /<ObjectKey>?ci-process=QRcode&cover=<cover> HTTP/1.1Host: <BucketName-APPID>.cos.<Region>.myqcloud.comDate: <GMT Date>Authorization: <Auth String>
说明:
请求头
请求参数
参数名称 | 描述 | 是否必选 | 类型 |
ObjectKey | 对象文件名,例如 folder/sample.jpg | 是 | String |
ci-process | 万象处理能力,二维码识别固定为 QRcode | 是 | String |
cover | 二维码覆盖功能,将对识别出的二维码覆盖上马赛克。取值为0或1。0表示不开启二维码覆盖,1表示开启二维码覆盖,默认值0 | 否 | Int |
请求体
该请求无请求体。
响应
响应头
响应体
该响应体返回为 application/xml 数据,包含完整节点数据的内容展示如下:
<Response><CodeStatus>1</CodeStatus><QRcodeInfo><CodeUrl>xxxx</CodeUrl><CodeLocation><Point>xxx,xxx</Point><Point>xxx,xxx</Point><Point>xxx,xxx</Point><Point>xxx,xxx</Point></CodeLocation></QRcodeInfo><ResultImage>base64编码的图片</ResultImage></Response>
具体的数据内容如下:
节点名称(关键字) | 父节点 | 描述 | 类型 |
Response | 无 | 保存结果的容器 | Container |
Response 节点的内容:
节点名称(关键字) | 父节点 | 描述 | 类型 |
CodeStatus | Response | 二维码识别结果。0表示未识别到二维码,1表示识别到二维码 | Int |
QRcodeInfo | Response | 二维码识别结果,可能有多个 | Container |
ResultImage | Response | 处理后的图片 Base64数据,请求参数 cover 为1时返回 | String |
QRcodeInfo 节点的内容:
节点名称(关键字) | 父节点 | 描述 | 类型 |
CodeUrl | QRcodeInfo | 二维码的内容。可能识别不到内容 | String |
CodeLocation | QRcodeInfo | 图中识别到的二维码位置坐标 | Container |
CodeLocation 节点的内容:
节点名称(关键字) | 父节点 | 描述 | 类型 |
Point | CodeLocation | 二维码坐标点(X 坐标,Y 坐标) | String |
错误码
实际案例
请求
GET /<ObjectKey>?ci-process=QRcode&cover=1 HTTP/1.1Authorization: q-sign-algorithm=sha1&q-ak=************************************&q-sign-time=1497530202;1497610202&q-key-time=1497530202;1497610202&q-header-list=&q-url-param-list=&q-signature=****************************************Host: examplebucket-1250000000.cos.ap-beijing.myqcloud.com
响应
HTTP/1.1 200 OKContent-Type: application/xmlContent-Length: 414641Date: Thu, 15 Jun 2017 12:37:29 GMTServer: tencent-cix-cos-request-id: NTk0MjdmODlfMjQ4OGY3XzYzYzhf****<Response><CodeStatus>1</CodeStatus><QRcodeInfo><CodeUrl>xxxxxxxxxxxxx</CodeUrl><CodeLocation><Point>100,100</Point><Point>100,200</Point><Point>200,200</Point><Point>200,100</Point></CodeLocation></QRcodeInfo><QRcodeInfo><CodeUrl>xxxxxxxxxxxxx</CodeUrl><CodeLocation><Point>1000,1000</Point><Point>1000,2000</Point><Point>2000,2000</Point><Point>2000,1000</Point></CodeLocation></QRcodeInfo><ResultImage>base64编码的图片</ResultImage></Response>