使用 Kotlin + Tess4J 实现英文数字验证码识别
在这篇文章中,我们将使用 Kotlin 编写一个简单程序,通过 OCR 技术识别图像中的英文数字验证码。借助 Tess4J,我们可以轻松集成 Tesseract OCR 引擎。
一、环境准备
- 安装 Tesseract OCR
Windows:从 Tesseract 官网 下载并安装
macOS:使用 brew install tesseract
Linux:使用 sudo apt install tesseract-ocr
确保将 Tesseract 安装路径加入系统环境变量中。
- 创建 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 应用
自定义字体训练模型提升识别率
浙公网安备 33010602011771号