用 Kotlin 和 Tesseract OCR 实现验证码识别

news/2025/3/31 15:01:38/文章来源:https://www.cnblogs.com/ocr12/p/18798571

一、引言
在自动化测试和数据处理任务中,验证码识别是一项具有挑战性的任务。Kotlin 作为现代化的 JVM 语言,能够很好地与 Tesseract OCR 结合,快速完成验证码识别。
本文将演示如何使用 Kotlin 结合 Tesseract OCR 进行验证码识别,并进行图像预处理以提高识别率。

二、环境准备
2.1 安装 Kotlin
首先,确保本地安装了 Kotlin:

sdk install kotlin
kotlin -version
2.2 安装 Tesseract OCR
Linux (Ubuntu):

sudo apt update
sudo apt install tesseract-ocr libtesseract-dev
Windows:

下载 Tesseract Windows 版本。

配置环境变量。

macOS:

brew install tesseract
三、创建 Kotlin 项目
使用 Gradle 创建一个 Kotlin 项目:

mkdir captcha_ocr_kotlin
cd captcha_ocr_kotlin
gradle init --type application
3.1 配置 Gradle
编辑 build.gradle.kts 文件,添加依赖:
更多内容访问ttocr.com或联系1436423940
plugins {
kotlin("jvm") version "1.9.0"
application
}

repositories {
mavenCentral()
}

dependencies {
implementation("net.sourceforge.tess4j:tess4j:5.7.0")
}

application {
mainClass.set("MainKt")
}
四、Kotlin 代码实现
4.1 代码结构
加载验证码图像

图像预处理(灰度化、二值化)

使用 Tesseract 识别验证码

打印识别结果

4.2 代码示例
编辑 src/main/kotlin/Main.kt 文件:

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

fun preprocessImage(imagePath: String): BufferedImage {
val image = ImageIO.read(File(imagePath))
val grayImage = BufferedImage(image.width, image.height, BufferedImage.TYPE_BYTE_GRAY)

for (y in 0 until image.height) {for (x in 0 until image.width) {val rgb = image.getRGB(x, y)val r = (rgb shr 16) and 0xffval g = (rgb shr 8) and 0xffval b = rgb and 0xffval gray = (0.299 * r + 0.587 * g + 0.114 * b).toInt()val newPixel = (gray shl 16) or (gray shl 8) or graygrayImage.setRGB(x, y, newPixel)}
}val outputPath = "processed_captcha.png"
ImageIO.write(grayImage, "png", File(outputPath))
return grayImage

}

fun recognizeCaptcha(imagePath: String): String {
preprocessImage(imagePath)

val tesseract = Tesseract()
tesseract.setDatapath("/usr/share/tesseract-ocr/4.00/tessdata")
tesseract.setLanguage("eng")
tesseract.setPageSegMode(6)  // 假设为单行文本return try {val text = tesseract.doOCR(File("processed_captcha.png"))text.trim()
} catch (e: Exception) {"识别失败: ${e.message}"
}

}

fun main() {
val captchaPath = "captcha.png" // 替换为你的验证码图片路径
val result = recognizeCaptcha(captchaPath)
println("识别出的验证码: $result")
}
五、运行程序
构建并运行程序:

./gradlew run
六、优化识别率
6.1 更改 PSM 模式
Tesseract 支持不同的页面分割模式 (PSM),可以根据验证码特性调整:

tesseract.setPageSegMode(7) // 设为单个文本行
6.2 使用特定训练数据
如果验证码主要是数字或特定字符,可以指定语言为 eng+osd:

tesseract.setLanguage("eng+osd")
6.3 进一步图像优化
噪声去除:利用形态学操作去除干扰线。

字符放大:放大图像有助于提升 Tesseract 的识别率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/907246.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解惑:采购时亚克力板尺寸一般有多少?-郑州亚克力制品代加工-郑州水晶字logo代加工-亚克力切割雕刻-外协加工-委外加工-激光代加工-河南郑州-芯晨微纳(河南)

亚克力板的常规尺寸因生产厂家、用途和工艺(如挤出板或浇铸板)而有所不同,以下是常见的规格参考:厚度范围挤出板:通常为 1mm–10mm,部分厂家可生产更厚(如12mm、15mm)。 浇铸板:厚度范围更广,常见 1mm–50mm,特殊需求可定制更厚板材。常见标准厚度(单位:mm): 1、…

微服务引擎 MSE 及云原生 API 网关 2025 年 2 月产品动态

微服务引擎 MSE 及云原生 API 网关 2025 年 2 月产品动态

性能测试的基本理论

一、性能测试介绍 1、什么叫做性能测试?(1)通过某些工具或手段来检测软件的某些指标是否达到了要求,这就是性能测试 (2)指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试2、性能测试的时间?在功能测试完成后才能进行性能测试3、…

服务器备份资料,怎么给服务器备份资料

在数字化时代,服务器承载着企业大量的关键数据,从客户信息、业务文档到重要的应用程序和数据库,这些数据是企业运营和发展的核心资产。一旦数据丢失或损坏,可能会给企业带来严重的经济损失和业务中断风险。因此,给服务器备份资料成为了保障数据安全的关键举措。以下将详细…

免去繁琐的手动埋点,Gin 框架可观测性最佳实践

本文将着重介绍 Gin 框架官方推荐的几种可观测性方案并进行对比,从而得出 Gin 框架可观测性的最佳实践。作者:牧思 背景 在云原生时代的今天,Golang 编程语言越来越成为开发者们的首选,而对于 Golang 开发者来说,最著名的 Golang Web 框架莫过于 Gin [ 1] 框架了,Gin 框架…

深入浅出WPF命令系统之InputBinding(MouseBinding与KeyBinding)

之前的随笔中剖析了WPF命令系统的一部分,文中是通过CommandBinding或Binding两种方式将命令(ICommand)与Button控件关联,如下: 方式一,CommandBinding1 <Window.Resources>2 3 <RoutedCommand x:Key="MyTestCommand"/>4 5 </Window.Resou…

20241217 实验二《Python程序设计》实验报告

20241217 2024-2025-2 《Python程序设计》实验二报告 课程:《Python程序设计》 班级: 2412 姓名: 黄迅 学号:20241217 实验教师:王志强 实验日期:2025年3月26日 必修/选修: 公选课 一、实验内容 1.设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善; …

教师教学质量分析评价系统 A教育大模型

教师教学质量分析评价系统基于YOLOv12+RNN的深度学习算法,教师教学质量分析评价系统精准地检测到学生是否在玩手机、举手、睡觉、交头接耳、趴桌子、行走运动等行为。同时,该模型还能够捕捉学生的情绪表情,如开心、厌恶、愤怒、悲伤、沮丧、恐惧、无表情等。这些行为和表情数…

服务器数据备份方法,服务器数据备份方法推荐

在当今数字化浪潮中,服务器宛如企业运营的“数据心脏”,承载着海量核心数据。一旦数据丢失,企业可能面临难以估量的损失。从财务报表到客户信息,从业务文档到关键代码,这些数据的安全维系着企业的生命线。因此,选择有效的服务器数据备份方法,成为企业数据管理的重中之重…

nocoding-codes-xxt

// UserScript // @name 🐮ABC 网课助手|超星学习通|智慧树|🚀自动答题|▶️一键操作|🏆超全题库(每日更新、自动收录)|支持划词搜题 // @namespace oolikeABC // @version 3.2.3 // @author oolikeABC // @description 【🥇懒人操作】…