首页 > 编程语言 >使用 C# 和 Tesseract OCR 识别验证码使用 C# 和 Tesseract OCR 识别验证码

使用 C# 和 Tesseract OCR 识别验证码使用 C# 和 Tesseract OCR 识别验证码

时间:2025-01-14 23:21:40浏览次数:1  
标签:OCR C# 验证码 识别 using Tesseract

  1. 安装 Tesseract OCR 和相关依赖
    在 C# 中使用 Tesseract,需要通过 NuGet 安装 Tesseract 包。

安装 Tesseract NuGet 包
打开 Visual Studio。
在项目中右键点击 NuGet 包管理器 > 管理 NuGet 包。
搜索 Tesseract 并安装最新版本的包。
bash

Install-Package Tesseract
2. 编写 C# 代码
在项目中创建一个新的类(例如 CaptchaRecognizer.cs),并编写以下代码:

csharp

using System;
using Tesseract;
using System.Drawing;

class CaptchaRecognizer
{
static void Main()
{
// 初始化 Tesseract OCR 引擎
string datapath = @"./tessdata"; // tessdata 文件夹路径,需确保包含训练数据文件(如 eng.traineddata)
string language = "eng"; // 选择语言,默认英文
try
{
// 创建 Tesseract 实例
using (var engine = new TesseractEngine(datapath, language, EngineMode.Default))
{
// 加载验证码图片
using (var img = Pix.LoadFromFile("captcha_image.png"))
{
// 设置图片进行 OCR 识别
using (var page = engine.Process(img))
{
// 获取 OCR 识别的文本
string result = page.GetText();
Console.WriteLine("识别的验证码是: " + result);
}
}
}
}
catch (Exception ex)
{
Console.WriteLine("发生错误: " + ex.Message);
}
}
}
3. 代码解释
初始化 Tesseract 引擎:通过 TesseractEngine 类初始化 Tesseract 引擎。datapath 为 Tesseract 训练数据的文件夹路径,language 为使用的语言(这里是英文)。

加载验证码图像:使用 Pix.LoadFromFile("captcha_image.png") 加载图像文件。你需要提供图像文件的正确路径。

OCR 识别:调用 engine.Process(img) 对图像进行处理,得到识别的结果。然后通过 page.GetText() 提取识别出的文本。

捕获异常:通过 try-catch 语句捕获可能的错误,例如文件未找到或者路径错误等。

  1. 准备 Tesseract 数据文件
    你需要下载 Tesseract 训练数据文件(例如 eng.traineddata),并将其放置在 tessdata 文件夹中。你可以从 Tesseract 的官方 GitHub 页面下载训练数据:Tesseract Trained Data。

确保 tessdata 文件夹路径与项目中的路径一致。

  1. 运行程序
    确保已经安装了 Tesseract 的训练数据并配置正确,运行该程序时,控制台会输出识别的验证码内容,例如:

makefile

识别的验证码是: 9g3r1
6. 改进和优化
图像预处理:

