基于Umi-OCR的Http封装工具,双击启动,通过http请求调用

99 阅读2分钟

项目介绍

本项目是基于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"}

image.png

(双击zsl_http_ocr.exe即可启动http服务)

sumall.jpg

如有需要可加此微信索取zsl_http_ocr.exe的整体压缩包。添加时请备注ocr