本文主要介绍了常用语言的SDK以及使用示例。
SDK简介
文字识别OCR SDK 封装了2021-07-07版本下的所有API,以访问密钥(AccessKey)识别调用者身份,无需手动构造签名,提供自动签名等功能,能够显著简化开发过程,降低错误率,提高开发效率和代码的可维护性。
阿里云开发者中心汇聚了高频使用的编程语言SDK,提供了项目地址、安装命令、版本说明等信息。更多详情,请访问开发者中心。
准备工作
开通服务:首先您需要注册或登录阿里云账号,然后前往OCR文字识别控制台开通您所需要的服务。文字识别OCR产品提供10类OCR服务,每类服务需单独开通,开通服务不产生费用。
根据开通的服务不同,产品按月赠送200次或者一次性赠送50次免费额度,每调用成功一次,系统会从阿里云账户中扣除一次免费额度。免费额度用完后,阿里云账单系统将根据调用量开始计费。
获取访问凭证:在安装和使用阿里云SDK前,请确保您已获取访问密钥(AccessKey,简称AK)。通过SDK调用阿里云服务时,发起的请求会携带AccessKey ID和AccessKey Secret加密请求内容生成的签名,进行身份验证及请求合法性校验。
将鼠标悬浮在控制台右上方的账号图标上,单击AccessKey管理。
在AccessKey页面,查看AccessKey信息。
如果AccessKey列表为空或者没有已启用的AccessKey,前往创建AccessKey。
若您使用RAM用户调用,请确保您的RAM用户账号被授予AliyunOCRFullAccess权限,否则无法通过RAM用户调用阿里云文字识别OCR服务。
调用示例
本示例以OCR统一识别服务进行身份证识别为例,介绍SDK集成和调用流程。如需更换识别证照类型,只需通过Type参数指定图片类型,无须更换接口,详情请参见图片类型(Type)支持的请求参数补充说明。
选择开发语言
选择您需要的语言调用文字识别API服务。
Java
步骤 1:配置Java环境
步骤 2:调用文字识别OCR接口
运行以下代码调用文字识别API:
import com.aliyun.ocr_api20210707.models.RecognizeAllTextResponse;
import com.aliyun.tea.*;
public class Sample {
public static com.aliyun.ocr_api20210707.Client createClient() throws Exception {
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
config.endpoint = "ocr-api.cn-hangzhou.aliyuncs.com";
return new com.aliyun.ocr_api20210707.Client(config);
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
com.aliyun.ocr_api20210707.Client client = Sample.createClient();
com.aliyun.ocr_api20210707.models.RecognizeAllTextRequest recognizeAllTextRequest = new com.aliyun.ocr_api20210707.models.RecognizeAllTextRequest()
.setUrl("https://img.alicdn.com/tfs/TB1q5IeXAvoK1RjSZFNXXcxMVXa-483-307.jpg")
.setType("IdCard");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
RecognizeAllTextResponse resp = client.recognizeAllTextWithOptions(recognizeAllTextRequest, runtime);
System.out.println(com.aliyun.teautil.Common.toJSONString(resp.body.data));
} catch (TeaException error) {
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
System.out.println(error.getMessage());
// 诊断地址
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
System.out.println(error.getMessage());
// 诊断地址
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
}
Python
步骤 1:配置 Python 环境
配置虚拟环境(可选)
步骤 2:调用文字识别OCR接口
您可以新建一个Python文件,命名为hello_ocr.py
,将以下代码复制到hello_ocr.py
中并保存。
# -*- coding: utf-8 -*-
import os
import sys
from typing import List
from alibabacloud_ocr_api20210707.client import Client as ocr_api20210707Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_ocr_api20210707 import models as ocr_api_20210707_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
class Sample:
def __init__(self):
pass
@staticmethod
def create_client() -> ocr_api20210707Client:
config = open_api_models.Config(
# 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。,
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
# 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
config.endpoint = f'ocr-api.cn-hangzhou.aliyuncs.com'
return ocr_api20210707Client(config)
@staticmethod
def main(
args: List[str],
) -> None:
client = Sample.create_client()
recognize_all_text_request = ocr_api_20210707_models.RecognizeAllTextRequest(
url='https://img.alicdn.com/tfs/TB1q5IeXAvoK1RjSZFNXXcxMVXa-483-307.jpg',
type='IdCard'
)
runtime = util_models.RuntimeOptions()
try:
resp = client.recognize_all_text_with_options(recognize_all_text_request, runtime)
print(resp.body.data)
except Exception as error:
# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
# 错误 message
print(error.message)
# 诊断地址
print(error.data.get("Recommend"))
UtilClient.assert_as_string(error.message)
@staticmethod
async def main_async(
args: List[str],
) -> None:
client = Sample.create_client()
recognize_all_text_request = ocr_api_20210707_models.RecognizeAllTextRequest(
url='https://img.alicdn.com/tfs/TB1q5IeXAvoK1RjSZFNXXcxMVXa-483-307.jpg',
type='IdCard'
)
runtime = util_models.RuntimeOptions()
try:
# 复制代码运行请自行打印 API 的返回值
await client.recognize_all_text_with_options_async(recognize_all_text_request, runtime)
except Exception as error:
# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
# 错误 message
print(error.message)
# 诊断地址
print(error.data.get("Recommend"))
UtilClient.assert_as_string(error.message)
if __name__ == '__main__':
Sample.main(sys.argv[1:])
Go
步骤 1:配置 Go环境
步骤 2:调用文字识别OCR接口
您可以新建一个Go文件,命名为hello_ocr.go
,将以下代码复制到hello_ocr.go
中并保存。
package main
import (
"encoding/json"
"fmt"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
ocr_api20210707 "github.com/alibabacloud-go/ocr-api-20210707/v3/client"
util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
"os"
"strings"
)
func CreateClient() (_result *ocr_api20210707.Client, _err error) {
config := &openapi.Config{
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
}
config.Endpoint = tea.String("ocr-api.cn-hangzhou.aliyuncs.com")
_result = &ocr_api20210707.Client{}
_result, _err = ocr_api20210707.NewClient(config)
return _result, _err
}
func _main(args []*string) (_err error) {
client, _err := CreateClient()
if _err != nil {
return _err
}
recognizeAllTextRequest := &ocr_api20210707.RecognizeAllTextRequest{
Url: tea.String("https://img.alicdn.com/tfs/TB1q5IeXAvoK1RjSZFNXXcxMVXa-483-307.jpg"),
Type: tea.String("IdCard"),
}
runtime := &util.RuntimeOptions{}
tryErr := func() (_e error) {
defer func() {
if r := tea.Recover(recover()); r != nil {
_e = r
}
}()
resp, _err := client.RecognizeAllTextWithOptions(recognizeAllTextRequest, runtime)
if _err != nil {
return _err
}
fmt.Println(resp.Body.Data)
return nil
}()
if tryErr != nil {
var error = &tea.SDKError{}
if _t, ok := tryErr.(*tea.SDKError); ok {
error = _t
} else {
error.Message = tea.String(tryErr.Error())
}
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
fmt.Println(tea.StringValue(error.Message))
// 诊断地址
var data interface{}
d := json.NewDecoder(strings.NewReader(tea.StringValue(error.Data)))
d.Decode(&data)
if m, ok := data.(map[string]interface{}); ok {
recommend, _ := m["Recommend"]
fmt.Println(recommend)
}
_, _err = util.AssertAsString(error.Message)
if _err != nil {
return _err
}
}
return _err
}
func main() {
err := _main(tea.StringSlice(os.Args[1:]))
if err != nil {
panic(err)
}
}