你可以使用 OpenCvSharp(C# 的 OpenCV 封装)对验证码图像进行预处理,如二值化、去噪等,以提高识别的准确性。
安装 OpenCvSharp:

bash

Install-Package OpenCvSharp4
处理复杂验证码:

对于复杂的验证码(如有干扰线、背景噪声等),可能需要图像处理技术(如去噪、边缘检测等)来提高识别的准确率。
7. 示例:使用 OpenCV 进行图像预处理
下面是一个简单的示例,演示如何在 C# 中使用 OpenCV 对验证码进行二值化处理,并与 Tesseract 配合使用。

csharp

using OpenCvSharp;
using Tesseract;
using System;

class CaptchaRecognizer
{
static void Main()
{
// 加载验证码图像
Mat img = Cv2.ImRead("captcha_image.png");
更多内容访问ttocr.com或联系1436423940
// 将图像转换为灰度图
Mat gray = new Mat();
Cv2.CvtColor(img, gray, ColorConversionCodes.BGR2GRAY);

    // 对灰度图像进行二值化处理
    Mat binary = new Mat();
    Cv2.Threshold(gray, binary, 128, 255, ThresholdTypes.Binary);

    // 将处理后的图像保存
    Cv2.ImWrite("processed_captcha.png", binary);

    // 使用 Tesseract 识别处理后的图像
    string datapath = @"./tessdata";
    string language = "eng"; // 英文

    try
    {
        using (var engine = new TesseractEngine(datapath, language, EngineMode.Default))
        {
            using (var processedImg = Pix.LoadFromFile("processed_captcha.png"))
            {
                using (var page = engine.Process(processedImg))
                {
                    string result = page.GetText();
                    Console.WriteLine("识别的验证码是: " + result);
                }
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("发生错误: " + ex.Message);
    }
}

}

标签:OCR,C#,验证码,识别,using,Tesseract
From: https://www.cnblogs.com/ocr12/p/18671890

相关文章

  • docker部署d2l环境
    编写dockerfile#使用NVIDIA提供的CUDA基础镜像,包含CUDA11.8.0和cuDNN8,基于Ubuntu22.04FROMnvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04#设置维护者信息MAINTAINERwatcherprime<woma@126.com>#设置环境变量,包括时区、非交互式前端和PATH变量ENVTZ=Asia/Shanghai......
  • 在Ubantu中安装pycharm
    1.下载pycharmlinux版,我下载的是2022.3.3专业版2.更改host文件,输入:sudogedit/etc/hosts在弹出的文件中的末尾加以下代码:0.0.0.0account.jetbrains.com3.激活pycharm:将pycharm补丁jet-netfilter拷入ubantu中某一路径(注意是整个文件夹放进去,不要只放jar包)在pycharm安......
  • docker-compose自动部署go项目全流程,本地到镜像仓库到服务器,踩坑笔记
    声明:个人所学记录,有可以改进的地方希望不吝指教Dockerfile#使用golang官方镜像作为构建环境FROMgolang:1.23-alpineASbuilder#设置工作目录WORKDIR/app#设置环境变量镜像变量ENVGO111MODULE=onENVGOPROXY=https://goproxy.cn,direct#复制go.mod和go.sum文......
  • G1原理—7.G1的GC日志分析解读
    大纲1.TLAB的GC日志解读2.YGC的GC日志解读3.模拟YGC(单次GC及多次GC的不同场景)4.打开实验选项查看YGC的详情日志信息5.MixedGC日志信息之初始标记过程6.MixedGC日志信息之混合回收过程7.MixedGC日志信息之Region的详细信息和标记过程的详细信息8.FGC的日志信息及日......
  • LeetCode:23.合并K个排序链表
    LeetCode:23.合并K个排序链表解题思路新链表的下一个节点一定是k个链表头中的最小节点。考虑选择使用最小堆。解题步骤构建一个最小堆,并依次把链表头插入堆中。弹出堆顶接到输出链表,并将堆顶所在链表的新链表头插入堆中。等堆元素全部弹出,合并工作就完成了。classMinHeap{......
  • 【TCP协议】TCP Keepalive 指南
    1、什么是TCPKeepalive?TCPKeepalive是一种TCP协议内置的探测机制,用于检测长时间未活动的连接是否仍然存活。当启用了Keepalive后,TCP会在连接空闲一定时间后,定期向对端发送探测包,如果未收到对端的响应,则会尝试多次探测,最终关闭连接。用途:检测并清理死连接,防止资源长期......
  • macOS 无法识别 SD 卡读卡器 bug All In One
    macOS无法识别SD卡读卡器bugAllInOneUSB接口插入SD卡读卡器,Finder没有任何反应❌demos(......
  • 推荐一款超棒的 Minecraft 启动器:Voxelum/x-minecraft-launcher
    XMinecraftLauncher(XMCL)是一个便于你管理多种整合包、模组、资源包、光影包的现代化启动器。它还支持MinecraftForge、Fabric、Quilt、CurseForge和Modrinth它具有以下令人心动的特点:多版本兼容性:支持多个Minecraft版本,正式版和愚人节版本。自动化资源下载......
  • LeetCode:347.前K个高频元素
    LeetCode:347.前K个高频元素vartopKFrequent=function(nums,k){letmap=newMap();letarr=[...newSet(nums)]nums.forEach(item=>{if(map.has(item)){map.set(item,map.get(item)+1)}else{map.set(item,1)......
  • 《CPython Internals》阅读笔记:p151-p151
    《CPythonInternals》学习第9天,p151-p1510总结,总计1页。一、技术总结无。二、英语总结(生词:1)1.marshal(1)marshalingMarshallingormarshaling(USspelling)istheprocessoftransformingthememoryrepresentationofanobjectintoadataformsuitablefo......