使用 .NET Core 和 TensorFlow 进行实时图像识别

作者:微信公众号:【架构师老卢】
8-2 7:26
34

概述:在快速发展的人工智能领域,实时图像识别是一项重大创新。将 .NET Core 与 TensorFlow(领先的机器学习开源平台)集成,可以为构建实时图像识别应用程序提供强大的功能。本文探讨了先进的技术和实际示例,以说明如何有效地实现这种集成。设置环境步骤 1:创建新的 .NET Core 项目首先,创建新的 .NET Core 控制台应用程序:dotnet new console -n RealTimeImageRecognition cd RealTimeImageRecognition步骤 2:添加所需的 NuGet 包将 TensorFlow.NET 和 SciSharp.Tensor

在快速发展的人工智能领域,实时图像识别是一项重大创新。将 .NET Core 与 TensorFlow(领先的机器学习开源平台)集成,可以为构建实时图像识别应用程序提供强大的功能。本文探讨了先进的技术和实际示例,以说明如何有效地实现这种集成。

设置环境

步骤 1:创建新的 .NET Core 项目
首先,创建新的 .NET Core 控制台应用程序:

dotnet new console -n RealTimeImageRecognition  
cd RealTimeImageRecognition

步骤 2:添加所需的 NuGet 包
将 TensorFlow.NET 和 SciSharp.TensorFlow.Redist 包添加到项目中:

dotnet add package TensorFlow.NET  
dotnet add package SciSharp.TensorFlow.Redist

第 3 步:安装 TensorFlow
确保您已安装 TensorFlow。您可以从 TensorFlow 下载并安装它。

实现实时图像识别

步骤 4:加载和预处理模型
加载用于图像识别的预训练 TensorFlow 模型。在此示例中,我们将使用 MobileNet 模型,该模型针对移动和实时应用程序进行了优化。

using System;
using Tensorflow;
using static Tensorflow.Binding;
using Tensorflow.NumPy;

public class ImageRecognition
{
    private readonly string modelFile = "mobilenet_v2_1.4_224_frozen.pb";
    private readonly string labelsFile = "labels.txt";
    private readonly int inputHeight = 224;
    private readonly int inputWidth = 224;
    private readonly string inputMean = "128";
    private readonly string inputStd = "128";

    private Graph graph;
    private Session session;

    public ImageRecognition()
    {
        graph = new Graph().as_default();
        graph.Import(modelFile);
        session = tf.Session(graph);
    }
}

第 5 步:加载和预处理图像
实现一种方法来加载和预处理图像,然后再将它们输入到模型中:

public TFTensor LoadImage(string filePath)
{
    var bitmap = new Bitmap(filePath);
    var resized = new Bitmap(bitmap, new Size(inputWidth, inputHeight));
    var matrix = new NDArray<float>(new Shape(1, inputHeight, inputWidth, 3));

    for (int y = 0; y < inputHeight; y++)
    {
        for (int x = 0; x < inputWidth; x++)
        {
            var color = resized.GetPixel(x, y);
            matrix[0, y, x, 0] = (color.R - float.Parse(inputMean)) / float.Parse(inputStd);
            matrix[0, y, x, 1] = (color.G - float.Parse(inputMean)) / float.Parse(inputStd);
            matrix[0, y, x, 2] = (color.B - float.Parse(inputMean)) / float.Parse(inputStd);
        }
    }

    return matrix;
}

步骤 6:执行推理
通过模型运行预处理的图像以获得预测:

public string[] ReadLabels()
{
    return File.ReadAllLines(labelsFile);
}

public string Predict(string imagePath)
{
    var tensor = LoadImage(imagePath);
    var results = session.run(graph.OperationByName("MobilenetV2/Predictions/Reshape_1"), new FeedItem(graph.OperationByName("input"), tensor));

    var probabilities = results.First().ToArray<float>();
    var labels = ReadLabels();

    var bestIndex = Array.IndexOf(probabilities, probabilities.Max());
    return labels[bestIndex];
}

步骤 7:与实时数据源
集成对于实时图像识别,将图像加载和预测逻辑与实时数据源(例如网络摄像头源)集成。使用适当的库从网络摄像头捕获图像,例如 OpenCV 或 AForge.NET。

示例:使用 OpenCV 捕获网络摄像头图像
安装 OpenCV:

pip install opencv-python

从网络摄像头捕获图像,并将其传递给 TensorFlow 模型进行预测:

using OpenCvSharp;  
  
public void RecognizeFromWebcam()  
{  
    using var capture = new VideoCapture(0);  
    using var window = new Window("Real-Time Image Recognition");  
    var image = new Mat();  
  
    while (true)  
    {  
        capture.Read(image);  
        if (image.Empty())  
            break;  
  
        var filePath = "frame.jpg";  
        image.SaveImage(filePath);  
  
        var label = Predict(filePath);  
        Cv2.PutText(image, $"Prediction: {label}", new Point(10, 30), HersheyFonts.HersheySimplex, 1.0, Scalar.White, 2);  
        window.ShowImage(image);  
  
        if (Cv2.WaitKey(1) == 27)  
            break; // Exit on 'ESC' key press  
    }  
}

将 TensorFlow 与 .NET Core 集成以进行实时图像识别,为开发高级 AI 应用程序提供了强大的工具集。通过利用预训练模型,您可以快速实现图像识别功能,并使用实时数据源(如网络摄像头)增强图像识别功能。这种方法不仅展示了 .NET Core 的多功能性,还突出了将其与 TensorFlow 相结合以实现尖端 AI 解决方案的潜力。

阅读排行