使用 C# 和 Tesseract OCR 实现验证码识别
验证码广泛用于网站登录和防爬虫验证中,而使用 OCR 技术可以自动识别这些验证码。本文将讲解如何使用 C# 和 Tesseract OCR 引擎实现验证码的识别,并通过简单的图像预处理提高识别效果。
- 环境准备
安装 Tesseract OCR
要使用 Tesseract OCR,需要先在系统中安装 Tesseract:
Windows:从 Tesseract OCR 官方页面下载安装包,并按照指引安装。
Linux:运行以下命令:
bash
更多内容访问ttocr.com或联系1436423940
sudo apt install tesseract-ocr
macOS:通过 Homebrew 安装:
bash
brew install tesseract
安装完成后,确保 Tesseract 的路径已添加到系统环境变量中,验证是否安装成功:
bash
tesseract --version
配置 C# 项目
在 Visual Studio 中创建一个新的 C# 控制台应用程序。然后,通过 NuGet 包管理器安装 Tesseract 库:
bash
Install-Package Tesseract
2. 编写验证码识别代码
以下是一个简单的 C# 代码示例,用于加载验证码图像并进行识别:
csharp
using System;
using System.IO;
using Tesseract;
class Program
{
static void Main(string[] args)
{
// 验证码图像路径
string imagePath = "captcha.png";
// 设置 Tesseract 数据路径(tessdata 文件夹路径)
string tessDataPath = @"C:\Program Files\Tesseract-OCR\tessdata";
// 创建 Tesseract 引擎实例
using (var engine = new TesseractEngine(tessDataPath, "eng", EngineMode.Default))
{
try
{
// 加载图像并进行 OCR 识别
using (var img = Pix.LoadFromFile(imagePath))
{
var result = engine.Process(img);
Console.WriteLine("识别的验证码是: " + result.GetText().Trim());
}
}
catch (Exception ex)
{
Console.WriteLine("识别失败: " + ex.Message);
}
}
}
}
3. 图像预处理(可选)
验证码图片可能包含噪点、干扰线条或颜色干扰。通过简单的预处理,可以大幅提升 OCR 的识别准确率。
使用 C# 进行图像预处理
以下代码展示了如何对验证码图像进行灰度化和二值化处理:
csharp
using System;
using System.Drawing;
using System.Drawing.Imaging;
class ImagePreprocessor
{
public static void PreprocessImage(string inputPath, string outputPath)
{
// 加载图像
using (var img = new Bitmap(inputPath))
{
// 转换为灰度图像
for (int x = 0; x < img.Width; x++)
{
for (int y = 0; y < img.Height; y++)
{
var pixel = img.GetPixel(x, y);
int gray = (pixel.R + pixel.G + pixel.B) / 3;
img.SetPixel(x, y, Color.FromArgb(gray, gray, gray));
}
}
// 保存灰度图像
img.Save(outputPath, ImageFormat.Png);
}
Console.WriteLine($"图像已处理并保存为: {outputPath}");
}
}
class Program
{
static void Main(string[] args)
{
string inputImage = "captcha.png";
string processedImage = "processed_captcha.png";
ImagePreprocessor.PreprocessImage(inputImage, processedImage);
}
}
将处理后的图像 processed_captcha.png 传递给 OCR 识别程序:
csharp
using (var img = Pix.LoadFromFile("processed_captcha.png"))
{
var result = engine.Process(img);
Console.WriteLine("识别的验证码是: " + result.GetText().Trim());
}
4. 提高识别准确率
限制字符范围
如果验证码仅包含特定字符(如数字和大写字母),可以设置 Tesseract 的白名单:
csharp
engine.SetVariable("tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
调整页面分割模式
Tesseract 支持多种页面分割模式(PSM),可根据验证码内容选择合适的模式。例如:
csharp
engine.DefaultPageSegMode = PageSegMode.SingleLine;
降噪
对于噪点较多的图片,可以增加图像处理步骤,例如:
图像平滑
中值滤波
删除孤立像素
自定义训练
如果验证码字体特殊,Tesseract 默认模型可能无法准确识别。通过训练工具生成自定义模型,可以显著提升准确率。
5. 运行程序
将上述代码保存为项目文件,确保图像和 tessdata 路径正确配置。在运行程序后,识别结果会输出到控制台。例如:
makefile
识别的验证码是: X7A9B
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异