使用 Kotlin + Tess4J 实现英文数字验证码识别

在这篇文章中,我们将使用 Kotlin 编写一个简单程序,通过 OCR 技术识别图像中的英文数字验证码。借助 Tess4J,我们可以轻松集成 Tesseract OCR 引擎。

一、环境准备

  1. 安装 Tesseract OCR
    Windows:从 Tesseract 官网 下载并安装

macOS:使用 brew install tesseract

Linux:使用 sudo apt install tesseract-ocr

确保将 Tesseract 安装路径加入系统环境变量中。

  1. 创建 Kotlin 项目(使用 IntelliJ IDEA 或 Gradle)
    编辑 build.gradle.kts 文件,添加 Tess4J 依赖:

dependencies {
implementation("net.sourceforge.tess4j:tess4j:5.5.1")
}
二、编写识别程序
创建 CaptchaRecognizer.kt 文件:

import net.sourceforge.tess4j.Tesseract
import java.io.File
import javax.imageio.ImageIO

fun main() {
val imageFile = File("captcha.png")
val grayFile = File("gray_captcha.png")

// 简单灰度处理
val original = ImageIO.read(imageFile)
val grayImage = java.awt.image.BufferedImage(original.width, original.height, java.awt.image.BufferedImage.TYPE_BYTE_GRAY)
val g = grayImage.createGraphics()
g.drawImage(original, 0, 0, null)
g.dispose()
ImageIO.write(grayImage, "png", grayFile)

// 初始化 Tesseract OCR
val tesseract = Tesseract()
tesseract.setDatapath("tessdata")  // 确保此目录包含 eng.traineddata
tesseract.setLanguage("eng")
tesseract.setTessVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
tesseract.setPageSegMode(8) // 适合验证码等单行文本

val result = tesseract.doOCR(grayFile)
println("识别的验证码是: ${result.trim()}")

}更多内容访问ttocr.com或联系1436423940
三、准备数据
下载并解压 eng.traineddata 至 tessdata/ 目录(和项目在同一层)

可从 https://github.com/tesseract-ocr/tessdata 获取

将验证码图片命名为 captcha.png 放入项目根目录

四、运行程序
使用 IntelliJ 或命令行运行:

./gradlew run
示例输出:

识别的验证码是: 8V7XQ
五、进阶优化建议
添加图像二值化、去噪处理(可使用 OpenCV 或 Marvin Image Processing)

打包为 Kotlin CLI 工具或 Android 应用

自定义字体训练模型提升识别率

posted @ 2025-04-11 19:03  ttocr、com  阅读(32)  评论(0)    收藏  举报