OCR统一识别接口支持识别多种图片类型,包括通用文字、个人卡证、发票等。您只需要通过Type参数指定图片类型,无须更换接口。
接口说明
如何使用本接口
步骤 | 概述 |
---|---|
1 | 开通OCR 统一识别服务。 开通此 API 后会赠送免费额度,可使用免费额度测试。 |
2 | 购买OCR 共享资源包。您也可以不购买资源包,系统会通过“按量付费”方式按实际调用量自动扣款。 |
3 | 可以参照调试页面提供的代码示例完成 API 接入开发。接入完成后,调用 API 获取识别结果。如果使用子账号调用接口,需要阿里云账号(主账号)对 RAM 账号进行授权。创建 RAM 用户的具体操作,请参考:创建 RAM 用户。文字识别服务提供一种系统授权策略,即 AliyunOCRFullAccess。具体授权操作,请参见在用户页面为 RAM 用户授权。 |
重要提示
类型 | 概述 |
---|---|
图片格式 |
|
图片尺寸 |
|
图片大小 |
|
其他提示 |
|
调试
您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。
授权信息
下表是API对应的授权信息,可以在RAM权限策略语句的Action
元素中使用,用来给RAM用户或RAM角色授予调用此API的权限。具体说明如下:
- 操作:是指具体的权限点。
- 访问级别:是指每个操作的访问级别,取值为写入(Write)、读取(Read)或列出(List)。
- 资源类型:是指操作中支持授权的资源类型。具体说明如下:
- 对于必选的资源类型,用背景高亮的方式表示。
- 对于不支持资源级授权的操作,用
全部资源
表示。
- 条件关键字:是指云产品自身定义的条件关键字。
- 关联操作:是指成功执行操作所需要的其他权限。操作者必须同时具备关联操作的权限,操作才能成功。
操作 | 访问级别 | 资源类型 | 条件关键字 | 关联操作 |
---|---|---|---|---|
ocr:RecognizeAllText | none | *全部资源 * |
| 无 |
请求参数
名称 | 类型 | 必填 | 描述 | 示例值 |
---|---|---|---|---|
Url | string | 否 |
| https://example.png |
body | byte | 否 |
| 图片二进制文件 |
Type | string | 是 |
| Advanced |
OutputFigure | boolean | 否 |
| false |
OutputQrcode | boolean | 否 |
| false |
OutputBarCode | boolean | 否 |
| false |
OutputStamp | boolean | 否 |
| false |
OutputCoordinate | string | 否 |
| "" |
OutputOricoord | boolean | 否 |
| false |
OutputKVExcel | boolean | 否 |
| false |
PageNo | integer | 否 |
| 1 |
AdvancedConfig | object | 否 |
| |
OutputRow | boolean | 否 |
| false |
OutputParagraph | boolean | 否 |
| false |
OutputTable | boolean | 否 |
| false |
OutputCharInfo | boolean | 否 |
| false |
IsLineLessTable | boolean | 否 |
| false |
IsHandWritingTable | boolean | 否 |
| false |
OutputTableExcel | boolean | 否 |
| false |
OutputTableHtml | boolean | 否 |
| false |
IdCardConfig | object | 否 |
| |
OutputIdCardQuality | boolean | 否 |
| false |
InternationalIdCardConfig | object | 否 |
| |
Country | string | 否 |
| India |
InternationalBusinessLicenseConfig | object | 否 |
| |
Country | string | 否 |
| India |
MultiLanConfig | object | 否 |
| |
Languages | string | 否 |
| eng,chn |
TableConfig | object | 否 |
| |
IsHandWritingTable | boolean | 否 |
| false |
IsLineLessTable | boolean | 否 |
| false |
OutputTableExcel | boolean | 否 |
| false |
OutputTableHtml | boolean | 否 |
| false |
- 本接口请求参数可分为三级,一级入参是必传的基础参数,例如图片链接、图片类型。二级参数可以控制识别内容输出,例如是否返回坐标等。 三级参数和特定的图片类型相关,用于控制是否输出特定信息,例如是否输出身份证的质量检测分数。注意,只有 Type 是必传参数,其余参数可以根据需要设置。
图片类型(Type)支持的请求参数补充说明
Type | 类型描述 | 支持的参数 |
---|---|---|
Advanced | 通用文字识别高精版 |
|
General | 通用文字识别基础版 |
|
Commerce | 电商图片文字 |
|
HandWriting | 手写文字 |
|
MultiLang | 多语言文字 |
|
Table | 表格 |
|
IdCard | 身份证 |
|
BankCard | 银行卡 |
|
InternationalPassport | 国际护照 |
|
ChinesePassport | 中国护照 |
|
SocialSecurityCard | 社保卡 |
|
PermitToHK_MO_TW | 往来港澳台通行证 |
|
PermitToMainland | 来往中国大陆(内地)通行证 |
|
HouseholdHead | 户口本首页 |
|
HouseholdResident | 户口本常住人口页 |
|
EstateCertification | 不动产权证 |
|
BirthCertification | 出生证明 |
|
HKIdCard | 中国香港身份证 |
|
InternationalIdCard | 国际身份证 |
|
Stamp | 公章 |
|
MixedInvoice | 混贴票证 |
|
Invoice | 增值税发票 |
|
CarInvoice | 机动车销售统一发票 |
|
QuotaInvoice | 定额发票 |
|
AirItinerary | 航空行程单 |
|
TrainTicket | 火车票 |
|
TollInvoice | 过路过桥费发票 |
|
RollTicket | 增值税发票卷票 |
|
BankAcceptance | 银行承兑汇票 |
|
BusShipTicket | 客运车船票 |
|
NonTaxInvoice | 非税收入发票 |
|
CommonPrintedInvoice | 通用机打发票 |
|
HotelConsume | 酒店流水 |
|
PaymentRecord | 支付详情页 |
|
PurchaseRecord | 电商订单页 |
|
RideHailingItinerary | 网约车行程单 |
|
ShoppingReceipt | 购物小票 |
|
TaxClearanceCertificate | 税收完税证明 |
|
UsedCarInvoice | 二手车销售统一发票 |
|
VehicleLicense | 行驶证 |
|
DrivingLicense | 驾驶证 |
|
VehicleRegistration | 机动车登记证 |
|
VehicleCertification | 车辆合格证 |
|
LicensePlateNumber | 车牌 |
|
CarVinCode | 车辆 vin 码 |
|
BusinessLicense | 营业执照 |
|
InternationalBusinessLicense | 国际企业执照 |
|
MedicalDeviceManageLicense | 医疗器械经营许可证 |
|
MedicalDeviceProduceLicense | 医疗器械生产许可证 |
|
CosmeticProduceLicense | 化妆品生产许可证 |
|
QrCode | 二维码 | |
BarCode | 条形码 | |
TaxiInvoice | 出租车发票 |
|
TrademarkCertificate | 商标注册证 |
|
FoodProduceLicense | 食品生产许可证 |
|
FoodManagementLicense | 食品经营许可证 |
|
ClassIIMedicalDeviceManageLicense | 第二类医疗器械经营备案凭证 |
|
WayBill | 电子面单 |
|
BankAccountPermit | 银行开户许可证 |
|
返回参数
图片类型(Type)对应的 KV 信息字段说明。所有 KV 字段都是 String 类型。
Type | 类型描述 | 返回 KV 信息字段说明 |
---|---|---|
IdCard | 身份证 |
|
BankCard | 银行卡 |
|
InternationalPassport | 国际护照 |
|
ChinesePassport | 中国护照 |
|
SocialSecurityCard | 社保卡 |
|
PermitToHK_MO_TW | 往来港澳台通行证 |
|
PermitToMainland | 来往中国大陆(内地)通行证 |
|
HouseholdHead | 户口本户首页 |
|
HouseholdResident | 户口本常住人口页 |
|
EstateCertification | 不动产权证 |
|
BirthCertification | 出生证明 |
|
HKIdCard | 中国香港身份证 |
|
InternationalIdCard | 国际身份证 |
|
Stamp | 公章 |
|
Invoice | 增值税发票 |
|
CarInvoice | 机动车销售统一发票 |
|
QuotaInvoice | 定额发票 |
|
AirItinerary | 航空行程单 |
|
TrainTicket | 火车票 |
|
TollInvoice | 过路过桥费发票 |
|
RollTicket | 增值税发票卷票 |
|
BankAcceptance | 银行承兑汇票 |
|
BusShipTicket | 客运车船票 |
|
NonTaxInvoice | 非税收入发票 |
|
CommonPrintedInvoice | 通用机打发票 |
|
HotelConsume | 酒店流水 |
|
PaymentRecord | 支付详情页 |
|
PurchaseRecord | 电商订单页 |
|
RideHailingItinerary | 网约车行程单 |
|
ShoppingReceipt | 购物小票 |
|
TaxClearanceCertificate | 税收完税证明 |
|
UsedCarInvoice | 二手车销售统一发票 |
|
VehicleLicense | 行驶证 |
|
DrivingLicense | 驾驶证 |
|
VehicleRegistration | 机动车登记证 |
|
VehicleCertification | 车辆合格证 |
|
LicensePlateNumber | 车牌 |
|
CarVinCode | 车辆 vin 码 |
|
BusinessLicense | 营业执照 |
|
BusinessLicense | 国际企业执照 |
|
MedicalDeviceManageLicense | 医疗器械经营许可证 |
|
MedicalDeviceProduceLicense | 医疗器械生产许可证 |
|
CosmeticProduceLicense | 化妆品生产许可证 |
|
TaxiInvoice | 出租车发票 |
|
TrademarkCertificate | 商标注册证 |
|
FoodProduceLicense | 食品生产许可证 |
|
FoodManagementLicense | 食品经营许可证 |
|
ClassIIMedicalDeviceManageLicense | 第二类医疗器械经营备案凭证 |
|
WayBill | 电子面单 |
|
BankAccountPermit | 银行开户许可证 |
|
示例
正常返回示例
JSON
格式
{
"RequestId": "E2A98925-DC2C-18FB-995F-BAF507XXXXXX",
"Data": {
"Height": 2000,
"Width": 1000,
"Content": "\"合同编号...\"",
"SubImageCount": 2,
"SubImages": [
{
"SubImageId": 0,
"Type": "身份证正面",
"Angle": 0,
"SubImagePoints": [
{
"X": 100,
"Y": 200
}
],
"SubImageRect": {
"CenterX": 100,
"CenterY": 200,
"Width": 1000,
"Height": 2000
},
"KvInfo": {
"KvCount": 6,
"Data": "{\n \"address\": \"XX省XX市XX街道XX号\",\n \"ethnicity\": \"汉\",\n \"sex\": \"男\",\n \"name\": \"王XX\",\n \"idNumber\": \"XXX\",\n \"birthDate\": \"2000年1月1日\"\n}",
"KvDetails": {
"key": {
"KeyName": "\"address\"",
"KeyConfidence": 100,
"Value": "\"XX省XX市XX街道\"",
"ValueConfidence": 98,
"ValuePoints": [
{
"X": 100,
"Y": 200
}
],
"ValueRect": {
"CenterX": 100,
"CenterY": 200,
"Width": 50,
"Height": 50
},
"ValueAngle": 0
}
}
},
"BlockInfo": {
"BlockCount": 12,
"BlockDetails": [
{
"BlockId": 0,
"BlockAngle": 0,
"BlockContent": "“合同编号...”",
"BlockConfidence": 98,
"BlockPoints": [
{
"X": 100,
"Y": 200
}
],
"BlockRect": {
"CenterX": 100,
"CenterY": 200,
"Width": 50,
"Height": 10
},
"CharInfos": [
{
"CharId": 0,
"CharContent": "“合”",
"CharConfidence": 95,
"CharPoints": [
{
"X": 100,
"Y": 200
}
],
"CharRect": {
"CenterX": 100,
"CenterY": 200,
"Width": 10,
"Height": 10
}
}
]
}
]
},
"TableInfo": {
"TableCount": 2,
"TableDetails": [
{
"TableId": 0,
"RowCount": 10,
"ColumnCount": 3,
"CellCount": 29,
"Header": {
"Contents": [
"\"12.1本合同当事人\""
],
"BlockId": 0
},
"Footer": {
"Contents": [
"\"贷款人/抵押权人(盖章/电子签章):\""
],
"BlockId": 0
},
"CellDetails": [
{
"CellId": 0,
"CellContent": "\"借款人/抵押人:\"",
"RowStart": 0,
"RowEnd": 0,
"ColumnStart": 2,
"ColumnEnd": 5,
"BlockList": [
0
],
"CellPoints": [
{
"X": 100,
"Y": 200
}
],
"CellRect": {
"CenterX": 100,
"CenterY": 200,
"Width": 20,
"Height": 20
},
"CellAngle": 0
}
],
"TablePoints": [
{
"X": 100,
"Y": 200
}
],
"TableRect": {
"CenterX": 100,
"CenterY": 200,
"Width": 100,
"Height": 100
}
}
],
"TableExcel": "https://example.xlsx",
"TableHtml": "https://example.html"
},
"RowInfo": {
"RowCount": 9,
"RowDetails": [
{
"RowId": 0,
"RowContent": "“合同编号...\"",
"BlockList": [
0
]
}
]
},
"ParagraphInfo": {
"ParagraphCount": 11,
"ParagraphDetails": [
{
"ParagraphId": 0,
"ParagraphContent": "“合同编号...”",
"BlockList": [
0
]
}
]
},
"QrCodeInfo": {
"QrCodeCount": 1,
"QrCodeDetails": [
{
"Data": "“http://www.gsxt.gov.cn/indeXXX”",
"QrCodePoints": [
{
"X": 100,
"Y": 200
}
],
"QrCodeRect": {
"CenterX": 100,
"CenterY": 200,
"Width": 100,
"Height": 100
},
"QrCodeAngle": 0
}
]
},
"BarCodeInfo": {
"BarCodeCount": 2,
"BarCodeDetails": [
{
"Type": "Code128",
"Data": "\"1100011XXXXXX\"",
"BarCodePoints": [
{
"X": 100,
"Y": 200
}
],
"BarCodeRect": {
"CenterX": 100,
"CenterY": 200,
"Width": 100,
"Height": 10
},
"BarCodeAngle": 0
}
]
},
"FigureInfo": {
"key": {
"FigureCount": 3,
"FigureDetails": [
{
"Type": "face",
"Data": "“”",
"FigurePoints": [
{
"X": 100,
"Y": 200
}
],
"FigureRect": {
"CenterX": 100,
"CenterY": 200,
"Width": 50,
"Height": 50
},
"FigureAngle": 0
}
]
}
},
"StampInfo": {
"StampCount": 2,
"StampDetails": [
{
"Data": {
"CompanyId": "\"XXX\"",
"OrganizationName": "\"XXX贸易有限公司\"",
"AntiFakeCode": "\"3205823XXXXXX\"",
"OtherText": "\"3205823XXXXXX\"",
"TopText": "\"XXX贸易有限公司\"",
"OrganizationNameEng": "\"\"",
"TaxpayerId": "\"\""
},
"StampPoints": [
{
"X": 100,
"Y": 200
}
],
"StampRect": {
"CenterX": 100,
"CenterY": 200,
"Width": 50,
"Height": 50
},
"StampAngle": 0
}
]
},
"QualityInfo": {
"IsCopy": false,
"IsReshoot": false,
"CompletenessScore": 90.5,
"QualityScore": 80.5,
"TamperScore": 10.5
}
}
],
"XmlResult": "\"\"",
"AlgoVersion": "\"\"",
"DebugInfo": "\"\"",
"AlgoServer": [
"\"\""
],
"IsMixedMode": false,
"PageNo": 1,
"KvExcelUrl": "https://example.xlsx"
},
"Code": "400",
"Message": "illegalImageUrl"
}
错误码
HTTP status code | 错误码 | 错误信息 | 描述 |
---|---|---|---|
400 | invalidInputParameter | %s | - |
400 | InvalidCountry | Specified parameter Country is not valid. | 不支持的国家。 |
访问错误中心查看更多错误码。
变更历史
变更时间 | 变更内容概要 | 操作 |
---|---|---|
2024-06-04 | OpenAPI 错误码发生变更 | 查看变更详情 |
2024-01-08 | OpenAPI 错误码发生变更、OpenAPI 入参发生变更 | 查看变更详情 |
您可以参考下面的示例调用统一 API 接口
- 通过图片 URL 请求接口 Java 示例
package demo;
import com.aliyun.ocr_api20210707.Client;
import com.aliyun.ocr_api20210707.models.*;
import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;
import com.google.gson.Gson;
public class Demo {
public static void main(String[] args) throws Exception {
final String endpoint = "ocr-api.cn-hangzhou.aliyuncs.com";
final String accessKeyID = "您的 AccessKeyID";
final String accessKeySecret = "您的 AccessKeySecret";
final String imageUrl = "https://example.png";
final Config config = new Config().setEndpoint(endpoint).setAccessKeyId(accessKeyID).setAccessKeySecret(accessKeySecret);
Client client = new Client(config);
RecognizeAllTextRequest request = new RecognizeAllTextRequest()
.setType("Advanced") // 指定 Type(此参数为必填参数)
.setUrl(imageUrl) // 图片 url
.setOutputOricoord(true); // 设置返回原图坐标。您可以设置更多二级参数。
// 您也可以在 request 中指定更多三级参数。例如对于 Type=Advanced,可以指定 OutputCharInfo=true(输出单字信息)
RecognizeAllTextRequest.RecognizeAllTextRequestAdvancedConfig advancedConfig = new RecognizeAllTextRequest.RecognizeAllTextRequestAdvancedConfig()
.setOutputCharInfo(true);
request.setAdvancedConfig(advancedConfig);
try {
RecognizeAllTextResponse response = client.recognizeAllText(request);
System.out.println(new Gson().toJson(response.getBody().getData().toMap()));
} catch (TeaException e) {
System.out.println(e.getStatusCode());
}
}
}
- 通过上传本地图片请求接口 Java 示例
package demo;
import com.aliyun.ocr_api20210707.Client;
import com.aliyun.ocr_api20210707.models.*;
import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;
import com.google.gson.Gson;
public class Demo {
public static void main(String[] args) throws Exception {
final String endpoint = "ocr-api.cn-hangzhou.aliyuncs.com";
final String accessKeyID = "您的 AccessKeyID";
final String accessKeySecret = "您的 AccessKeySecret";
final Config config = new Config().setEndpoint(endpoint).setAccessKeyId(accessKeyID).setAccessKeySecret(accessKeySecret);
final String localImageFileName = "~/example.png"; // 本地图片路径
Client client = new Client(config);
try (InputStream imageStream = new FileInputStream(localImageFileName)) {
RecognizeAllTextRequest request = new RecognizeAllTextRequest()
.setType("Advanced") // 指定 Type(此参数为必填参数)
.setBody(imageStream) // 指定本地图片路径
.setOutputOricoord(true); // 设置返回原图坐标。您可以设置更多二级参数。
// 您也可以在 request 中指定更多参数。例如对于 Type=Advanced,可以指定 OutputCharInfo=true(输出单字信息)
RecognizeAllTextRequest.RecognizeAllTextRequestAdvancedConfig advancedConfig = new RecognizeAllTextRequest.RecognizeAllTextRequestAdvancedConfig()
.setOutputCharInfo(true);
request.setAdvancedConfig(advancedConfig);
RecognizeAllTextResponse response = client.recognizeAllText(request);
System.out.println(new Gson().toJson(response.getBody().getData().toMap()));
} catch (TeaException e) {
System.out.println(e.getStatusCode());
}
}
}