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

验证码自动识别:使用 Java 和 Tesseract OCR 实现

验证码(CAPTCHA)用于防止机器人自动提交数据,但在自动化测试、数据采集等场景中,我们可能需要自动识别验证码。本文将介绍如何使用 Java 结合 Tesseract OCR 解析验证码,并优化识别准确度。

  1. 环境准备

在开始编写代码之前,我们需要安装 Java 和 Tesseract OCR。
更多内容访问ttocr.com或联系1436423940
1.1 安装 Java

如果尚未安装 Java,可以前往 Oracle 官网
或 AdoptOpenJDK
下载并安装最新版本。

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

java -version

1.2 安装 Tesseract OCR
Windows 用户

从 Tesseract OCR 官方 GitHub
下载 Windows 版本并安装。

配置环境变量,在 PATH 中添加 Tesseract 的安装路径,例如:C:\Program Files\Tesseract-OCR\。

Linux/macOS 用户

Ubuntu

sudo apt update && sudo apt install tesseract-ocr

macOS (使用 Homebrew)

brew install tesseract

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

tesseract --version

1.3 添加 Java 依赖库

在 Java 中使用 Tesseract OCR,需要使用 Tess4J 库。

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

net.sourceforge.tess4jtess4j4.5.5

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

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

  1. 代码实现

下面的 Java 代码示例展示了如何 加载验证码图像、进行预处理,并使用 Tesseract 进行 OCR 解析。

2.1 代码示例
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;
import java.io.IOException;

public class CaptchaRecognizer {

public static void main(String[] args) {// 指定验证码图片路径String imagePath = "captcha.png";  // 替换为你的验证码图片路径String result = recognizeCaptcha(imagePath);System.out.println("识别出的验证码: " + result);
}public static String recognizeCaptcha(String imagePath) {try {// 读取图像BufferedImage img = ImageIO.read(new File(imagePath));// 预处理图像(灰度化 + 二值化)BufferedImage processedImg = preprocessImage(img);// 初始化 Tesseract OCRITesseract tesseract = new Tesseract();tesseract.setDatapath("tessdata");  // 指定 Tesseract 语言数据目录tesseract.setLanguage("eng");  // 选择英文 OCR 模型tesseract.setTessVariable("tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); // 限制识别字符tesseract.setPageSegMode(6); // 适用于单行文本// 识别文本return tesseract.doOCR(processedImg).trim();} catch (IOException | TesseractException e) {e.printStackTrace();return null;}
}private static BufferedImage preprocessImage(BufferedImage img) {int width = img.getWidth();int height = img.getHeight();BufferedImage grayImg = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_BINARY);// 遍历每个像素,进行灰度化 + 二值化for (int x = 0; x < width; x++) {for (int y = 0; y < height; y++) {int rgb = img.getRGB(x, y);int gray = (rgb >> 16) & 0xff; // 取 R 通道作为灰度值if (gray > 128) {grayImg.setRGB(x, y, 0xFFFFFF); // 白色} else {grayImg.setRGB(x, y, 0x000000); // 黑色}}}return grayImg;
}

}

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

为了提高 OCR 识别率,我们对验证码图像进行了以下优化处理:

灰度化:提取验证码的亮度信息,去除颜色干扰。

二值化:将像素转换为黑白,使字符更加清晰可见。

Java 没有 OpenCV 这样强大的图像处理库,所以我们手动遍历像素进行灰度转换和二值化处理。

3.2 OCR 解析

Tesseract() 初始化 OCR 引擎。

setLanguage("eng") 设置 OCR 语言,默认使用 eng(英语)。

setTessVariable("tessedit_char_whitelist", "...") 限制可识别字符,避免误识别。

setPageSegMode(6) 使用 PSM 6 进行单行文本识别。

doOCR() 执行 OCR 解析,返回识别出的文本。

  1. 运行程序

将代码保存为 CaptchaRecognizer.java,并确保 captcha.png 在同一目录下,然后编译运行:

javac -cp ".;tess4j-4.5.5.jar" CaptchaRecognizer.java
java -cp ".;tess4j-4.5.5.jar" CaptchaRecognizer

程序会加载验证码图像,进行处理并输出识别结果。

  1. 提高验证码识别准确率
    5.1 选择合适的 PSM 模式

Tesseract 提供了不同的 页面分割模式(PSM),验证码通常使用 PSM 6 或 7:

tesseract.setPageSegMode(6); // 适用于单行文本

5.2 进一步图像优化

去除噪点:可以使用 OpenCV 或 Java Image Processing(JIP)进行噪声滤波。

字符分割:如果验证码字符粘连,可以尝试 轮廓检测 或 投影分割算法 提高单字符识别率。

5.3 采用深度学习 OCR 方案

如果 Tesseract 不能满足需求,可以考虑使用 深度学习 OCR,如:

EasyOCR(Python)

PaddleOCR(Python)

Google Vision API(云端 OCR)

http://www.sczhlp.com/news/78487/

相关文章:

  • 集团网站群建设方案黄骅港务
  • 南宁网站建设公司比优建站域名备案查询网
  • 做网站找哪家好思南安卓开发流程
  • 网站关键词符号贵州建网站报价
  • 有关做甜点的网站太仓做网站公司
  • 怎么做qq靓号网站徐州建站软件
  • 深圳制作网站培训学校网站克隆下来了然后再怎么做
  • 个人在国外网站做电商微信如何制作网页
  • 网站响应式和电脑手机做网站能赚到流量费吗
  • ARC181E Min and Max at the edge
  • 杭州网站定制门户网站建设哪家便宜
  • 星月教你做网站回顾文档无锡设计公司企业方面
  • 简述企业网站建设的目的小程序开发多少钱
  • 申请网站百度推广 个人网站
  • 如何给自己开发的网站加域名百度收录网站标题
  • 视频网址制作教程网站配置优化
  • 小公司网站开发营销网站建设汉狮电话
  • 网站建设怎么更换图片wordpress多博客
  • shell鸡兔同笼问题
  • 西宁设计网站网站后台管理系统密码
  • 上海网站建设设计培训信息
  • 什么是二级网站推广wordpress 百度云
  • 做网站需要哪些软件基层建设 官方网站
  • 几年做啥网站能致富上海企业自助建站
  • 理想单端校准件的反射系数
  • 公司做网站是com好还是cn好无代码开发平台 开源
  • 做网站需要哪些流程天津响应式网站建设
  • 上海尚海整装官方网站wordpress注册上面的logo
  • 一级网站和二级网站的区别近一周热点新闻
  • 吉安市建设规划局网站搭建平台网站有什么用