使用 Java + OpenCV + Tess4J 实现验证码识别

一、项目介绍
验证码识别通常包含两个阶段:

图像预处理(去噪、灰度、二值化等)

使用 OCR 引擎识别文本(本例使用 Tesseract 的 Java 封装:Tess4J)

本项目将识别英文数字组合构成的验证码图像。
更多内容访问ttocr.com或联系1436423940
二、环境准备

  1. 安装 Java 开发环境
    建议使用 JDK 8 或以上。可在命令行验证:

java -version
2. 安装 Tesseract OCR
Ubuntu:sudo apt install tesseract-ocr

macOS:brew install tesseract

Windows:从 https://github.com/tesseract-ocr/tesseract 下载并安装,并设置环境变量。

  1. 配置依赖(Maven 项目)
    使用 Maven 创建项目,并添加以下依赖:
net.sourceforge.tess4j tess4j 5.4.0 org.openpnp opencv 4.5.1-2 三、图像识别核心代码 创建 CaptchaRecognizer.java:

import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

import java.io.File;

public class CaptchaRecognizer {

static {
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}

public static void main(String[] args) {
    String inputPath = "captcha.png";
    String processedPath = "processed.png";

    // Step 1: 图像预处理
    Mat src = Imgcodecs.imread(inputPath);
    Mat gray = new Mat();
    Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
    Imgproc.threshold(gray, gray, 120, 255, Imgproc.THRESH_BINARY);

    Imgcodecs.imwrite(processedPath, gray);

    // Step 2: OCR 识别
    Tesseract tesseract = new Tesseract();
    tesseract.setDatapath("tessdata"); // 替换为本地 tessdata 路径
    tesseract.setLanguage("eng");
    tesseract.setTessVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
    tesseract.setPageSegMode(7); // 单行识别

    try {
        String result = tesseract.doOCR(new File(processedPath));
        String clean = result.replaceAll("[^A-Za-z0-9]", "");
        System.out.println("识别出的验证码为: " + clean);
    } catch (TesseractException e) {
        System.err.println("识别失败: " + e.getMessage());
    }
}

}
四、运行示例
将 captcha.png 放在项目根目录,确保图像中字符清晰、背景干净。

运行输出示例:

识别出的验证码为: X4Z9K

posted @ 2025-07-04 19:01  ttocr、com  阅读(73)  评论(0)    收藏  举报