ImageEstimatorsCatalog.ResizeImages 方法

定義

建立 ImageResizingEstimator ,以將 中指定 inputColumnName 之資料行的影像大小調整為新的資料行: outputColumnName

public static Microsoft.ML.Transforms.Image.ImageResizingEstimator ResizeImages (this Microsoft.ML.TransformsCatalog catalog, string outputColumnName, int imageWidth, int imageHeight, string inputColumnName = default, Microsoft.ML.Transforms.Image.ImageResizingEstimator.ResizingKind resizing = Microsoft.ML.Transforms.Image.ImageResizingEstimator+ResizingKind.IsoCrop, Microsoft.ML.Transforms.Image.ImageResizingEstimator.Anchor cropAnchor = Microsoft.ML.Transforms.Image.ImageResizingEstimator+Anchor.Center);
static member ResizeImages : Microsoft.ML.TransformsCatalog * string * int * int * string * Microsoft.ML.Transforms.Image.ImageResizingEstimator.ResizingKind * Microsoft.ML.Transforms.Image.ImageResizingEstimator.Anchor -> Microsoft.ML.Transforms.Image.ImageResizingEstimator
<Extension()>
Public Function ResizeImages (catalog As TransformsCatalog, outputColumnName As String, imageWidth As Integer, imageHeight As Integer, Optional inputColumnName As String = Nothing, Optional resizing As ImageResizingEstimator.ResizingKind = Microsoft.ML.Transforms.Image.ImageResizingEstimator+ResizingKind.IsoCrop, Optional cropAnchor As ImageResizingEstimator.Anchor = Microsoft.ML.Transforms.Image.ImageResizingEstimator+Anchor.Center) As ImageResizingEstimator

參數

catalog
TransformsCatalog

轉換的目錄。

outputColumnName
String

轉換所產生的 inputColumnName 資料行名稱。 此資料行的資料類型會與輸入資料行的資料類型相同。

imageWidth
Int32

已轉換的影像寬度。

imageHeight
Int32

已轉換的影像高度。

inputColumnName
String

具有影像的資料行名稱。 此估算器會透過 MLImage 運作。

resizing
ImageResizingEstimator.ResizingKind

如 中指定的 ImageResizingEstimator.ResizingKind 影像調整大小類型。

cropAnchor
ImageResizingEstimator.Anchor

放置錨點的位置,以開始裁剪。 中定義的選項 ImageResizingEstimator.Anchor

傳回

範例

using System;
using System.IO;
using Microsoft.ML;
using Microsoft.ML.Data;

namespace Samples.Dynamic
{
    public static class ResizeImages
    {
        // Example on how to load the images from the file system, and resize them.
        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
            //
            // 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);
            // Image loading pipeline.
            var pipeline = mlContext.Transforms.LoadImages("ImageObject",
                imagesFolder, "ImagePath")
                .Append(mlContext.Transforms.ResizeImages("ImageObjectResized",
                inputColumnName: "ImageObject", imageWidth: 100, imageHeight: 100));

            var transformedData = pipeline.Fit(data).Transform(data);
            // The transformedData IDataView contains the resized images now.

            // Preview the transformedData.
            PrintColumns(transformedData);

            // ImagePath    Name         ImageObject               ImageObjectResized
            // tomato.bmp   tomato       {Width=800, Height=534}   {Width=100, Height=100}
            // banana.jpg   banana       {Width=800, Height=288}   {Width=100, Height=100}
            // hotdog.jpg   hotdog       {Width=800, Height=391}   {Width=100, Height=100}
            // tomato.jpg   tomato       {Width=800, Height=534}   {Width=100, Height=100}
        }

        private static void PrintColumns(IDataView transformedData)
        {
            Console.WriteLine("{0, -25} {1, -25} {2, -25} {3, -25}", "ImagePath",
                "Name", "ImageObject", "ImageObjectResized");

            using (var cursor = transformedData.GetRowCursor(transformedData
                .Schema))
            {
                // Note that it is best to get the getters and values *before*
                // iteration, so as to facilitate buffer sharing (if applicable), and
                // column -type validation once, rather than many times.
                ReadOnlyMemory<char> imagePath = default;
                ReadOnlyMemory<char> name = default;
                MLImage imageObject = null;
                MLImage resizedImageObject = null;

                var imagePathGetter = cursor.GetGetter<ReadOnlyMemory<char>>(cursor
                    .Schema["ImagePath"]);

                var nameGetter = cursor.GetGetter<ReadOnlyMemory<char>>(cursor
                    .Schema["Name"]);

                var imageObjectGetter = cursor.GetGetter<MLImage>(cursor.Schema[
                    "ImageObject"]);

                var resizedImageGetter = cursor.GetGetter<MLImage>(cursor.Schema[
                    "ImageObjectResized"]);

                while (cursor.MoveNext())
                {
                    imagePathGetter(ref imagePath);
                    nameGetter(ref name);
                    imageObjectGetter(ref imageObject);
                    resizedImageGetter(ref resizedImageObject);

                    Console.WriteLine("{0, -25} {1, -25} {2, -25} {3, -25}",
                        imagePath, name,
                        $"Width={imageObject.Width}, Height={imageObject.Height}",
                        $"Width={resizedImageObject.Width}, Height={resizedImageObject.Height}");
                }

                // Dispose the image.
                imageObject.Dispose();
                resizedImageObject.Dispose();
            }
        }
    }
}

適用於