使用 C# 和 ML.NET 构建图像验证码识别系统

本示例展示如何用 ML.NET 加载经过训练的深度学习模型,并在 .NET 应用中实现图像验证码识别。
一、准备工作

  1. 安装依赖
    在你的 C# 项目中安装以下 NuGet 包:
    dotnet add package Microsoft.ML
    dotnet add package Microsoft.ML.ImageAnalytics
    dotnet add package Microsoft.ML.TensorFlow二、准备模型和图片
    你需要一个 TensorFlow SavedModel 格式的图像分类模型,例如使用 Python 训练好的验证码识别模型(输入形状为 ​​[1, 60, 160, 3]​​,输出为 ​​[1, 4, 36]​​)。
    图片建议统一尺寸(160x60),每张图对应 4 个字符。
    三、定义输入与输出类
    using Microsoft.ML.Data;

public class CaptchaImageInput
{
[LoadColumn(0)]
public string ImagePath;

[ImageType(60, 160)]
public Bitmap Image;

}

public class CaptchaPrediction
{
[VectorType(4, 36)]
public float[] Score;
}四、加载模型与预测
using Microsoft.ML;
using Microsoft.ML.Transforms.Image;
using System.Drawing;

var mlContext = new MLContext();

// 加载图片
var imageData = new List
{
new CaptchaImageInput { ImagePath = "captcha_samples/A3B9_0.png", Image = (Bitmap)Image.FromFile("captcha_samples/A3B9_0.png") }
};
var data = mlContext.Data.LoadFromEnumerable(imageData);

// 图片预处理流水线
var pipeline = mlContext.Transforms.LoadImages("Image", ".", nameof(CaptchaImageInput.ImagePath))
.Append(mlContext.Transforms.ResizeImages("Image", 160, 60))ttocr.com或1436423940
.Append(mlContext.Transforms.ExtractPixels("Image", interleavePixelColors: true, offsetImage: 0))
.Append(mlContext.Model.LoadTensorFlowModel("captcha_model")
.ScoreTensorName("StatefulPartitionedCall")
.AddInput("serving_default_input", name: "Image")
.AddOutput("StatefulPartitionedCall"));

// 生成模型
var model = pipeline.Fit(data);
var predictionEngine = mlContext.Model.CreatePredictionEngine<CaptchaImageInput, CaptchaPrediction>(model);

// 执行预测
var prediction = predictionEngine.Predict(imageData[0]);

// 解析输出
string characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string result = "";
for (int i = 0; i < 4; i++)
{
var segment = prediction.Score.Skip(i * 36).Take(36).ToArray();
int maxIndex = Array.IndexOf(segment, segment.Max());
result += characters[maxIndex];
}

Console.WriteLine($"预测结果: {result}");

posted @ 2025-05-06 13:01  ttocr、com  阅读(88)  评论(0)    收藏  举报