Java 实战:构建一个验证码识别微服务

在后台管理系统、数据采集任务中,经常会遇到验证码拦截自动化操作。为了解决这个问题,我们可以使用 Java 构建一个轻量级的验证码识别微服务,供多个应用调用,从而实现验证码的自动化识别。

一、技术选型
Java 17:现代 Java 开发环境,支持更强的性能优化。

Spring Boot:构建微服务框架,方便快速启动 HTTP 服务。

Tess4J:Tesseract OCR 的 Java 封装,用于图像文字识别。

Maven:依赖管理和构建工具。

二、项目结构概览

captcha-ocr-service/
├── src/
│ └── main/
│ ├── java/
│ │ └── com.example.ocr/
│ │ ├── CaptchaController.java
│ │ ├── CaptchaService.java
│ │ └── ImageUtils.java
│ └── resources/
│ └── application.yml
└── pom.xml
三、核心功能实现

  1. ImageUtils.java:图像处理

public class ImageUtils {
public static BufferedImage preprocess(BufferedImage image) {
BufferedImage gray = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
Graphics2D g = gray.createGraphics();
g.drawImage(image, 0, 0, null);
g.dispose();
return gray;
}
}
2. CaptchaService.java:验证码识别逻辑

@Service
public class CaptchaService {
public String recognize(BufferedImage image) throws TesseractException {
ITesseract tesseract = new Tesseract();
tesseract.setDatapath("tessdata"); // 放置 tessdata 文件夹的位置
tesseract.setLanguage("eng");
tesseract.setPageSegMode(7);
tesseract.setTessVariable("tessedit_char_whitelist", "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
return tesseract.doOCR(ImageUtils.preprocess(image)).replaceAll("\s+", "");
}
}
3. CaptchaController.java:上传接口

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

@Autowired
private CaptchaService captchaService;

@PostMapping("/captcha")
public ResponseEntity<String> recognizeCaptcha(@RequestParam("file") MultipartFile file) throws IOException, TesseractException {
    BufferedImage image = ImageIO.read(file.getInputStream());
    String result = captchaService.recognize(image);
    return ResponseEntity.ok(result);
}

}
四、配置文件 application.yml

server:
port: 8081
spring:
servlet:
multipart:
max-file-size: 2MB
max-request-size: 2MB
五、运行项目
启动 Spring Boot 项目

使用 curl 或 Postman 测试上传图片:

curl -F "file=@captcha.png" http://localhost:8081/api/ocr/captcha
六、进一步优化
部署为 Docker 容器,方便在各个环境中运行

增加日志与错误处理逻辑

添加缓存机制避免重复识别同一图像

为特定验证码场景训练自定义 Tesseract 模型

posted @ 2025-04-23 19:08  ttocr、com  阅读(10)  评论(0)    收藏  举报