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

news/2025/1/7 9:30:25/文章来源:https://www.cnblogs.com/ocr12/p/18653280

Kotlin 是一种现代化的、跨平台的编程语言,尤其适合用于 Android 开发和服务端开发。通过结合 Kotlin 的图像处理和 OCR 库,可以实现验证码的识别功能。

  1. 项目准备
    所需依赖
    在 Kotlin 项目中,我们需要以下库:

Tess4J - 基于 Tesseract OCR 引擎的 Java 库,用于 OCR 功能。
OpenCV(可选) - 用于验证码图像的预处理。
配置 Gradle
在项目的 build.gradle 文件中添加以下依赖:

gradle

dependencies { implementation("net.sourceforge.tess4j:tess4j:5.4.0") implementation("org.bytedeco:opencv:4.8.0-1.5.8") }

  1. Kotlin 实现代码
    以下是一个使用 Kotlin 进行英文数字验证码识别的完整代码示例:

kotlin

import net.sourceforge.tess4j.Tesseract import net.sourceforge.tess4j.TesseractException import org.bytedeco.opencv.global.opencv_imgcodecs.* import org.bytedeco.opencv.global.opencv_imgproc.* import org.bytedeco.opencv.opencv_core.* fun main() { val imagePath = "captcha_image.png" // 验证码图片路径 // 图像预处理 val processedImagePath = preprocessImage(imagePath) // 调用 OCR 识别验证码 val captchaText = recognizeCaptcha(processedImagePath) // 输出识别结果 println("识别到的验证码是: $captchaText") } // 图像预处理函数 fun preprocessImage(imagePath: String): String { // 读取图像 val src = imread(imagePath, IMREAD_COLOR) // 转为灰度图 val gray = Mat() cvtColor(src, gray, COLOR_BGR2GRAY) // 二值化 val binary = Mat() threshold(gray, binary, 127.0, 255.0, THRESH_BINARY) // 保存处理后的图像 val processedImagePath = "processed_captcha.png" imwrite(processedImagePath, binary) return processedImagePath } // OCR 识别函数 fun recognizeCaptcha(imagePath: String): String { val tesseract = Tesseract() // 设置 Tesseract 数据路径和语言 tesseract.setDatapath("tessdata") // 确保 tessdata 文件夹存在并包含语言数据文件 tesseract.setLanguage("eng") // 设置识别语言为英文 return try { tesseract.doOCR(java.io.File(imagePath)) } catch (e: TesseractException) { e.printStackTrace() "识别失败" } }

  1. 代码解析

使用 OpenCV 库读取和处理图片。
转换为灰度图:减少颜色维度的干扰。
二值化处理:将灰度图像转换为黑白图,突出字符区域。

使用 Tess4J 调用 Tesseract OCR 引擎识别图片中的文字。
配置语言为英文(eng)。

调用图像预处理函数生成优化后的图片。
使用 OCR 识别预处理后的图片内容,并输出验证码。
4. 示例运行结果
假设图片内容为 K7XJ3,运行程序后,终端会输出:

makefile

识别到的验证码是: K7XJ3

  1. 文件结构

plaintext

project/ ├── src/ │ └── main/ │ └── kotlin/ │ └── Main.kt # 主程序文件 ├── resources/ │ ├── captcha_image.png # 验证码图片 │ └── tessdata/ # Tesseract 语言数据文件

注意:
tessdata 文件夹中需要包含语言数据文件(如 eng.traineddata)。你可以从 Tesseract 官方仓库 下载。
6. 优化方向

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

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

相关文章

20241415 《计算机基础与程序设计》课程总结

20241415 《计算机基础与程序设计》课程总结 每周作业链接汇总 第一周作业 参考基于VirtualBox虚拟机安装Ubuntu图文教程安装Linux系统 自学计算机科学概论》并提出问题第二周作业 了解计算思维和计算机结构第三周作业 计算机的数据表示法 C语言的基本数据类型第四周作业 门电路…

centos7 开启网卡相关设置

默认网卡是ens33 查看ip命令 ip a 或 ip addr 对于没有启用的网卡,使用命令ifup,开启网卡。注意网卡的名称ens33 找到自己对应的ifup ens33 永久默认启用网卡,关机或重启后,网卡自动启用该配置文件在/etc/sysconfig/network-scripts文件夹下,可以提前备份下 ifcfg-ens3…

20241417 《计算机基础与程序设计》课程总结

20241417 《计算机基础与程序设计》课程总结 每周作业链接汇总 第一周作业:链接 简要内容:课程概论,工业革命与浪潮之巅,信息与信息安全,计算机系统概论,计算机安全,计算的限制,计算思维第三周作业:链接 简要内容:数字分类与计数法,位置计数法,进制转换,模拟数据与…

PCIe扫盲——Base Limit寄存器详解

上一篇文章介绍了Type0型配置空间Header中的BAR的作用和用法,但是PCIe中的桥设备(Switch和Root中的P2P)又是如何判断某一请求(Request)是否属于自己或者自己的分支下的设备的呢?(定义范围) 这实际上是通过Type1型配置空间Header中的Base和Limit寄存器来实现的,这篇文章…

用.NET X64 Native AOT编写的操作系统

https://blog.csdn.net/sd7o95o/article/details/1331911601.前言很多人想学习下.Net前沿技术和核心技术,这里推荐一个适合大家学习的案例,用.NET X64 Native AOT编写一个操作系统。 2.概述MOOS(To Make My Own Operating System Project)是一个采用.NET x64 Native AOT技术…

Win32汇编学习笔记05

定位关键点3种方法: 过程函数 api 字符串 但是不确定用要哪一种方法,可以3种方法都用一下,因为在不同的程序,实用的方法是不一样的 窗口程序看控件信息 1.通过OD去看还可以用 spy ++ 查看还可以用vs2019 ,打开软件,找到对应控件直接看属性一般拿句柄没用,因为按钮是响应 WM_COM…

2025年,勇敢探索,才能突破困境

新年第一篇文章,不聊技术,聊聊今年的计划,以及未来的发展趋势。 在24年的第一篇文章中,我用“苟住求活”这个词形容了我当时的判断,如今回过头再看2024年,大家都过的很挣扎。经济环境进一步恶化,就业机会越发的稀少,降本增效降薪裁员,是去年很多人的真实经历。 今年的…

Java集合 —— LinkedList详解(源码)

在学习LinkedList之前先来了解一下链表链表 概念链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序通过链表中的指针链接次序实现的图中的1、2、3、4、5都是结构体,称为结点;结构体包含所存的数据和下一结点的地址。顺序表中的地址是连续的,而链表中的…

菜单

扫雷菜单准备写一个基于C的扫雷游戏,这是第一篇,内容:扫雷的主菜单 思路 显示菜单->用户选择->判断用户选项 实现 显示菜单 首先在main函数内显示菜单,菜单显示部分实现在 MainMenu 函数内 int main(void) {while (true){int iChoose = -1;MainMenu();//加载菜单} } …

如何解决数据库扩容后宝塔面板显示旧容量的问题?

当您完成数据库扩容后,发现宝塔面板仍然显示旧的容量,这可能是由于系统未能及时刷新磁盘信息或配置文件未更新所致。为了确保宝塔面板正确显示新的磁盘容量,请参考以下详细步骤进行处理:确认磁盘扩容成功:首先,确保磁盘扩容操作已经成功完成。可以通过命令行工具如lsblk或…

20241312《计算机基础与程序设计》课程总结

20241312《计算机基础与程序设计》课程总结 第一周作业: 简要内容:①课程概论②工业革命与浪潮之巅③信息与信息安全④计算机系统概论⑤计算机安全⑥计算的限制⑦计算思维 二维码: 第三周作业: 简要内容:①数字分类与计数法 ②位置计数法③进制转换④模拟数据与数字数据⑤…

云服务器根目录扩容后磁盘空间未增加

问题描述: 我已经升级了云服务器的配置,但根目录的空间大小并未增加。请帮我检查并解决这个问题。 详情回答: 您好!感谢您使用我们的云服务器服务。根据您的描述,您已经升级了云服务器的配置,但根目录的空间大小并未增加。这种情况通常是由于磁盘挂载或分区设置不当引起的…