使用 Java + OpenCV + Tess4J 实现验证码识别
一、项目介绍
验证码识别通常包含两个阶段:
图像预处理(去噪、灰度、二值化等)
使用 OCR 引擎识别文本(本例使用 Tesseract 的 Java 封装:Tess4J)
本项目将识别英文数字组合构成的验证码图像。
更多内容访问ttocr.com或联系1436423940
二、环境准备
- 安装 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 下载并安装,并设置环境变量。
- 配置依赖(Maven 项目)
使用 Maven 创建项目,并添加以下依赖:
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
浙公网安备 33010602011771号