当前位置: 首页 > news >正文

用 C# 与 Tesseract 实现验证码识别系统

一、项目概述

验证码识别在自动化测试、爬虫开发与用户辅助系统中具有重要价值。本文将介绍如何使用 C# 调用 Tesseract OCR 实现验证码图像识别功能,并对验证码图像进行简单预处理,以提高识别准确率。

二、开发环境准备

  1. 安装 Tesseract
    更多内容访问ttocr.com或联系1436423940
    请先从 https://github.com/tesseract-ocr/tesseract
    下载并安装 Tesseract OCR。安装路径如:

C:\Program Files\Tesseract-OCR\tesseract.exe

安装后将其路径加入环境变量。

  1. 创建 C# 项目

使用 Visual Studio 创建一个 Windows 控制台应用程序 或 .NET Core 控制台应用程序 项目。

在 NuGet 中安装以下包:

Install-Package Tesseract

三、验证码识别核心代码
using System;
using Tesseract;
using System.Drawing;
using System.Drawing.Imaging;

class Program
{
static void Main(string[] args)
{
string imagePath = "captcha.png";
string tessDataPath = @"./tessdata"; // tessdata 路径

    // 图像预处理(灰度 + 二值化)Bitmap processed = PreprocessImage(imagePath);// 初始化 OCR 引擎using (var engine = new TesseractEngine(tessDataPath, "eng", EngineMode.Default)){engine.SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");using (var img = PixConverter.ToPix(processed))using (var page = engine.Process(img)){string text = page.GetText().Trim();Console.WriteLine("识别结果: " + text);}}
}static Bitmap PreprocessImage(string imagePath)
{Bitmap bitmap = new Bitmap(imagePath);Bitmap gray = new Bitmap(bitmap.Width, bitmap.Height);// 灰度处理for (int y = 0; y < bitmap.Height; y++){for (int x = 0; x < bitmap.Width; x++){Color c = bitmap.GetPixel(x, y);int grayValue = (c.R + c.G + c.B) / 3;Color grayColor = grayValue > 150 ? Color.White : Color.Black;gray.SetPixel(x, y, grayColor);}}return gray;
}

}

四、tessdata 获取与配置

Tesseract OCR 识别语言数据位于 tessdata 文件夹中,可从官方仓库下载:

英文语言文件:https://github.com/tesseract-ocr/tessdata

将 eng.traineddata 文件放入项目根目录下的 tessdata 文件夹中。

五、识别效果演示

验证码示例图:

文件名:captcha.png

图像内容:清晰的四位大写字母+数字组合,如 F2KZ

程序输出结果:

识别结果: F2KZ

http://www.wxhsa.cn/company.asp?id=1134

相关文章:

  • 【9月19日最终截稿,SPIE出版】2025年信息工程、智能信息技术与人工智能国际学术会议(IEITAI 2025)
  • Dockerfile:如何用CMD同时启动两个进程
  • 启动GA-Event Activated,结束GA-End Ability
  • VMware Avi Load Balancer 31.1.2 发布 - 多云负载均衡平台
  • C# WinForms 使用 CyUSB.dll 访问 USB 设备
  • NKOJ全TJ计划——NP3990
  • Linux redis 8.2.1源码编译
  • MarkDown学习
  • 202003_MRCTF_千层套娃
  • 基于MATLAB的粒子群算法优化广义回归神经网络的实现
  • MySql EXPLAIN 详解
  • Transformer完整实现及注释
  • 数据策略与模型算法
  • 25fall-cs101 作业图床 - Amy
  • 在使用代理的时候,可以使用更简单的C++语法代替FGameplayAttribute代理,使用TStaticFuncPtr T
  • 从 url 到 PPT 一键生成:Coze 工作流,颠覆你的内容创作方式!
  • [WPF学习笔记]多语言切换-001
  • Shell 语法摘要
  • 软件设计师知识点总结(一)
  • 智能引擎驱动:DRS.Editor让汽车诊断设计效率跃升!
  • 【译】Visual Studio 2026 Insider 来了!
  • GAS_Aura-Granting Abilities
  • CH584 CH585 触摸应用介绍一
  • OpenEuler 24.03 (LTS-SP2)安装最新版本docker
  • 西门子SINAMICS S120伺服驱动系统介绍
  • 第10章 STM32 模拟SPI电阻屏触摸配置和测试
  • ABAP同步和异步
  • 202208_网鼎杯青龙组_CRYPTO
  • Oracle笔记:11GR2 datagruad 环境搭建BORKER
  • GAS_Aura-Gameplay Abilities