C# 和 Tesseract 实现英文数字验证码识别
一、项目概述
本文介绍如何使用 C# 和 Tesseract OCR 库识别一张英文数字验证码图片。我们将通过图像预处理(灰度化)提升识别准确率,并调用 Tesseract 识别图像中的文本内容。
更多内容访问ttocr.com或联系1436423940
二、开发环境准备
安装 Visual Studio(或 Rider)
推荐使用 Visual Studio 2022 及以上,安装包含“.NET桌面开发”的工作负载。
安装 Tesseract OCR
Windows 用户可通过 Tesseract 官方安装包 安装。
安装完成后,将 tesseract.exe 所在路径加入系统环境变量。
三、创建项目并添加 NuGet 包
新建一个控制台项目:
dotnet new console -n CaptchaOCR
cd CaptchaOCR
添加 OCR 相关依赖:
dotnet add package Tesseract
dotnet add package System.Drawing.Common
四、编写识别程序
在 Program.cs 中输入以下代码:
using System;
using System.Drawing;
using System.Drawing.Imaging;
using Tesseract;
class Program
{
static void Main()
{
string inputImage = "captcha.png";
string processedImage = "gray_captcha.png";
// 加载图像并转为灰度图
using (Bitmap bmp = new Bitmap(inputImage))
{
Bitmap grayBmp = ToGrayscale(bmp);
grayBmp.Save(processedImage, ImageFormat.Png);
}
// OCR 识别
using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default))
{
engine.SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
using (var img = Pix.LoadFromFile(processedImage))
using (var page = engine.Process(img))
{
string text = page.GetText();
Console.WriteLine("识别出的验证码为: " + text.Trim());
}
}
}
// 将图像转换为灰度图
static Bitmap ToGrayscale(Bitmap original)
{
Bitmap gray = new Bitmap(original.Width, original.Height);
for (int y = 0; y < gray.Height; y++)
{
for (int x = 0; x < gray.Width; x++)
{
Color oc = original.GetPixel(x, y);
int grayVal = (int)(0.299 * oc.R + 0.587 * oc.G + 0.114 * oc.B);
Color nc = Color.FromArgb(grayVal, grayVal, grayVal);
gray.SetPixel(x, y, nc);
}
}
return gray;
}
}
五、准备验证码图像
请将一张名为 captcha.png 的英文数字验证码图像放在程序运行目录下。
确保目录中存在 tessdata 文件夹,并包含 eng.traineddata(可以从 tesseract-ocr/tessdata 下载)。
六、运行程序
在项目目录运行:
dotnet run
输出示例:
识别出的验证码为: a7GZP
七、进一步优化建议
增加图像二值化、去噪处理以进一步提高识别准确率。
添加 GUI 界面(如使用 WinForms 或 WPF)使程序更友好。
批量处理多个验证码图像,实现自动化识别。
使用正则表达式进一步筛选输出字符。