简介:本文详细解析Umi-OCR的HTTP接口功能,涵盖接口定义、请求参数、响应格式、错误处理及典型应用场景,助力开发者高效集成OCR服务。
Umi-OCR的HTTP接口是基于RESTful架构设计的轻量级OCR服务接口,支持通过HTTP协议提交图像文件并返回结构化文本识别结果。其核心优势体现在三方面:跨平台兼容性(支持Windows/Linux/macOS环境部署)、高精度识别(采用自研深度学习模型,支持中英文混合识别)、灵活扩展性(可自定义识别区域、语言类型及输出格式)。
开发者可通过标准HTTP客户端(如Postman、cURL)或编程语言(Python/Java/Go)的HTTP库直接调用接口,无需依赖本地SDK。典型应用场景包括:批量文档数字化、票据信息提取、自动化办公流程等。
服务端需部署Umi-OCR的HTTP服务模块,默认监听端口为1218。完整请求URL格式为:
http://[服务IP]:1218/api/v1/ocr
其中v1表示API版本号,便于后续版本迭代兼容。
POST(仅支持POST方法上传图像)multipart/form-dataapplication/json以获取结构化响应| 参数名 | 类型 | 必填 | 描述 | 示例值 |
|---|---|---|---|---|
image |
file | 是 | 待识别图像文件(支持JPG/PNG) | 二进制文件流 |
lang |
string | 否 | 识别语言(默认为chi_sim) |
eng、chi_sim+eng |
psm |
int | 否 | 页面分割模式(默认为3) | 6(假设为单块文本) |
output_type |
string | 否 | 输出格式(默认为json) |
txt、hocr、box |
参数详解:
lang支持多语言组合,如chi_sim+eng表示同时识别简体中文和英文psm(Page Segmentation Mode)参考Tesseract规范,常用值:3:全自动分割(默认)6:假设为单块文本11:稀疏文本模式返回JSON格式数据,结构示例:
{"status": "success","data": {"text": "识别结果文本","blocks": [{"text": "第一行文本","confidence": 0.98,"bbox": [x1, y1, x2, y2]}],"language": "chi_sim","time_used": 0.45}}
blocks数组包含每个识别区域的详细信息,confidence为置信度(0-1)bbox为文本框坐标,格式为[左上角X, 左上角Y, 右下角X, 右下角Y]常见错误码:
| 状态码 | 原因 | 解决方案 |
|————|———————————————-|———————————————|
| 400 | 请求参数错误 | 检查image字段是否为空 |
| 413 | 文件过大(默认限制5MB) | 压缩图像或修改服务端配置 |
| 500 | 服务端处理异常 | 查看服务日志排查模型加载问题 |
| 503 | 服务不可用 | 检查服务进程是否运行 |
import requestsdef ocr_invoice(image_path):url = "http://localhost:1218/api/v1/ocr"with open(image_path, 'rb') as f:files = {'image': f}payload = {'lang': 'chi_sim+eng', 'psm': 6}response = requests.post(url, files=files, data=payload)return response.json()result = ocr_invoice("invoice.jpg")print(result["data"]["text"])
// 使用RestTemplate示例public String ocrImage(MultipartFile file) {HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.MULTIPART_FORM_DATA);MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();body.add("image", new ByteArrayResource(file.getBytes()) {@Overridepublic String getFilename() { return file.getOriginalFilename(); }});body.add("lang", "chi_sim");HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(body, headers);RestTemplate restTemplate = new RestTemplate();return restTemplate.postForObject("http://localhost:1218/api/v1/ocr", request, String.class);}
config.json中的max_workers参数调整并发数?token=YOUR_TOKENAuthorization: Bearer <token>models/目录下的.traineddata文件lang参数是否匹配图像语言logs/目录下的错误日志netstat -ano | findstr 1218)config.json中的max_image_size)通过本文的详细解析,开发者可快速掌握Umi-OCR HTTP接口的核心用法,并根据实际需求灵活调整参数配置。建议结合官方GitHub仓库的示例代码进行实践,遇到问题时优先查阅docs/API.md文档。