阿里云 OCR 文本识别:Java SDK 调用示例
使用阿里云 OCR API 进行文字识别的 Java 示例,涵盖 SDK 初始化、全文字识别接口和结果处理。
阿里云 OCR 文本识别:Java SDK 集成
场景
项目中需要识别身份证照片中的信息,自动填充表单。阿里云 OCR 提供了现成的 API,支持通用文字、身份证、驾驶证、发票等场景的识别。
SDK 调用流程
<!-- Maven 依赖 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>ocr_api20210707</artifactId>
<version>2.0.11</version>
</dependency>
调用步骤:
@Configuration
public class OcrConfig {
@Bean
public Client ocrClient() {
return new Client(new Config()
.setAccessKeyId(accessKeyId)
.setAccessKeySecret(accessKeySecret)
.setEndpoint("ocr-api.cn-hangzhou.aliyuncs.com"));
}
}
@Service
public class OcrService {
@Autowired
private Client ocrClient;
public IdCardInfo recognizeIdCard(String imageUrl) {
RecognizeIdCardRequest request = new RecognizeIdCardRequest()
.setUrl(imageUrl)
.setOutputFigure(true); // 输出人脸图片
RecognizeIdCardResponse response = ocrClient.recognizeIdCard(request);
return response.getBody().getData();
}
}
识别结果示例
{
"name": "张三",
"number": "110101199001011234",
"address": "北京市朝阳区xxx",
"birthDate": "19900101",
"gender": "男",
"nationality": "汉",
"validPeriod": "2020.01.01-2040.01.01"
}
场景化识别
阿里云 OCR 的核心优势在于场景化识别——不只是通用文字识别,而是对特定场景做了结构化输出:
| 场景 | 接口 | 结构化字段 |
|---|---|---|
| 身份证 | RecognizeIdCard | 姓名、号码、地址、有效期 |
| 营业执照 | RecognizeBusinessLicense | 公司名、法人、注册资本 |
| 发票 | RecognizeInvoice | 发票号、金额、开票日期 |
| 通用文字 | RecognizeGeneral | 文本内容 + 位置坐标 |
通用文字识别把所有文字拼在一起返回,而场景化接口返回结构化字段,直接映射到业务对象,省去了解析文本的麻烦。
成本考虑
阿里云 OCR 按调用量计费。日常测试用每个月免费额度(500 次/月)就够了。生产环境可以考虑:
- 批量识别用离线 API(异步,价格更低)
- 高频识别的场景缓存结果(相同图片不重复调用)
- 身份证 OCR 相比通用 OCR 价格略高但效果好得多
多平台对比
阿里云、腾讯云、百度云的 OCR 技术和调用模式大同小异,差别主要在:
- 各家的场景覆盖不同:例如某家对越南身份证的识别比另一家好
- 免费额度:阿里云 500 次/月 vs 百度云特定场景免费
- SDK 质量:阿里云 Java SDK 文档比较完善,错误信息友好
换平台时核心逻辑不变:配置 Client → 构造请求 → 调用 API → 解析结果。差异只在初始化参数和 SDK 包名。