Spring Boot 3.3 + Tesseract 实现从图片中提取文本

在 Spring Boot 3.3 中,结合 OCR(光学字符识别)技术,你可以实现从图片中提取文本的功能。这对很多应用场景非常有用,比如文档处理、数据录入、信息检索等。以下是如何在 Spring Boot 3.3 中集成 OCR 技术并实现图片文本识别的详细指南。

首先,你需要选择一个 OCR 库。Tesseract 是一个流行的开源 OCR 引擎。你可以使用 Tesseract 的 Java 封装库,如 Tess4J,来集成到 Spring Boot 项目中。

添加Tess4J依赖

pom.xml 中添加 Tess4J 的依赖:

<dependency>
    <groupId>net.sourceforge.tess4j</groupId>
    <artifactId>tess4j</artifactId>
    <version>4.5.6</version> <!-- 使用适合的版本 -->
</dependency>

下载 Tesseract OCR 的二进制文件,并配置环境变量。你可以从 Tesseract 的 GitHub 页面 获取适合你操作系统的版本。

创建OCR服务

创建一个服务类来实现 OCR 功能。这个服务类将利用 Tess4J 库来识别图片中的文本。

@Service
public class OcrService {

    private final ITesseract tesseract;

    public OcrService() {
        this.tesseract = new Tesseract();
        // 设置 Tesseract OCR 训练数据的路径
        this.tesseract.setDatapath("/path/to/tessdata");
    }

    public String extractTextFromImage(File imageFile) {
        try {
            return tesseract.doOCR(imageFile);
        } catch (TesseractException e) {
            throw new RuntimeException("OCR processing failed", e);
        }
    }
}

创建API

创建一个 REST 控制器来接收上传的图片并返回识别出的文本。

@RestController
@RequestMapping("/api/ocr")
public class OcrController {

    private final OcrService ocrService;

    public OcrController(OcrService ocrService) {
        this.ocrService = ocrService;
    }

    @PostMapping("/extract-text")
    public String extractText(@RequestParam("file") MultipartFile file) {
        try {
            // 将 MultipartFile 保存为临时文件
            File tempFile = File.createTempFile("upload-", file.getOriginalFilename());
            file.transferTo(tempFile);

            // 使用 OCR 服务提取文本
            String extractedText = ocrService.extractTextFromImage(tempFile);

            // 删除临时文件
            tempFile.delete();

            return extractedText;
        } catch (IOException e) {
            throw new RuntimeException("File processing failed", e);
        }
    }
}

配置应用

确保你的 Spring Boot 应用能够访问 Tesseract 的二进制文件和训练数据。你可以通过配置文件设置 Tesseract 的路径:

tesseract:
  datapath: /path/to/tessdata

然后在 OcrService 中读取这个配置:

@Service
public class OcrService {

    private final ITesseract tesseract;

    public OcrService(@Value("${tesseract.datapath}") String datapath) {
        this.tesseract = new Tesseract();
        this.tesseract.setDatapath(datapath);
    }

    // 其他方法不变
}

测试验证

使用 Postman 或其他工具上传图片文件,测试 API 是否能正确识别图片中的文本。确保图片清晰且包含易于识别的文本,以获得最佳结果。

总结

结合 Spring Boot 3.3 和 OCR 技术,你可以轻松实现从图片中提取文本的功能。通过引入 Tess4J、配置 OCR 服务和创建 REST API,你能够在应用中实现强大的文本识别功能。这对于各种需要从图片中提取数据的场景来说,都是一种高效的解决方案。希望这个指南能够帮助你快速上手并集成 OCR 功能。

来源:https://mp.weixin.qq.com/s/t6BWlWgqz6CQbrt2KxKrgw

 

请登录后发表评论

    没有回复内容