车牌识别 JD API 文档
# 车牌识别 JD API 文档 # 接口说明
基于深度学习技术,利用光学字符识别技术,可对输入的图片自动识别车牌字段信息,识别准确率业内领先,稳定可靠。该能力是通过HTTP API的方式给开发者提供一个通用的接口。HTTP API适用于一次性交互数据传输的AI服务场景,块式传输。相较于SDK,API具有轻量、跨语言的特点。另外,请注意该接口使用的HTTP API协议不支持跨域。
# 接口Demo
示例demo请点击 这里 下载。目前仅提供部分开发语言的demo,其他语言请参照下方接口文档进行开发。也欢迎热心的开发者到 讯飞开放平台社区 (opens new window) 分享你们的demo。
# 接口要求
集成车牌识别API时,需按照以下要求。
内容 说明 传输方式 http[s] (为提高安全性,强烈推荐https) 请求地址 http[s]: //api.xf-yun.com/v1/private/jd_ocr_car注:服务器IP不固定,为保证您的接口稳定,请勿通过指定IP的方式调用接口,使用域名方式调用 请求行 POST /v1/private/jd_ocr_car HTTP/1.1 接口鉴权 签名机制,详情请参照下方鉴权认证 字符编码 UTF-8 响应格式 统一采用JSON格式 开发语言 任意,只要可以向讯飞云服务发起HTTP请求的均可 适用范围 任意操作系统,但因不支持跨域不适用于浏览器 图片格式 jpg/png/bmp 图片大小 base64编码后大小不超过4M # 接口调用流程
· 通过接口密钥基于hmac-sha256计算签名,将签名以及其他参数加在请求地址后面。详见下方 鉴权认证 。· 将请求参数以及图片数据放在Http Request Body中,以POST表单的形式提交,详见下方 请求参数 。· 向服务器端发送Http请求后,接收服务器端的返回结果。
# 鉴权认证
在调用业务接口时,请求方需要对请求进行签名,服务端通过签名来校验请求的合法性。
# 鉴权方法
通过在请求地址后面加上鉴权相关参数的方式,参数具体如下:
http示例url:
https://api.xf-yun.com/v1/private/jd_ocr_car?authorization=YXBpX2tleT0iYXBpa2V5WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgiLCBhbGdvcml0aG09ImhtYWMtc2hhMjU2IiwgaGVhZGVycz0iaG9zdCBkYXRlIHJlcXVlc3QtbGluZSIsIHNpZ25hdHVyZT0ialpqMUFQdmdIN0hJQzh3dGlnanVBc3FnNTkrbnNiZlY5S1czQzBXdjhYUT0i&host=api.xf-yun.com&date=Wed%2C+05+Aug+2020+08%3A48%3A03+GMT
鉴权参数:
参数 类型 必须 说明 示例 host string 是 请求主机 api.xf-yun.com date string 是 当前时间戳,RFC1123格式(“EEE, dd MMM yyyy HH:mm:ss z”) Wed, 05 Aug 2020 08:48:03 GMT authorization string 是 使用base64编码的签名相关信息(签名基于hmac-sha256计算) 参考下方详细生成规则 · date参数生成规则:
date必须是UTC+0或GMT时区,RFC1123格式(Wed, 05 Aug 2020 08:48:03 GMT)。服务端会对date进行时钟偏移检查,最大允许300秒的偏差,超出偏差的请求都将被拒绝。
· authorization参数生成格式:
1)获取接口密钥APIKey 和 APISecret。在讯飞开放平台控制台,创建一个应用后打开车牌识别页面可以获取,均为32位字符串。
2)参数authorization base64编码前(authorization_origin)的格式如下。
api_key=”$api_key”,algorithm=”hmac-sha256″,headers=”host date request-line”,signature=”$signature”
其中 api_key 是在控制台获取的APIKey,algorithm 是加密算法(仅支持hmac-sha256),headers 是参与签名的参数(见下方注释)。signature 是使用加密算法对参与签名的参数签名后并使用base64编码的字符串,详见下方。
注: headers是参与签名的参数,请注意是固定的参数名(”host date request-line”),而非这些参数的值。
3)signature的原始字段(signature_origin)规则如下。
signature原始字段由 host,date,request-line三个参数按照格式拼接成,拼接的格式为(n为换行符,’:’后面有一个空格):
host: $hostndate: $daten$request-line
假设
请求url = api.xf-yun.comdate = Wed, 05 Aug 2020 08:48:03 GMT
那么 signature原始字段(signature_origin)则为:
host: api.xf-yun.comdate: Wed, 05 Aug 2020 08:48:03 GMTPOST /v1/private/jd_ocr_car HTTP/1.1
4)使用hmac-sha256算法结合apiSecret对signature_origin签名,获得签名后的摘要signature_sha。
signature_sha=hmac-sha256(signature_origin,$apiSecret)
其中 apiSecret 是在控制台获取的APISecret
5)使用base64编码对signature_sha进行编码获得最终的signature。
signature=base64(signature_sha)
假设
APISecret = apisecretXXXXXXXXXXXXXXXXXXXXXXX date = Wed, 05 Aug 2020 08:48:03 GMT
则signature为
signature=jZj1APvgH7HIC8wtigjuAsqg59+nsbfV9KW3C0Wv8XQ=
6)根据以上信息拼接authorization base64编码前(authorization_origin)的字符串,示例如下。
api_key=”apikeyXXXXXXXXXXXXXXXXXXXXXXXXXX”, algorithm=”hmac-sha256″, headers=”host date request-line”, signature=”jZj1APvgH7HIC8wtigjuAsqg59+nsbfV9KW3C0Wv8XQ=”
注: headers是参与签名的参数,请注意是固定的参数名(”host date request-line”),而非这些参数的值。
7)最后再对authorization_origin进行base64编码获得最终的authorization参数。
authorization = base64(authorization_origin)示例:authorization=YXBpX2tleT0iYXBpa2V5WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgiLCBhbGdvcml0aG09ImhtYWMtc2hhMjU2IiwgaGVhZGVycz0iaG9zdCBkYXRlIHJlcXVlc3QtbGluZSIsIHNpZ25hdHVyZT0ialpqMUFQdmdIN0hJQzh3dGlnanVBc3FnNTkrbnNiZlY5S1czQzBXdjhYUT0i# 鉴权结果
如果鉴权失败,则根据不同错误类型返回不同HTTP Code状态码,同时携带错误描述信息,详细错误说明如下:
HTTP Code 说明 错误描述信息 解决方法 401 缺少authorization参数 {“message”:”Unauthorized”} 检查是否有authorization参数,详情见authorization参数详细生成规则 401 签名参数解析失败 {“message”:”HMAC signature cannot be verified”} 检查签名的各个参数是否有缺失是否正确,特别确认下复制的api_key是否正确 401 签名校验失败 {“message”:”HMAC signature does not match”} 签名验证失败,可能原因有很多。1. 检查api_key,api_secret 是否正确。2.检查计算签名的参数host,date,request-line是否按照协议要求拼接。3. 检查signature签名的base64长度是否正常(正常44个字节)。 403 时钟偏移校验失败 {“message”:”HMAC signature cannot be verified, a valid date or x-date header is required for HMAC Authentication”} 检查服务器时间是否标准,相差5分钟以上会报此错误
认证失败返回示例:
HTTP/1.1 403 ForbiddenDate: Thu, 06 Dec 2018 07:55:16 GMTContent-Length: 116Content-Type: text/plain; { “message”: “HMAC signature does not match”}# 请求参数
在调用业务接口时,都需要在 Http Request Body 中配置以下参数,请求数据均为json字符串。
参数名 类型 必传 描述 header object 是 用于上传平台参数 header.app_id string 是 在平台申请的appid信息 header.status string 是 请求状态,取值范围为:3(一次传完) parameter object 是 用于上传服务特性参数 parameter.jd_ocr_car object 是 用于上传功能参数 parameter.jd_ocr_car.carLicenseRes object 是 用于上传响应数据参数 parameter.jd_ocr_car.carLicenseRes.encoding string 否 文本编码,可选值:utf8(默认值) parameter.jd_ocr_car.carLicenseRes.compress string 否 文本压缩格式,可选值:raw(默认值) parameter.jd_ocr_car.carLicenseRes.format string 否 文本格式,可选值:json(默认值) payload object 是 用于上传请求数据 payload.carImgBase64Str object 是 用于上传图像数据carImgBase64Str和carImgUrl选择其中一种方式即可,若同时设置以carImgUrl为准 payload.carImgBase64Str.encoding string 否 图像编码可选值:jpg:jpg格式(默认值)jpeg:jpeg格式png:png格式bmp:bmp格式 payload.carImgBase64Str.image string 是 图像数据,base64编码,需保证图像文件大小base64编码后不超过4MB payload.carImgBase64Str.status int 否 数据状态,取值范围为:3(一次传完) payload.carImgUrl object 是 用于上传图像的URL地址carImgBase64Str和carImgUrl选择其中一种方式即可,若同时设置以carImgUrl为准 payload.carImgUrl.encoding string 否 文本(URL地址)编码可选值:utf8(默认值) payload.carImgUrl.format string 否 文本(URL地址)格式,可选值:plain(默认值) payload.carImgUrl.text string 是 URL地址,base64编码 payload.carImgUrl.status int 否 数据状态,取值范围为:3(一次传完)
请求参数示例:上传图片数据的方式:
{ “header”: { “app_id”: “xxxxxxxx”, “status”: 3 }, “parameter”: { “jd_ocr_car”: { “carLicenseRes”: { “encoding”: “utf8”, “compress”: “raw”, “format”: “json” } } }, “payload”: { “carImgBase64Str”: { “encoding”: “jpg”, “status”: 3, “image”: “/9j/4AAQ…” } }}
上传图片URL的方式:
{ “header”: { “app_id”: “xxxxxxxx”, “status”: 3 }, “parameter”: { “jd_ocr_car”: { “carLicenseRes”: { “encoding”: “utf8”, “compress”: “raw”, “format”: “json” } } }, “payload”: { “carImgUrl”: { “encoding”: “utf8”, “compress”: “raw”, “format”: “plain”, “status”: 3, “text”: “aHR0cHM6Ly9hcGktZGVtby5zMy5jbi1ub3J0aC0xLmpkY2xvdWQtb3NzLmNvbS8zMC0xOTEyMTAwOTQwMDM1MTUuanBn” } }}# 返回参数 参数名 类型 描述 header object 协议头部,用于描述平台特性的参数 header.sid string 本次会话id header.code int 返回码0表示会话调用成功,详情请参考错误码。 header.message string 描述信息 payload object 数据段,用于携带响应的数据 payload.carLicenseRes object 车牌识别响应数据块 payload.carLicenseRes.compress string 文本压缩格式,仅在设置了parameter.jd_ocr_car.carLicenseRes.compress参数时返回 payload.carLicenseRes.encoding string 文本编码,仅在设置了parameter.jd_ocr_car.carLicenseRes.encoding参数时返回 payload.carLicenseRes.format string 文本格式,仅在设置了parameter.jd_ocr_car.carLicenseRes.format参数时返回 payload.carLicenseRes.text string 车牌识别返回结果,需要对其进行base64解码,解码后的返回字段如下 text字段进行base64解码后,是一个json类型的数组,识别到的车牌可能是一个,也可能是多个。车牌具体结果字段如下:参数名 类型 描述 location string 检测框坐标,依次是[x1,y1,x2,y2,x3,y3,x4,y4], 对应车牌的四个顶点的坐标,x1,y1 对应左上角,其他角点依顺时针方向编号。 probability string 置信度 text string 识别结果
返回参数示例:
{ “header”: { “code”: 0, “message”: “success”, “sid”: “asexxxxxxxxxxxxxxxxx” }, “payload”: { “carLicenseRes”: { “compress”: “raw”, “encoding”: “utf8”, “format”: “json”, “text”: “W3sibG9jYXRpb24iOlsxNDcsNDY3LDk2NCw0NjcsOTY0LDcyMiwxNDcsNzIyXSwicHJvYmFiaWxpdHkiOjAuOTk3NDc0NDkxNTk2MjIxOSwidGV4dCI6IuiLj0UwNUVWOCJ9XQ==” } }}
base64解码后的text示例:
[ { “location”: [ 448, 652, 578, 650, 580, 691, 448, 694 ], “probability”: 0.9990984201431274, “text”: “京H12345” }, { “location”: [ 1265, 610, 1391, 608, 1393, 647, 1265, 650 ], “probability”: 0.9946907758712769, “text”: “京J54321” }, { “location”: [ 110, 93, 196, 93, 200, 123, 110, 125 ], “probability”: 0.998703122138977, “text”: “京B67890” }]# 错误码
备注:如出现下述列表中没有的错误码,可到 这里 (opens new window) 查询。
错误码 错误描述 说明 处理方式 10010 service license not enough 授权不足 联系技术人员 10009 input invalid data 输入数据非法 检查图片数据是否正确上传,尤其是carImgBase64Str参数是否正确上传 10019 service read buffer timeout, session timeout session 超时 联系技术人员 10163 param validate error:… 参数校验失败 1)依据错误提示信息检查参数是否正确上传2)检查图片大小是否超过上限,base64编码后大小不能超过4M 10313 invalid appid appid不合法 检查app_id参数是否正确上传或是否为空 10909 XXXXX;code=XXXXX 引擎处理异常 1)检查图片格式是否不符合要求(jpg/png/bmp)2)检查图片数据是否正确上传,尤其是payload中的image是否传入3)根据错误信息的code查询原因 12001 image does not exist 图像不存在 检查图片数据是否正确上传 12002 image format error 图像格式错误 检查图片格式是否符合要求(jpg/png/bmp) 12003 image size error 图像大小错误 检查图片大小是否超过上限 12004 parameter does not exit 参数不存在 请检查参数是否正确 12005 parameter value is null 参数值为null 请检查参数是否为空 13002 time out 超时 检查网络连接是否正常 13004 no content recognition 无内容识别 检查上传的图片是否为车牌图片 13005 internel error 内部错误 联系技术人员 # 调用示例
注: demo只是一个简单的调用示例,不适合直接放在复杂多变的生产环境使用
车牌识别demo python3语言 (opens new window)
车牌识别demo java语言 (opens new window)
注: 其他开发语言请参照 接口调用流程 进行开发,也欢迎热心的开发者到 讯飞开放平台社区 (opens new window) 分享你们的demo。
# 常见问题 # 车牌识别的主要功能是什么?
答:基于深度学习技术,利用光学字符识别技术,可对输入的图片自动识别车牌字段信息,识别准确率业内领先,稳定可靠。
# 车牌识别支持什么应用平台?
答:目前支持Web API应用平台。