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

news/2025/1/14 23:20:16/文章来源:https://www.cnblogs.com/ocr12/p/18671890
  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);}
}

}

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

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

相关文章

深入浅出:Agent如何调用工具——从OpenAI Function Call到CrewAI框架

深入浅出:Agent如何调用工具——从OpenAI Function Call到CrewAI框架 嗨,大家好!作为一个喜欢折腾AI新技术的算法攻城狮,最近又学习了一些Agent工作流调用工具的文章,学完之后,我真的是“啊这”,一边感慨AI技术的强大,一边觉得自己打开了新世界的大门。于是,我决定写这…

在Ubantu中安装pycharm

1.下载pycharm linux版,我下载的是2022.3.3专业版 2. 更改host文件,输入: sudo gedit /etc/hosts在弹出的文件中的末尾加以下代码: 0.0.0.0 account.jetbrains.com3.激活pycharm: 将pycharm补丁jet-netfilter拷入ubantu中某一路径(注意是整个文件夹放进去,不要只放jar包…

docker-compose自动部署go项目全流程,本地到镜像仓库到服务器,踩坑笔记

声明:个人所学记录,有可以改进的地方希望不吝指教 Dockerfile # 使用golang官方镜像作为构建环境 FROM golang:1.23-alpine AS builder# 设置工作目录 WORKDIR /app# 设置环境变量镜像变量 ENV GO111MODULE=on ENV GOPROXY=https://goproxy.cn,direct# 复制go.mod 和 go.sum文…

docker部署d2l环境

编写dockerfile # 使用NVIDIA提供的CUDA基础镜像,包含CUDA 11.8.0和cuDNN 8,基于Ubuntu 22.04 FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04 # 设置维护者信息 MAINTAINER watcherprime <woma@126.com># 设置环境变量,包括时区、非交互式前端和PATH变量 ENV TZ=…

【TCP协议】TCP Keepalive 指南

1、什么是 TCP Keepalive?TCP Keepalive 是一种 TCP 协议内置的探测机制,用于检测长时间未活动的连接是否仍然存活。当启用了 Keepalive 后,TCP 会在连接空闲一定时间后,定期向对端发送探测包,如果未收到对端的响应,则会尝试多次探测,最终关闭连接。 用途: 检测并清理死…

《CPython Internals》阅读笔记:p151-p151

《CPython Internals》学习第 9天,p151-p1510 总结,总计 1 页。 一、技术总结 无。 二、英语总结(生词:1) 1.marshal (1)marshaling Marshalling or marshaling(US spelling) is the process of transforming the memory representation of an object into a data form su…

# vm逆向

vm逆向 虚拟机逆向与实现-CSDN博客 对上面博客的总结。 引 vm逆向题,一般是小型虚拟机程序,可以理解为一种模拟器,有start,dispatcher,opcode等结构。常见使用while-switch/if这类循环+选择结构来实现简单的虚拟机模拟,如下:逆向重点:分析入口,搞清输入和opcode的位置理…

【Gossip 协议】Redis 集群中节点之间的通信方式?

# 分布式系统 # Gossip 协议 在分布式系统中,不同的节点进行数据/信息共享是一个基本的需求。 一种比较简单粗暴的方法就是 集中式发散消息,简单来说就是一个主节点同时共享最新信息给其他所有节点,比较适合中心化系统。这种方法的缺陷也很明显,节点多的时候不光同步消息的…

推荐一款超棒的 Minecraft 启动器:Voxelum/x-minecraft-launcher

X Minecraft Launcher (XMCL) 是一个便于你管理多种整合包、模组、资源包、光影包的现代化启动器。它还支持 Minecraft Forge、 Fabric、Quilt、CurseForge 和 Modrinth它具有以下令人心动的特点:多版本兼容性:支持多个 Minecraft 版本,正式版和愚人节版本。自动化资源下载与…

互联网大中小厂实习面经:滴滴、美团、货拉拉、蔚来、信通院等

本文介绍Momenta、蔚来、中国信息通信研究院、昆仑万维、滴滴、易智瑞等企业各类技术岗位的暑期实习、日常实习面试流程与具体问题~本文介绍Momenta、蔚来、中国信息通信研究院、昆仑万维、滴滴、易智瑞等企业各类技术岗位的暑期实习、日常实习面试流程与具体问题。在前一段时间…

2025年1月买的几个好用的「新物件」

前言 去年底比较忙,换工作+搬家什么的,一堆事情凑在一起,很多24年买的东西还没发开箱 只能后面慢慢补上了,现在先把1月份买的一些东西发一下 红米k80手机 本来我是不想买手机的 不过办了新的套餐,营业厅送了购机补贴,不是很多,所以在补贴范围内选择了「看起来」性价比最…

安卓平板使用can-utils检查can通信功能

安装 termux 打开安卓平板 USB 调试模式,并确保电脑安装了 adb。 下载 termux,通过adb install ./termux.exe安装 termux 到安卓平板。 设置 termux 换源 安装好 termux 后打开,进行换源操作。 termux 中输入termux-change-repo。空格切换选中状态,移动方向键切换选中项目,…