当前位置: 首页 > news >正文

使用 Java 解析验证码:结合 Tesseract OCR 进行文本识别

更多内容访问ttocr.com或联系1436423940

  1. 环境准备
    1.1 安装 Java

如果尚未安装 Java,可前往 Oracle 官方网站
或 Adoptium
下载最新版本的 JDK。安装完成后,运行以下命令检查版本:

java -version

1.2 安装 Tesseract OCR
Windows

从 Tesseract GitHub
下载并安装。安装完成后,记得将 tesseract.exe 目录添加到环境变量。

Linux(Ubuntu)
sudo apt update
sudo apt install tesseract-ocr libtesseract-dev

macOS(Homebrew)
brew install tesseract

安装完成后,检查 Tesseract 是否安装成功:

tesseract --version

1.3 添加 Tesseract Java 库

在 Java 代码中使用 Tesseract OCR,我们需要使用 Tess4J,它是 Tesseract 的 Java 封装库。

如果使用 Maven,请在 pom.xml 中添加以下依赖:

net.sourceforge.tess4jtess4j4.5.5

如果使用 Gradle,请在 build.gradle 中添加:

dependencies {
implementation 'net.sourceforge.tess4j:tess4j:4.5.5'
}

  1. Java 代码实现

创建 CaptchaReader.java,写入以下代码:

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

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

public class CaptchaReader {

public static void main(String[] args) {String imagePath = "captcha.png"; // 替换为你的验证码图片路径// 预处理验证码String processedImagePath = "processed_captcha.png";preprocessImage(imagePath, processedImagePath);// 使用 Tesseract 进行 OCR 识别ITesseract tesseract = new Tesseract();tesseract.setDatapath("tessdata"); // Tesseract 语言数据路径tesseract.setLanguage("eng"); // 设置语言try {String result = tesseract.doOCR(new File(processedImagePath));System.out.println("识别出的验证码: " + result.trim());} catch (TesseractException e) {System.err.println("OCR 识别失败: " + e.getMessage());}
}/*** 预处理验证码图像,提高 OCR 识别率*/
public static void preprocessImage(String inputPath, String outputPath) {try {BufferedImage image = ImageIO.read(new File(inputPath));// 转换为灰度图像BufferedImage grayImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_BYTE_GRAY);Graphics g = grayImage.getGraphics();g.drawImage(image, 0, 0, null);g.dispose();// 二值化处理for (int x = 0; x < grayImage.getWidth(); x++) {for (int y = 0; y < grayImage.getHeight(); y++) {int rgb = grayImage.getRGB(x, y);int gray = (rgb >> 16) & 0xFF;grayImage.setRGB(x, y, (gray > 128) ? Color.WHITE.getRGB() : Color.BLACK.getRGB());}}// 保存处理后的图片ImageIO.write(grayImage, "png", new File(outputPath));} catch (IOException e) {System.err.println("图像处理失败: " + e.getMessage());}
}

}

  1. 代码解析
    3.1 图像预处理

为了提高 OCR 识别率,代码对验证码进行以下优化:

转换为灰度图像,去除颜色干扰:

BufferedImage grayImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_BYTE_GRAY);

二值化处理,增强对比度:

int gray = (rgb >> 16) & 0xFF;
grayImage.setRGB(x, y, (gray > 128) ? Color.WHITE.getRGB() : Color.BLACK.getRGB());

保存处理后的图片,方便后续 OCR 识别:

ImageIO.write(grayImage, "png", new File(outputPath));

3.2 OCR 识别

创建 Tesseract 实例

ITesseract tesseract = new Tesseract();

设置 OCR 语言

tesseract.setLanguage("eng");

执行 OCR 解析

String result = tesseract.doOCR(new File(processedImagePath));

  1. 运行程序

确保 captcha.png 放在程序目录下,然后运行:

javac -cp .:tess4j.jar CaptchaReader.java
java -cp .:tess4j.jar CaptchaReader

如果使用 Maven,则运行:

mvn compile exec:java -Dexec.mainClass="CaptchaReader"

示例输出:

识别出的验证码: X7G9H

  1. 提高 OCR 识别率
    5.1 选择不同的 Tesseract PSM 模式
    tesseract.setPageSegMode(6); // 单行文本模式

5.2 限制识别字符集
tesseract.setTessVariable("tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");

5.3 使用更强的验证码处理

如果验证码干扰较多,可以使用 OpenCV 进行形态学处理,例如去除噪点、字符分割等。

http://www.hskmm.com/?act=detail&tid=40787

相关文章:

  • 代码大全2阅读笔记(2)
  • 软件技术基本第二次作业
  • Day7CSS的引入方式与选择器
  • ZR-J 2025-10-29 比赛总结
  • newDay17
  • 做题日志3
  • 《代码大全2》观后感-理论与现实的桥梁
  • AI元人文架构:从价值计算到智能主体的演进路径
  • 《代码大全2》观后感-从“码农”到“工匠”的第一课
  • 从零开始编写一个办公软件(二、自适应窗口)
  • 10月29日日记
  • AI浪潮下的职业迷思:机遇还是泡沫?
  • 10/29
  • 静态类型、动态类型、强类型、弱类型
  • 价值主体的技术实现:基于Free Transformer潜变量Z的AI元人文架构探索
  • pyqt 自定义QTableWidget
  • 查询排序与表连接
  • 记录一下我最近一年写的脚本,不知不觉近100个了!
  • The 2025 Hunan Collegiate Programming Contest
  • 第二十二天
  • 2025.10.28
  • 日总结 20
  • 重组蛋白与传统蛋白的区别:从来源到特性的全面解析
  • CSP-S 2025 游记
  • NordicNRF91系列蜂窝产品在偏远地区低轨道卫星物联网连接领域取得关键突破
  • Windows Server 2025镜像下载地址
  • 博客园geek主题拓展-1
  • 2025年10月临江鳝丝店推荐:乐山地区五家优质店铺榜单与对比分析
  • vs2022(2026)离线安装失败的问题解决
  • 家训