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

news/2025/1/8 13:06:27/文章来源:https://www.cnblogs.com/ocr12/p/18659505

我们将通过 Kotlin 编写代码,结合 Tesseract OCR 来识别验证码中的数字。首先,您需要安装一些依赖库,如 Tesseract OCR 和图像处理库。

  1. 安装所需依赖
    首先,确保您的机器上已经安装了 Tesseract OCR,并且已经配置了 Java 环境。然后,在 Kotlin 中,您需要使用 tesseract 的 Java 包:

gradle

// build.gradle (Kotlin 项目) dependencies { implementation 'net.sourceforge.tess4j:tess4j:4.5.3' }

  1. 代码实现
    下面是一个简单的 Kotlin 程序,展示如何通过 Tesseract OCR 识别英文数字验证码:

kotlin

import net.sourceforge.tess4j.ITesseract import net.sourceforge.tess4j.Tesseract import net.sourceforge.tess4j.util.ImageHelper import java.awt.image.BufferedImage import javax.imageio.ImageIO import java.io.File // 图像预处理函数:转换为灰度图像,增强对比度 fun preprocessImage(inputFilePath: String, outputFilePath: String) { val image: BufferedImage = ImageIO.read(File(inputFilePath)) // 将图像转为灰度图像 val grayscaleImage = BufferedImage(image.width, image.height, BufferedImage.TYPE_BYTE_GRAY) val g = grayscaleImage.createGraphics() g.drawImage(image, 0, 0, null) g.dispose() // 保存预处理后的图像 ImageIO.write(grayscaleImage, "png", File(outputFilePath)) println("图像预处理完成,保存至:$outputFilePath") } // 使用 Tesseract 识别验证码 fun recognizeCaptcha(imagePath: String): String { val tess: ITesseract = Tesseract() // 设置 Tesseract 的语言为英文 tess.setLanguage("eng") try { val image: BufferedImage = ImageIO.read(File(imagePath)) return tess.doOCR(image) } catch (e: Exception) { println("识别过程出现错误: ${e.message}") return "" } } // 主程序 fun main() { val inputImagePath = "captcha_image.png" val processedImagePath = "processed_captcha.png" // 图像预处理 preprocessImage(inputImagePath, processedImagePath) // 使用 Tesseract 识别验证码 val result = recognizeCaptcha(processedImagePath) // 输出识别结果 println("识别结果:$result") }

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

我们将输入图像转换为灰度图像,这可以帮助 OCR 更容易地识别文本。Kotlin 中使用 BufferedImage 来操作图像。
我们通过 createGraphics() 来创建一个图形对象,然后将图像渲染到新的灰度图像中。
处理后的图像保存为 processed_captcha.png。
验证码识别:

我们创建了 Tesseract 实例,并设置其语言为英文(setLanguage("eng"))。
使用 tess.doOCR(image) 方法进行 OCR 识别。
主程序:

先对图像进行预处理,之后调用 recognizeCaptcha 方法进行识别。
最后输出识别的结果。
4. 运行示例
假设我们有一个包含英文数字的验证码图像 captcha_image.png,运行以下命令来识别该验证码:

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

kotlin CaptchaRecognizerKt

程序将输出类似如下内容:

图像预处理完成,保存至:processed_captcha.png 识别结果:1234

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

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

相关文章

BOS或客户端清理服务器设置历史记录

1、客户端服务器设置中“清除全部记录”2、反编译Kingdee.BOS.IDE.exe, 查找配置文件修改, C:\Users\HUAXIN\Documents\Kingdee\K3Cloud\LoginInfo.xml

R语言系列—R语言简介及安装

同学们,大家好,今天开始开设一个新系列,R语言系列,对生信分析中涉及到的R语言代码及R语言绘图进行详细讲解,感兴趣的同学可以重点关注一下。 什么是R语言?R语言是用于统计分析、绘图的语言和操作环境。R语言是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用…

