Skip to content

How to convert the following Python code into C # code to make it the same code? #7212

Open
@bbhxwl

Description

@bbhxwl
import torch
import torchvision.transforms as transforms
from torchvision.models.detection import ssd300_vgg16
from PIL import Image
import numpy as np


def preprocess_image(image_path):
    """
    预处理输入图像,将其调整为模型需要的输入格式。
    """
    # 定义图像转换
    transform = transforms.Compose([
        transforms.Resize((300, 300)),  # 调整图像大小
        transforms.ToTensor(),  # 转换为张量
        transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  # 标准化
    ])

    # 打开图像并应用转换
    image = Image.open(image_path).convert('RGB')
    image_tensor = transform(image).unsqueeze(0)  # 添加批次维度

    return image_tensor

def run_inference(image_tensor, threshold=0.5):
    """
    使用 SSD 模型进行推理,并根据置信度分数过滤结果。
    """
    # 加载预训练的 SSD 模型
    model = ssd300_vgg16(pretrained=True)
    model.eval()  # 切换模型到评估模式

    with torch.no_grad():
        # 进行推理
        predictions = model(image_tensor)

    # 提取检测结果
    boxes = predictions[0]['boxes'].numpy()
    labels = predictions[0]['labels'].numpy()
    scores = predictions[0]['scores'].numpy()

    # 根据置信度分数过滤结果
    filtered_boxes = boxes[scores > threshold]
    filtered_labels = labels[scores > threshold]
    filtered_scores = scores[scores > threshold]

    return filtered_boxes, filtered_labels, filtered_scores

def print_results(boxes, labels, scores):
    """
    打印检测结果。
    """
    print("检测结果:")
    for i in range(len(labels)):
        print(f"Box: {boxes[i]}")
        print(f"Label: {labels[i]}")
        print(f"Score: {scores[i]:.2f}\n")

image_path = "/Users/xuzhibin/Downloads/6ee927a0d4f2c9862a918798de175f5.jpg"  
image_tensor = preprocess_image(image_path)
boxes, labels, scores = run_inference(image_tensor)
print_results(boxes, labels, scores)

using ConsoleApp10;
using Microsoft.ML.OnnxRuntime;
using Microsoft.ML.OnnxRuntime.Tensors;

string modelPath = "/Users/xuzhibin/Desktop/python/myScript/ssd300_vgg16.onnx";
using var session = new InferenceSession(modelPath);
var inputData=test.PreprocessImage("/Users/xuzhibin/Downloads/6ee927a0d4f2c9862a918798de175f5.jpg");
// 创建张量
var inputTensor = new DenseTensor<float>(inputData, new[] { 1, 3, 300, 300 });

// 设置输入
var inputs = new List<NamedOnnxValue>
{
    NamedOnnxValue.CreateFromTensor("input", inputTensor)
};

// 运行推理
using IDisposableReadOnlyCollection<DisposableNamedOnnxValue> results = session.Run(inputs);

// 获取输出
var boxes = results.FirstOrDefault(x => x.Name == "boxes").AsEnumerable<float>().ToArray();
var labels = results.FirstOrDefault(x => x.Name == "labels").AsEnumerable<long>().ToArray();
var scores = results.FirstOrDefault(x => x.Name == "scores").AsEnumerable<float>().ToArray();

// 输出前几个检测结果
Console.WriteLine("检测结果:");
for (int i = 0; i < Math.Min(5, labels.Length); i++)
{
    Console.WriteLine($"Box: {boxes[i * 4 + 0]}, {boxes[i * 4 + 1]}, {boxes[i * 4 + 2]}, {boxes[i * 4 + 3]}");
    Console.WriteLine($"Label: {labels[i]}");
    Console.WriteLine($"Score: {scores[i]}");
}
using System.Drawing;
using System.Drawing.Imaging;
using SkiaSharp;

namespace ConsoleApp10;

public class test
{
    public static float[] PreprocessImage(string imagePath)
    {
        // 读取图像为 SKBitmap
        using var inputStream = File.OpenRead(imagePath);
        using var originalBitmap = SKBitmap.Decode(inputStream);
        // 创建新的 Bitmap,调整到模型需要的大小
        using var resizedBitmap = originalBitmap.Resize(new SKImageInfo(300, 300), SKFilterQuality.High);
        // 创建数据数组
        var inputData = new float[1 * 3 * 300 * 300];
        int index = 0;

        // 遍历每个像素,将颜色值归一化到 [0, 1] 范围
        for (int y = 0; y < resizedBitmap.Height; y++)
        {
            for (int x = 0; x < resizedBitmap.Width; x++)
            {
                var pixel = resizedBitmap.GetPixel(x, y);
                inputData[index++] = pixel.Red / 255.0f;
                inputData[index++] = pixel.Green / 255.0f;
                inputData[index++] = pixel.Blue / 255.0f;
            }
        }

        return inputData;
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Deep LearningonnxExporting ONNX models or loading ONNX modelsquestionFurther information is requesteduntriagedNew issue has not been triaged

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions