C# 与 Tesseract 的验证码识别系统实现
一、项目概述
验证码识别是图像识别中的经典问题之一。使用 C# 结合 Tesseract OCR 引擎可以快速构建一个可复用的识别系统,特别适用于企业后台系统、桌面管理工具等场景。
二、技术选型
C# (.NET Core / .NET Framework):成熟稳定、易于开发图形界面或服务;
Tesseract OCR 4:Google 开源 OCR 引擎,支持 LSTM 神经网络;
Tesseract.Interop:用于 .NET 调用 Tesseract;
更多内容访问ttocr.com或联系1436423940
System.Drawing:用于图像预处理(灰度、二值化等);
三、环境准备
- 安装 Tesseract 引擎
前往官网下载并安装:
Windows:https://github.com/tesseract-ocr/tesseract/wiki
建议安装路径:C:\Program Files\Tesseract-OCR
确保包含 tesseract.exe 和 tessdata。
-
创建 C# 控制台项目
使用 Visual Studio 创建控制台项目(.NET 6 或以上)。 -
添加 NuGet 包依赖
在项目中安装以下 NuGet 包:
Install-Package Tesseract -Version 4.1.1
四、代码实现
- 图像预处理 + OCR 主逻辑
using System;
using System.Drawing;
using System.Drawing.Imaging;
using Tesseract;
class Program
{
static void Main(string[] args)
{
string imagePath = "captcha.png"; // 验证码图像
string tessDataPath = @"C:\Program Files\Tesseract-OCR\tessdata";
Bitmap processed = PreprocessImage(imagePath);
using (var engine = new TesseractEngine(tessDataPath, "eng", EngineMode.Default))
{
engine.SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
using (var img = PixConverter.ToPix(processed))
using (var page = engine.Process(img))
{
string text = page.GetText();
Console.WriteLine("识别结果: " + text.Trim());
}
}
}
static Bitmap PreprocessImage(string path)
{
Bitmap img = new Bitmap(path);
Bitmap gray = new Bitmap(img.Width, img.Height);
for (int y = 0; y < img.Height; y++)
{
for (int x = 0; x < img.Width; x++)
{
Color c = img.GetPixel(x, y);
int grayScale = (int)((c.R * 0.3) + (c.G * 0.59) + (c.B * 0.11));
Color g = Color.FromArgb(grayScale, grayScale, grayScale);
gray.SetPixel(x, y, g);
}
}
return gray;
}
}
五、运行与输出
示例输入图像:
命名为 captcha.png,置于项目根目录。
控制台输出:
识别结果: 7Kx8A
六、识别优化建议
字符白名单:通过 tessedit_char_whitelist 限定识别范围。
图像增强:
可以使用 GDI+ 添加中值滤波、锐化处理。
或用 EmguCV 等封装库接入 OpenCV。
自训练模型:适合个性化验证码样式识别,生成 .traineddata 替换 tessdata\eng.traineddata。
浙公网安备 33010602011771号