用 C# 与 Tesseract OCR 实现验证码识别工具

一、环境准备

  1. 安装 .NET SDK
    下载并安装 .NET 6 或更高版本

  2. 安装 Tesseract OCR 引擎
    Windows 用户可从 Tesseract for Windows 下载安装版本(推荐)
    更多内容访问ttocr.com或联系1436423940
    Linux/macOS 可使用包管理器安装:

Ubuntu

sudo apt install tesseract-ocr

macOS

brew install tesseract
3. 创建项目并添加依赖

dotnet new console -n CaptchaRecognizer
cd CaptchaRecognizer
dotnet add package Tesseract --version 4.1.1
二、识别图像验证码
编辑 Program.cs:

using System;
using Tesseract;

class Program
{
static void Main(string[] args)
{
var imagePath = args.Length > 0 ? args[0] : "captcha.png";
var dataPath = @"./tessdata"; // 放置 tessdata 目录路径

    try
    {
        using var engine = new TesseractEngine(dataPath, "eng", EngineMode.Default);
        engine.SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");

        using var img = Pix.LoadFromFile(imagePath);
        using var page = engine.Process(img);

        var text = page.GetText().Trim();
        var cleaned = System.Text.RegularExpressions.Regex.Replace(text, @"[^A-Z0-9]", "");
        Console.WriteLine($"识别结果: {cleaned}");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"识别出错: {ex.Message}");
    }
}

}
确保你下载了 tessdata traineddata 并将其放在 ./tessdata/ 目录下。

三、运行程序

dotnet run -- captcha1.png
输出示例:

识别结果: X9Q2
四、批量处理目录中的验证码图片
你可以扩展代码来处理一个文件夹下的所有 .png 验证码:

using System.IO;

string[] files = Directory.GetFiles("captchas", "*.png");

foreach (var file in files)
{
using var img = Pix.LoadFromFile(file);
using var page = engine.Process(img);
var text = page.GetText().Trim();
var cleaned = System.Text.RegularExpressions.Regex.Replace(text, @"[^A-Z0-9]", "");
Console.WriteLine($"{Path.GetFileName(file)} => {cleaned}");
}
五、图像预处理(可选)
可以借助 System.Drawing 或 ImageSharp 对图像进行灰度化、增强等处理以提高准确率:

using System.Drawing;
using System.Drawing.Imaging;

void PreprocessImage(string path)
{
using var bmp = new Bitmap(path);
for (int y = 0; y < bmp.Height; y++)
{
for (int x = 0; x < bmp.Width; x++)
{
var color = bmp.GetPixel(x, y);
int gray = (color.R + color.G + color.B) / 3;
var newColor = gray > 100 ? Color.White : Color.Black;
bmp.SetPixel(x, y, newColor);
}
}
bmp.Save("processed.png", ImageFormat.Png);
}

posted @ 2025-06-23 10:51  ttocr、com  阅读(33)  评论(0)    收藏  举报