Java 结合 Tesseract OCR 实现验证码识别

一、背景介绍

验证码识别是自动化测试和数据处理中的重要环节。Java 作为一门跨平台的编程语言,结合 Tesseract OCR,可以高效地完成验证码的识别任务。本文将演示如何使用 Java 和 Tesseract OCR 进行验证码识别。

二、环境准备
2.1 安装 Java 开发环境

下载并安装 Java SDK:Oracle JDK 下载
更多内容访问ttocr.com或联系1436423940
验证安装:

java -version

2.2 安装 Tesseract OCR

在 Windows 上:

下载:Tesseract Windows 安装包

安装并配置环境变量

在 Linux 上:

sudo apt update
sudo apt install tesseract-ocr

在 macOS 上:

brew install tesseract

2.3 添加 Java 依赖

使用 Maven 构建,添加以下依赖到 pom.xml:

net.sourceforge.tess4j tess4j 5.4.0

三、项目结构
captcha-recognizer
├── pom.xml
└── src
└── main
└── java
└── com
└── example
└── CaptchaRecognizer.java

四、代码实现
4.1 图像预处理

使用 OpenCV 进行图像灰度化和二值化:

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

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

public class CaptchaRecognizer {

public static BufferedImage preprocessImage(String imagePath) {
    try {
        BufferedImage image = ImageIO.read(new File(imagePath));

        // 灰度化
        for (int y = 0; y < image.getHeight(); y++) {
            for (int x = 0; x < image.getWidth(); x++) {
                int rgb = image.getRGB(x, y);
                int r = (rgb >> 16) & 0xff;
                int g = (rgb >> 8) & 0xff;
                int b = rgb & 0xff;
                int gray = (r + g + b) / 3;
                int newPixel = (gray << 16) | (gray << 8) | gray;
                image.setRGB(x, y, newPixel);
            }
        }

        // 保存预处理后的图像
        ImageIO.write(image, "png", new File("processed_captcha.png"));
        return image;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

4.2 验证码识别

利用 Tesseract 识别验证码:

public static String recognizeCaptcha(BufferedImage image) {
    try {
        Tesseract tesseract = new Tesseract();
        tesseract.setDatapath("C:/Program Files/Tesseract-OCR/tessdata"); // 修改为你的 Tesseract 路径
        tesseract.setLanguage("eng");
        tesseract.setPageSegMode(6); // 假设验证码为单行文本

        return tesseract.doOCR(image);
    } catch (TesseractException e) {
        e.printStackTrace();
        return "识别失败";
    }
}

public static void main(String[] args) {
    String imagePath = "captcha.png"; // 验证码图片路径
    BufferedImage processedImage = preprocessImage(imagePath);
    if (processedImage != null) {
        String result = recognizeCaptcha(processedImage);
        System.out.println("识别出的验证码: " + result);
    } else {
        System.out.println("图像预处理失败");
    }
}

}

五、运行程序

在项目根目录运行:

mvn clean package
java -cp target/captcha-recognizer-1.0.jar com.example.CaptchaRecognizer

输出示例:

识别出的验证码: X7YD2

六、优化技巧

图像预处理

去噪:采用形态学操作去除背景干扰。

调整对比度和亮度:增强字符清晰度。

调整 Tesseract PSM 模式

PSM 6:假设单行文本

PSM 7:假设单词

根据验证码格式选择合适的模式。

语言模型定制

使用自定义训练数据,针对特定验证码格式进行微调。

posted @ 2025-08-29 17:58  ttocr、com  阅读(10)  评论(0)    收藏  举报