File: Dynamic\Transforms\ImageAnalytics\DnnFeaturizeImage.cs
Web Access
Project: src\docs\samples\Microsoft.ML.Samples\Microsoft.ML.Samples.csproj (Microsoft.ML.Samples)
using System.IO;
using System.Linq;
using Microsoft.ML;
using Microsoft.ML.Data;
 
namespace Samples.Dynamic
{
    public static class DnnFeaturizeImage
    {
        public static void Example()
        {
            // Create a new ML context, for ML.NET operations. It can be used for
            // exception tracking and logging, as well as the source of randomness.
            var mlContext = new MLContext();
 
            // Downloading a few images, and an images.tsv file, which contains a
            // list of the files from the dotnet/machinelearning/test/data/images/.
            // If you inspect the fileSystem, after running this line, an "images"
            // folder will be created, containing 4 images, and a .tsv file
            // enumerating the images. 
            var imagesDataFile = Microsoft.ML.SamplesUtils.DatasetUtils
                .GetSampleImages();
 
            // Preview of the content of the images.tsv file, which lists the images
            // to operate on
            //
            // imagePath    imageType
            // tomato.bmp   tomato
            // banana.jpg   banana
            // hotdog.jpg   hotdog
            // tomato.jpg   tomato
 
            var data = mlContext.Data.CreateTextLoader(new TextLoader.Options()
            {
                Columns = new[]
                {
                        new TextLoader.Column("ImagePath", DataKind.String, 0),
                        new TextLoader.Column("Name", DataKind.String, 1),
                }
            }).Load(imagesDataFile);
 
            var imagesFolder = Path.GetDirectoryName(imagesDataFile);
 
            // Installing the Microsoft.ML.DNNImageFeaturizer packages copies the models in the
            // `DnnImageModels` folder. 
            // Image loading pipeline. 
            var pipeline = mlContext.Transforms.LoadImages("ImageObject",
                imagesFolder, "ImagePath")
                .Append(mlContext.Transforms.ResizeImages("ImageObject", imageWidth:
                    224, imageHeight: 224))
                .Append(mlContext.Transforms.ExtractPixels("Pixels", "ImageObject"))
                .Append(mlContext.Transforms.DnnFeaturizeImage("FeaturizedImage",
                    m => m.ModelSelector.ResNet18(mlContext, m.OutputColumn, m
                    .InputColumn), "Pixels"));
 
            var transformedData = pipeline.Fit(data).Transform(data);
 
            var FeaturizedImageColumnsPerRow = transformedData.GetColumn<float[]>(
                "FeaturizedImage").ToArray();
 
            // Preview of FeaturizedImageColumnsPerRow for the first row,
            // FeaturizedImageColumnsPerRow[0]
            //
            // 0.696136236
            // 0.2661711
            // 0.440882325
            // 0.157903448
            // 0.0339231342
            // 0
            // 0.0936501548
            // 0.159010679
            // 0.394427955
 
        }
    }
}