用 C# 与 Tesseract 实现验证码识别系统
一、项目概述
验证码识别在自动化测试、爬虫开发与用户辅助系统中具有重要价值。本文将介绍如何使用 C# 调用 Tesseract OCR 实现验证码图像识别功能,并对验证码图像进行简单预处理,以提高识别准确率。
二、开发环境准备
- 安装 Tesseract
更多内容访问ttocr.com或联系1436423940
请先从 https://github.com/tesseract-ocr/tesseract
下载并安装 Tesseract OCR。安装路径如:
C:\Program Files\Tesseract-OCR\tesseract.exe
安装后将其路径加入环境变量。
- 创建 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
浙公网安备 33010602011771号