侧边栏壁纸
  • 累计撰写 154 篇文章
  • 累计收到 0 条评论

Java + Tesseract 实现图片验证码识别

2025-4-23 / 0 评论 / 15 阅读

在实际开发中,很多网页都采用验证码防止机器人自动提交表单。如果我们希望通过自动化脚本处理这些网页,就需要一种方法来“读懂”验证码。Tesseract 是目前最主流的开源 OCR(Optical Character Recognition,光学字符识别)引擎之一。今天我们将通过 Java 调用 Tesseract,实现从验证码图片中提取文字的全过程。

准备工作\

  1. 安装 Tesseract 你可以从 Tesseract 官方 GitHub 下载对应平台的版本。安装完成后,确保将 tesseract 命令添加到环境变量中。
  2. 获取 tess4j tess4j 是 Java 调用 Tesseract 的桥梁。通过 Maven 添加依赖:

net.sourceforge.tess4j tess4j 5.4.0

代码实现步骤

  1. OCR 识别核心类

import net.sourceforge.tess4j.ITesseract; import net.sourceforge.tess4j.Tesseract; import net.sourceforge.tess4j.TesseractException;

import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File;

public class CaptchaReader {

public static String extractTextFromImage(String imagePath) {
    File imageFile = new File(imagePath);
    ITesseract tesseract = new Tesseract();

    // 设置语言包目录
    tesseract.setDatapath("tessdata");
    // 设置识别语言
    tesseract.setLanguage("eng");
    // 可选:设置页面分割模式为“单行文本”
    tesseract.setPageSegMode(7);

    try {
        BufferedImage image = ImageIO.read(imageFile);
        String result = tesseract.doOCR(image);
        return result.replaceAll("\\s+", ""); // 去除空白字符
    } catch (Exception e) {
        e.printStackTrace();
        return "识别失败";
    }
}

} 2. 简单测试类

public class Main { public static void main(String[] args) { String result = CaptchaReader.extractTextFromImage("src/main/resources/captcha.png"); System.out.println("识别结果: " + result); } } 🧪 测试效果 图片内容:W8K5X

识别结果输出:W8K5X

识别准确率高时,说明验证码样式简单,无需复杂处理。如果识别出现偏差,可以尝试下面的增强处理。

图像预处理建议 验证码图片如果有干扰线或背景杂色,建议使用如下图像预处理方式提升识别效果:

灰度化处理:将彩色图像转为灰度图。

二值化处理:将图像中每个像素转为黑或白。

图像锐化:增强字符边缘。

缩放图像:适当放大图像,提升字符清晰度。

这些可通过 Java 的 BufferedImage 搭配像素级处理或 OpenCV Java 版实现。