Umi-OCR HTTP接口使用指南

Umi-OCR HTTP接口使用指南

一、接口概述与适用场景

Umi-OCR HTTP接口是一种基于RESTful风格的轻量级OCR服务接口,通过HTTP协议将图像识别能力开放给外部系统。其核心价值在于将OCR引擎的文本提取能力解耦为独立服务,支持多语言、多场景的文本识别需求。典型应用场景包括:

  • 文档数字化:将纸质合同、书籍扫描件转换为可编辑文本
  • 票据处理:自动识别发票、收据中的金额、日期等关键字段
  • 工业质检:识别仪表盘读数、设备标识等结构化信息
  • 移动端集成:通过移动端应用上传图片获取识别结果

相较于传统本地化OCR方案,HTTP接口模式具备更强的扩展性,可通过横向扩展服务节点应对高并发请求,同时降低客户端的资源消耗。

二、接口设计原理与架构

2.1 核心架构组件

Umi-OCR HTTP服务采用分层架构设计:

  1. 负载均衡层:基于Nginx或类似工具实现请求分发
  2. API网关层:处理请求鉴权、参数校验和路由转发
  3. 业务逻辑层:包含OCR引擎核心算法和结果后处理
  4. 存储层:可选缓存识别结果以提高重复请求效率

2.2 接口协议规范

所有接口遵循RESTful设计原则:

  • 协议:HTTP/1.1或HTTP/2
  • 数据格式:JSON(请求/响应)
  • 编码:UTF-8
  • 认证方式:支持API Key或JWT令牌

三、核心接口详解

3.1 基础文本识别接口

请求路径POST /api/v1/ocr/general

请求参数

  1. {
  2. "image_base64": "iVBORw0KGgoAAAANSUhEUgAA...",
  3. "language_type": "CHN_ENG",
  4. "detect_direction": true,
  5. "probability": false
  6. }

响应示例

  1. {
  2. "log_id": 123456789,
  3. "words_result": [
  4. {
  5. "words": "百度智能云",
  6. "location": {
  7. "width": 100,
  8. "height": 30,
  9. "left": 50,
  10. "top": 20
  11. },
  12. "probability": {
  13. "words": 0.99
  14. }
  15. }
  16. ],
  17. "words_result_num": 1
  18. }

关键参数说明

  • language_type:支持中文(CHN)、英文(ENG)、中英文混合(CHN_ENG)等20+语言组合
  • detect_direction:自动检测文字方向(0°/90°/180°/270°)
  • probability:是否返回识别置信度(适用于质量评估场景)

3.2 表格识别专项接口

针对结构化表格场景提供的增强接口:

  1. POST /api/v1/ocr/table

特色功能

  • 自动识别表格线框和单元格关系
  • 返回HTML格式的表格结构
  • 支持合并单元格识别

典型响应

  1. {
  2. "table_result": {
  3. "html": "<table><tr><td>项目</td><td>金额</td></tr><tr><td>服务费</td><td>¥1000</td></tr></table>",
  4. "cells": [
  5. {"text": "项目", "location": {...}},
  6. {"text": "金额", "location": {...}}
  7. ]
  8. }
  9. }

四、高级功能实现

4.1 批量处理优化

通过multipart/form-data实现多图并行识别:

  1. POST /api/v1/ocr/batch HTTP/1.1
  2. Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
  3. ------WebKitFormBoundary7MA4YWxkTrZu0gW
  4. Content-Disposition: form-data; name="images"; filename="image1.jpg"
  5. Content-Type: image/jpeg
  6. [二进制数据]
  7. ------WebKitFormBoundary7MA4YWxkTrZu0gW
  8. Content-Disposition: form-data; name="images"; filename="image2.jpg"
  9. Content-Type: image/jpeg
  10. [二进制数据]
  11. ------WebKitFormBoundary7MA4YWxkTrZu0gW--

性能优势

  • 单次请求处理多个文件,减少网络往返
  • 服务端自动分配计算资源

4.2 异步处理模式

对于大尺寸图片或复杂场景,提供异步接口:

  1. POST /api/v1/ocr/async
  2. {
  3. "callback_url": "https://your.server/callback",
  4. "image_url": "https://example.com/image.jpg"
  5. }

工作流程

  1. 客户端提交任务
  2. 服务端返回task_id
  3. 处理完成后向callback_url推送结果
  4. 客户端可通过GET /api/v1/task/{task_id}查询状态

五、最佳实践与优化建议

5.1 图像预处理规范

  • 分辨率:建议300dpi以上,文字高度≥20像素
  • 格式:优先使用JPEG(有损压缩)或PNG(无损)
  • 色彩模式:灰度图可减少30%数据量
  • 二值化:对低对比度文档可启用自适应阈值处理

5.2 错误处理机制

常见错误码
| 状态码 | 含义 | 处理建议 |
|————|———|—————|
| 400 | 参数错误 | 检查JSON结构 |
| 413 | 请求体过大 | 分片传输或压缩 |
| 429 | 限流 | 实现指数退避重试 |
| 500 | 服务异常 | 切换备用节点 |

重试策略

  1. import time
  2. import requests
  3. def ocr_with_retry(url, data, max_retries=3):
  4. for attempt in range(max_retries):
  5. try:
  6. response = requests.post(url, json=data)
  7. if response.status_code == 200:
  8. return response.json()
  9. elif response.status_code in [429, 500]:
  10. wait_time = min(2**attempt, 30) # 指数退避
  11. time.sleep(wait_time)
  12. except requests.exceptions.RequestException:
  13. pass
  14. raise Exception("Max retries exceeded")

5.3 性能优化方案

  1. 客户端缓存:对重复图片建立本地缓存(MD5哈希作为键)
  2. 区域识别:通过area_interest参数指定识别区域
  3. 并行调用:多线程/协程并发请求(需控制QPS)
  4. 结果过滤:后处理阶段过滤低置信度结果(threshold>0.8)

六、安全与合规建议

  1. 数据传输:强制使用HTTPS,禁用HTTP明文传输
  2. 鉴权机制
    • 短期有效API Key(建议≤24小时)
    • IP白名单限制
  3. 隐私保护
    • 自动删除处理后的原始图像
    • 提供数据脱敏选项
  4. 审计日志:记录所有识别请求的关键信息(不含图像内容)

七、部署与扩展指南

7.1 容器化部署

  1. FROM python:3.9-slim
  2. WORKDIR /app
  3. COPY requirements.txt .
  4. RUN pip install -r requirements.txt
  5. COPY . .
  6. CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app:api"]

7.2 水平扩展策略

  • 无状态设计:确保每个请求可独立处理
  • 会话粘滞:对需要保持状态的场景使用Cookie
  • 自动伸缩:基于CPU/内存使用率触发扩容

八、常见问题解答

Q1:如何提高复杂背景下的识别准确率?
A:建议先进行图像分割处理,或使用preprocess=true参数启用服务端预处理。

Q2:单张图片最大支持多大?
A:默认限制为10MB,可通过配置文件调整max_content_length参数。

Q3:是否支持PDF文件识别?
A:需先转换为图片格式,或使用第三方工具提取PDF中的图像层。

通过系统化的接口设计和优化策略,Umi-OCR HTTP接口可满足从个人开发者到企业级用户的多样化需求。建议在实际使用中结合具体场景进行参数调优,并定期关注服务端版本更新以获取最新功能增强。