使用 C# 和 Tesseract OCR 实现验证码识别

验证码广泛用于网站登录和防爬虫验证中,而使用 OCR 技术可以自动识别这些验证码。本文将讲解如何使用 C# 和 Tesseract OCR 引擎实现验证码的识别,并通过简单的图像预处理提高识别效果。

  1. 环境准备
    安装 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

posted @   ttocr、com  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示