146. LRU 缓存(中)

目录题目法一、Map法二、双向链表 题目法一、Map对于超出容量时,删除最久未使用的关键字:在进行put和get时,只要存在就先删再重新放入map,保证了最久未使用的关键字处于map的第一个/*** @param {number} capacity*/ var LRUCache = function(capacity) {this.capacity = ca…

Linux使用dmidecode来查看机器有几根内存插槽,哪个槽上有内存

直接输入dmidecode即可,输出有很多,好像是根据SM总线来查询的,包括能查询到BIOS的地址空间和其中的信息等等,内存信息只是其中的一部分。摘录如下: dmidecode -t memory从这段输出可以看出,第一个Physical Memory Array是总体的内存信息,从这里可以看到有四个内存插槽、…

告别混乱!电商新年团队协作工具助你轻松应战

新年期间电商团队面临着巨大的工作量,而看板软件凭借其任务的可视化与分配、进度的实时跟踪与更新、沟通与协作的强化、个性化与定制化的满足以及多平台支持与便捷的移动办公等功能,成为了团队高效协作与沟通的得力助手,确保了电商业务在新年期间的平稳运行。看板软件凭借其…

整车电性能测试服务及设备开发

随着车辆电气化程度越来越高,整车电气系统面对更加严苛的工作环境,如何保障整车的电气可靠性越来越得到主机厂的关注。整车电性能测试是汽车电气系统开发过程中的一个关键环节,经纬恒润结合多年的整车电气工程经验,深度分解“整车-系统-子系统-部件-信号”等多个级别的性能…

springboot+shardingsphere实现读写分离和分表

参考:https://blog.csdn.net/weixin_44606481/article/details/140955787 前提:数据库配置了主从数据同步 1、依赖 <dependencies><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boo…

uniapp 荣耀手机 没有检测到设备 运行到Android手机 真机运行

背景: 使用uniapp框架搭建的项目,开发的时候在浏览器运行,因为项目要打包成App,所以需要真机联调,需要运行到Android手机,在手机上查看/运行项目。通过真机调试才能确保软件开发的准确性和页面显示的完整性。操作步骤:1.Usb连接手机和电脑,电脑上的HbuilderX打开项目;…

DC-5 靶场通关小记

rustscan端口扫描指纹识别、LFI漏洞+文件包含(nginx日志)GetShell、screen-4.5.0提权地址 https://www.vulnhub.com/entry/dc-5,314/环境配置 有兼容性问题参考 https://www.cnblogs.com/lrui1/p/18655388 信息收集 ./rustscan -a 192.168.74.130 -- -A -sC Open 192.168.74.13…

ABB IRB5500喷涂机械手维修细节查看

ABB IRB5500喷涂机器人的控制柜常见故障表现形式主要包括以下几种:1、控制柜不能启动:可能原因包括电源故障、控制电路板损坏、保险丝烧断等。处理方法包括检查电源是否正常、控制电路板是否有损坏迹象、保险丝是否烧断等。 2、abb涂装机械手控制柜报错或异常:可能原因包括…

新年新机遇:跨境电商选品策略大揭秘

跨境电商在进行新年选品时,需要综合考虑市场调研、竞争对手分析、品牌选择、价格定位、物流考虑、汇率研究、多元化产品线以及节日和特殊事件等多个因素。通过精心策划和准备,可以确保所选产品在新年期间取得良好的销售业绩。在进行跨境电商新年选品时,需要考虑多个因素以确…

年度重磅 |《2024华为开发者宝典》免费下载,多维度解读华为根生态技术

摘要:20多位华为云DTSE专家打造,10+技术领域全覆盖,图文干货+视频讲解,多维度解读华为根生态技术,拥抱技术变革,开启创新之旅。 一年一度!大家最期待的华为开发者宝典新鲜出炉!在刚刚过去的2024年,华为云开发者联盟通过25场精彩的DTSE Tech Talk直播活动,为广大开发者…