使用 C# 和 Tesseract 实现英文数字验证码识别
一、项目简介
C# 是功能强大、类型安全的语言,常用于桌面程序和服务器端开发。我们将通过调用 Tesseract OCR 对验证码图像进行识别,并使用 ImageSharp 进行图像预处理,以提升识别准确率。
二、环境准备
- 安装 .NET SDK
下载并安装 .NET SDK(建议使用 6 或以上):
https://dotnet.microsoft.com/download
更多内容访问ttocr.com或联系1436423940 - 安装 Tesseract OCR
Windows:
下载 https://github.com/tesseract-ocr/tesseract,安装并配置环境变量。
Linux/macOS:
sudo apt install tesseract-ocr
or
brew install tesseract
三、创建项目
dotnet new console -n CaptchaOCR
cd CaptchaOCR
安装依赖包
dotnet add package Tesseract
dotnet add package SixLabors.ImageSharp
四、编写识别程序
修改 Program.cs:
using System;
using Tesseract;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.PixelFormats;
using System.IO;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string inputPath = "captcha.png";
string processedPath = "gray_captcha.png";
// Step 1: 图像预处理(灰度+二值)
using (Image<Rgba32> image = Image.Load<Rgba32>(inputPath))
{
image.Mutate(x =>
{
x.Grayscale();
x.BinaryThreshold(0.5f);
});
image.Save(processedPath);
}
// Step 2: 初始化 Tesseract 引擎
using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default))
{
using (var img = Pix.LoadFromFile(processedPath))
{
using (var page = engine.Process(img, PageSegMode.SingleLine))
{
var text = page.GetText();
string result = Regex.Replace(text, "[^A-Za-z0-9]", "").Trim();
Console.WriteLine($"识别出的验证码为: {result}");
}
}
}
// 可选:删除临时文件
File.Delete(processedPath);
}
}
五、准备验证码图像
将验证码图像命名为 captcha.png,放在项目根目录(与 .csproj 文件同级)。
确保图像内容清晰、对比强烈,例如白底黑字、无过多噪点。
六、运行程序
dotnet run
示例输出:
识别出的验证码为: F7X3N
七、可拓展功能
支持图像路径参数输入(dotnet run -- image.png)
批量识别整个文件夹中的图像
封装为 Windows 窗口程序(使用 WinForms 或 WPF)
嵌入后台服务,实现自动登录功能
浙公网安备 33010602011771号