首页 > 其他分享 >Kotlin 实现英文数字验证码的识别

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

时间:2025-01-14 21:55:55浏览次数:1  
标签:val Kotlin 验证码 opencv 图像 识别

  1. 准备工作
    安装依赖:

确保已安装 Tesseract OCR。
bash
更多内容访问ttocr.com或联系1436423940
sudo apt-get install tesseract-ocr
配置 Kotlin 开发环境,推荐使用 IntelliJ IDEA。
导入依赖: 在 Kotlin 项目的 build.gradle.kts 文件中添加以下依赖,用于处理文件和图像:

kotlin

plugins {
kotlin("jvm") version "1.9.0"
application
}

dependencies {
implementation("org.bytedeco:javacv:1.5.8") // OpenCV 和 JavaCV 库
}
2. Kotlin 代码实现
kotlin

import org.bytedeco.opencv.global.opencv_imgcodecs.*
import org.bytedeco.opencv.global.opencv_imgproc.*
import org.bytedeco.opencv.opencv_core.*
import java.io.File

class CaptchaRecognizer {

// 图像预处理:转为灰度并提高对比度
fun preprocessImage(inputImagePath: String, outputImagePath: String) {
    val src = imread(inputImagePath) // 读取原始图像
    val gray = Mat()
    val processed = Mat()

    // 转为灰度图像
    cvtColor(src, gray, COLOR_BGR2GRAY)

    // 应用自适应直方图均衡化
    equalizeHist(gray, processed)

    // 保存处理后的图像
    imwrite(outputImagePath, processed)
    println("图像已处理并保存至: $outputImagePath")
}

// 调用 Tesseract OCR 识别验证码
fun recognizeCaptcha(imagePath: String): String {
    val process = ProcessBuilder("tesseract", imagePath, "stdout")
        .redirectErrorStream(true)
        .start()

    return process.inputStream.bufferedReader().readText().trim()
}

}

fun main() {
val inputImagePath = "captcha_image.png" // 原始验证码路径
val processedImagePath = "processed_captcha.png" // 处理后图像路径

val recognizer = CaptchaRecognizer()

// 图像预处理
recognizer.preprocessImage(inputImagePath, processedImagePath)

// 使用 Tesseract 识别验证码
val captchaText = recognizer.recognizeCaptcha(processedImagePath)

println("识别结果: $captchaText")

}
3. 代码解析
图像预处理:

使用 OpenCV 将输入图像转换为灰度图。
通过直方图均衡化 (equalizeHist) 提高图像对比度,有助于增强 OCR 的识别率。
将预处理后的图像保存为新的文件。
OCR 识别:

通过 Kotlin 的 ProcessBuilder 调用外部命令,运行 Tesseract OCR 工具。
Tesseract 的 stdout 会直接输出识别结果。
模块化设计:

将图像预处理和验证码识别功能封装到 CaptchaRecognizer 类中,使得代码更加清晰和易于维护。
4. 执行程序
将代码保存为 CaptchaRecognition.kt。
使用 Gradle 构建项目:
bash

./gradlew build
运行程序:
bash

./gradlew run
程序将对输入图像进行预处理,然后调用 Tesseract OCR 识别并输出验证码内容。

  1. 示例输出
    假设输入图像为 captcha_image.png,运行程序后,输出结果可能如下:

图像已处理并保存至: processed_captcha.png
识别结果: 7G89H

标签:val,Kotlin,验证码,opencv,图像,识别
From: https://www.cnblogs.com/ocr12/p/18671785

相关文章

  • 基于深度学习的手写文本识别系统
    文章目录前言一、准备二、(0-9)数字识别模型代码1.引入库2.读入数据3.模型训练4.模型测试5.模型权重保存(不用重复训练)6.交互式界面三、结果展示四、jupyter代码下载前言用chatgpt"实现基于深度学习的手写文本识别系统|Python,PyTorch":设计并实现了基于卷积神......
  • 物联网毕设 -- 智能窗帘(STM32+APP+语音识别+MQTT)
    目录 前言一连线图1.原理图2.PCB效果3.实物效果4APP效果5功能概括(1)硬件端(2)APP端(3)云平台使用(阿里云)(需要可以找我获取)(4)演示视频二底层代码使用方式1.使用说明2.下载程序三APP使用方式1下载APP四程序架构及修改(通用) 前言智能窗帘系统通过STM32......
  • C#轻松实现条形码二维码生成及识别
    一、前言大家好!我是付工。今天给大家分享一下,如何基于C#来生成并识别条形码或者二维码。二、http://ZXing.Net实现二维码生成的库有很多,我们这里采用的是http://ZXing.Net。ZXing是一个开放源码的,用Java实现的多种格式的一维二维条码图像处理库,而http://ZXing.Net是ZXing......
  • NLP 进阶:BERT + CRF 用于命名实体识别(NER)
    引言:命名实体识别(NER)是自然语言处理(NLP)中的一项关键任务,它帮助我们从文本中识别出具有特定意义的实体,例如人名、地名、组织机构等。在许多NER任务中,结合BERT和CRF(条件随机场)提供了强大的性能提升。今天,我们将深入探讨如何将BERT与CRF结合,打造一个高效、精准的命名实......
  • 深度学习入门之手写数字识别
    模型定义我们使用CNN和MLP来定义模型:importtorch.nnasnnclassModel(nn.Module):def__init__(self):"""定义模型结构输入维度为1*28*28(C,H,W)"""super(Model,self).__init__()#卷积......
  • 图形验证码是怎样保护登录安全的?
    图形验证码是一种广泛应用于网络安全领域的技术手段,其主要目的是防止恶意用户对系统进行暴力破解等攻击行为。以下将详细介绍图形验证码的原理及作用。一、图形验证码的原理随机生成与临时存储:系统会随机生成一个验证码,并将其临时保存在用户的Session里。这个过程确保了每......
  • Python 和 Tesseract OCR 识别复杂验证码
    ​安装依赖首先,确保已安装所需的工具和库。安装Tesseract在Windows上,下载安装包并进行安装:TesseractGitHub。在Linux上,你可以通过以下命令安装:bash更多内容访问ttocr.com或联系1436423940sudoapt-getinstalltesseract-ocr安装Python库使用pip安装Python......
  • 基于java的停车场车牌识别系统
    一、系统背景与意义随着城市化进程的加速,停车场管理面临着越来越大的挑战。传统的手工记录车牌号方式不仅费时费力,还容易出错。而基于Java的停车场车牌识别系统的出现,则有效地解决了这一问题。该系统能够自动识别进出停车场的车辆车牌号,实现快速、准确的车辆管理,提高了停车......
  • 基于YOLOv8与CGNet的鸟类智能识别系统 深度学习图像分类 鸟类目标检测与分类 图像特征
    博主介绍:  ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W+粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台的优质作者。通过长期分享和实战指导,我致力于帮助更多学生......
  • 基于YOLOv5的手语识别系统:深度学习应用与实现
    手语是聋人和听力障碍者与他人交流的主要方式之一。随着社会的进步,手语的识别技术逐渐成为研究的热点,尤其在智能助残设备和多模态人机交互中,手语识别的应用越来越广泛。尽管手语是一种自然语言,但其表达方式非常丰富,包括了不同的手势、姿势、动作轨迹和面部表情等。为了能够......