项目介绍
本项目是基于Umi-OCR的OCR服务端项目,用于识别图片中的文本内容。
由于Umi-OCR只能通过Umi-OCR的可视化窗口操作来识别图片文本,因此本项目通过调用Umi-OCR的API接口封装了HTTP接口,用于接收图片文件并返回识别结果。
包含了Java的封装测试工具。
配置说明
config.json 是项目的配置文件,用于配置Umi-OCR的API接口地址和其他参数。
配置项说明
httpPort:http接口的端口,默认值为3000。timeout:在调用Umi-OCR的API接口时,设置的超时时间,默认值为60秒。
使用说明
启动服务
双击zsl_http_ocr.exe即可启动服务程序
调用接口
通过上传文件识别图片文本
- URL:
/ocr/upload - 方法:
POST - 请求体:
multipart/form-data格式,包含一个名为file的文件字段,值为图片文件。
- 响应体:
application/json格式,包含识别结果。- 成功示例:
{ "success": true, "message": "OCR识别成功", "result": "识别到的文本内容" } - 失败示例:
{ "success": false, "message": "错误信息" }
通过URL识别图片文本
- URL:
/ocr/url - 方法:
POST - 请求体:
application/json格式,包含一个名为imgUrl的字段,值为图片的URL地址。
- 响应体:
application/json格式,包含识别结果。- 成功示例:
{ "success": true, "message": "OCR识别成功", "result": "识别到的文本内容" } - 失败示例:
{ "success": false, "message": "错误信息" }
Java客户端示例
工具类封装
以下是一个简单的Java客户端示例,用于调用本项目的HTTP接口:
import org.springframework.core.io.FileSystemResource;
import org.springframework.http.*;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
public class UmiOcrTools {
private final RestTemplate restTemplate = new RestTemplate();
private String ocrServiceUrl;
public String getOcrServiceUrl() {
return ocrServiceUrl;
}
public void setOcrServiceUrl(String ocrServiceUrl) {
this.ocrServiceUrl = ocrServiceUrl;
}
private UmiOcrTools() {}
public static UmiOcrTools getInstance(String ocrServiceUrl) {
UmiOcrTools instance = new UmiOcrTools();
instance.setOcrServiceUrl(ocrServiceUrl);
return instance;
}
public String recognizeTextFromFile(File file) {
try {
if (!file.exists()) {
throw new RuntimeException("文件不存在: " + file.getAbsolutePath());
}
// 设置请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
// 创建文件资源
FileSystemResource fileResource = new FileSystemResource(file);
// 构建请求体
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
body.add("file", fileResource);
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
// 发送请求
ResponseEntity<String> response = restTemplate.postForEntity(
ocrServiceUrl + "/ocr/upload",
requestEntity,
String.class
);
return parseOcrResponse(response);
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
private String parseOcrResponse(ResponseEntity<String> response) {
try {
if (response.getStatusCode().is2xxSuccessful()) {
return response.getBody();
} else {
return "";
}
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
public String recognizeImageUrl(String imageUrl) {
try {
Map<String, String> request = new HashMap<>();
request.put("imgUrl", imageUrl);
ResponseEntity<String> response = restTemplate.postForEntity(
ocrServiceUrl + "/ocr/url",
request,
String.class
);
if (response.getStatusCode() == HttpStatus.OK) {
return parseOcrResponse(response);
}
return "";
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
}
使用示例
@Test
public void test21() {
String ocrServiceUrl = "http://localhost:3000";
String url = "http://localhost:8988/profile/b.jpg";
String text = UmiOcrTools.getInstance(ocrServiceUrl).recognizeImageUrl(url);
System.out.println(text);
System.out.println("=======================");
File file = new File("D:\\temp\\upload\\shop\\a.jpg");
String text2 = UmiOcrTools.getInstance(ocrServiceUrl).recognizeTextFromFile(file);
System.out.println(text2);
}
输出结果
{"success":true,"message":"OCR识别成功","result":"姓名zsl\r\n性别男民族汉\r\n址\r\n云南*****222号\r\n公民身份号码\r\n5***315\r\n"}
=======================
{"success":true,"message":"OCR识别成功","result":"测试字符串\nabcd"}
(双击zsl_http_ocr.exe即可启动http服务)
如有需要可加此微信索取zsl_http_ocr.exe的整体压缩包。添加时请备注ocr。