本文介绍文字识别OCR产品的使用流程。
使用流程
通过体验馆和SDK调用文字识别OCR服务时,文字识别OCR仅做图片识别并返回结果,不会存储图片和识别结果。
免登录体验服务
如果您是新用户(未注册过阿里云账号、未开通文字识别OCR服务),建议先通过阿里云文字识别体验馆>体验中心的可视化界面上传单张图片体验OCR效果。体验馆无需注册和登录账号,免费体验所有文字识别服务,不限次数,但无法通过SDK批量测试,也无法将OCR识别服务对接到业务系统。

当您判断文字识别OCR产品能够满足业务需求时,可前往文字识别OCR控制台按需开通服务。
注册阿里云账号并完成实名认证
开通服务
使用阿里云账号(主账号)或者RAM账号(子账号)登录文字识别OCR控制台按需开通服务。

文字识别OCR产品提供10类OCR服务,每类服务需单独开通,开通服务不产生费用。根据开通的服务不同,产品按月赠送200次或者一次性赠送50次免费额度,每调用成功一次,统一从阿里云账户中扣除一次免费额度。免费额度用完后,阿里云账单系统将根据调用量开始计费。
RAM账号是由阿里云账号创建并授权,需要确保RAM账号拥有AliyunOCRFullAccess和AliyunBSSContractFullAccess权限,否则无法通过该账号开通服务。
前往RAM权限列表查看RAM账号拥有的权限。
接下来,您可以将SDK集成到业务系统中,使用免费额度进行OCR效果批量评测。
在线调用测试
调用SDK
以OCR统一识别服务进行身份证识别为例,介绍SDK集成和调用流程。

获取访问密钥
集成SDK前,请确保您已获取访问密钥(AccessKey,简称AK)。通过SDK调用阿里云服务时,发起的请求会携带AccessKey ID和AccessKey Secret加密请求内容生成的签名,进行身份验证及请求合法性校验。
- 将鼠标悬浮在控制台右上方的账号图标上,单击AccessKey管理。  
- 在AccessKey页面,查看AccessKey信息。  - 如果AccessKey列表为空或者没有已启用的AccessKey,前往创建AccessKey。 
选择开发语言
选择您需要的语言调用文字识别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"));
        // 默认公网接入地址为"ocr-api.cn-hangzhou.aliyuncs.com",若您需要使用vpc域名访问,请确保您的ecs建立在杭州region,vpc接入地址为"ocr-api-vpc.cn-hangzhou.aliyuncs.com"
        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']
        )
        # 默认公网接入地址为"ocr-api.cn-hangzhou.aliyuncs.com",若您需要使用vpc域名访问,请确保您的ecs建立在杭州region,vpc接入地址为"ocr-api-vpc.cn-hangzhou.aliyuncs.com"
        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")),
	}
	// 默认公网接入地址为"ocr-api.cn-hangzhou.aliyuncs.com",若您需要使用vpc域名访问,请确保您的ecs建立在杭州region,vpc接入地址为"ocr-api-vpc.cn-hangzhou.aliyuncs.com"
	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)
	}
}



