I want to load images from a bitmap or byte[] in memory. Most of the samples are using files.
I want to run predictions on a video stream. We can get frames out in bitmaps or byte arrays.
public class MagsData2
{
public Image ImageData;
}
public class MagsData
{
public byte[] ImageData;
}
Image btmap = Bitmap.FromFile("assets/images/img.jpg");
var images = new List<MagsData2>() { new MagsData2() { ImageData = btmap } };
var images = new List<MagsData>() { new MagsData() { ImageData = ImageToByte(btmap) } };
Using first one gives exception:
System.ArgumentOutOfRangeException: 'Could not determine an IDataView type and registered custom types for member ImageData (Parameter 'rawType')'
on line
IDataView imageDataView = mlContext.Data.LoadFromEnumerable(images);
Second one gives exception:
System.ArgumentOutOfRangeException: 'Schema mismatch for input column 'ImageData':
expected String, got VarVector<Byte> (Parameter 'inputSchema')'
on line
var model = pipeline.Fit(data);
relevant code
var data = mlContext.Data.LoadFromEnumerable(new List<MagsData>());
var pipeline = mlContext.Transforms.LoadImages(outputColumnName: "image", imageFolder: "", inputColumnName: nameof(MagsData.ImageData))
.Append(mlContext.Transforms.ResizeImages(outputColumnName: "image", imageWidth: ImageNetSettings.imageWidth, imageHeight: ImageNetSettings.imageHeight, inputColumnName: "image"))
.Append(mlContext.Transforms.ExtractPixels(outputColumnName: "image"))
.Append(mlContext.Transforms.ApplyOnnxModel(modelFile: modelLocation, outputColumnNames: new[] { TinyYoloModelSettings.ModelOutput }, inputColumnNames: new[] { TinyYoloModelSettings.ModelInput }));
var model = pipeline.Fit(data);