識別英文數字驗證碼的程式(C# 示例)

ttocr、com發表於2024-11-30

在本篇中,我們將使用 Tesseract OCR 透過 C# 來實現英文數字驗證碼的識別。

  1. 環境準備
    步驟 1:安裝 Tesseract OCR

Windows:可以下載並安裝 Tesseract Windows 安裝包。
Linux:透過以下命令安裝:
bash

sudo apt-get install tesseract-ocr
MacOS:透過 Homebrew 安裝:
bash

brew install tesseract
步驟 2:建立 C# 專案並安裝 NuGet 包

建立一個新的 C# 控制檯應用程式。
在 NuGet 包管理器 中安裝 Tesseract 的 C# 包。開啟 Visual Studio,選擇 Tools > NuGet Package Manager > Manage NuGet Packages for Solution,然後搜尋並安裝 Tesseract 包。
在命令列中安裝:

bash

Install-Package Tesseract
2. 驗證碼識別程式
以下是一個使用 Tesseract OCR 和 C# 識別英文數字驗證碼的完整示例:

csharp

using System;
using System.Drawing;
using Tesseract;

namespace CaptchaRecognition
{
class Program
{
static void Main(string[] args)
{
try
{
// 設定Tesseract OCR的路徑
string tessdataPath = @"C:\Program Files\Tesseract-OCR\tessdata"; // 更新為Tesseract的安裝路徑

            // 建立Tesseract引擎例項
            using (var engine = new TesseractEngine(tessdataPath, "eng", EngineMode.Default))
            {
                // 載入驗證碼影像
                string imagePath = "captcha_image.png"; // 將路徑設定為您影像的路徑
                using (var img = Pix.LoadFromFile(imagePath))
                {
                    // 使用Tesseract進行OCR識別
                    using (var page = engine.Process(img))
                    {
                        // 獲取識別結果
                        string result = page.GetText().Trim();
                        Console.WriteLine($"識別的驗證碼是:{result}");
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"發生錯誤: {ex.Message}");
        }
    }
}

}
3. 程式碼解析
載入影像:使用 Pix.LoadFromFile() 方法載入影像檔案。
OCR 識別:透過 TesseractEngine 建立 Tesseract OCR 引擎例項,然後使用 engine.Process() 方法處理影像,返回識別的文字內容。
輸出結果:最後,透過 page.GetText() 方法獲取並列印識別出來的文字內容(即驗證碼)。
4. 如何執行
將驗證碼影像儲存為 captcha_image.png,並將其路徑傳遞給程式碼中的 imagePath。
執行 C# 程式,控制檯將輸出識別的驗證碼文字。
5. 改進方案
影像預處理:如果驗證碼影像包含噪聲,可能需要進行影像預處理。例如,可以使用 AForge.NET 或 Emgu CV 等影像處理庫進行影像二值化、去噪等操作來提高 OCR 識別的準確性。

示例:將影像轉為灰度圖並二值化:
更多內容訪問ttocr.com或聯絡1436423940
csharp

using (var bmp = new Bitmap(imagePath))
{
Bitmap grayscaleImage = new Bitmap(bmp.Width, bmp.Height);
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
var color = bmp.GetPixel(i, j);
int gray = (int)(color.R * 0.3 + color.G * 0.59 + color.B * 0.11);
grayscaleImage.SetPixel(i, j, Color.FromArgb(gray, gray, gray));
}
}
grayscaleImage.Save("grayscale_image.png");
}
訓練自定義 OCR 模型:如果驗證碼的格式較為特殊或影像質量較差,可以考慮自己訓練 Tesseract OCR 引擎,使用自定義資料集來提高識別率。

相關文章