Skip to content

Download images only when not present on disk and print warning messages when converting unsupported pixel format. #3625

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
May 1, 2019
Prev Previous commit
Next Next commit
fix log message assert.:
  • Loading branch information
codemzs committed May 1, 2019
commit 3cf65da472bd877018cb0c35aaf3f9ab0d8a784e
2 changes: 2 additions & 0 deletions src/Microsoft.ML.ImageAnalytics/ImageGrayscale.cs
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,8 @@ protected override Delegate MakeGetter(DataViewRow input, int iinfo, Func<int, b
{
g.DrawImage(src, srcRectangle, 0, 0, src.Width, src.Height, GraphicsUnit.Pixel, attributes);
}

dst.Tag = src.Tag;
Contracts.Assert(dst.Width == src.Width && dst.Height == src.Height);
};

Expand Down
2 changes: 2 additions & 0 deletions src/Microsoft.ML.ImageAnalytics/ImageResizer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -408,6 +408,8 @@ protected override Delegate MakeGetter(DataViewRow input, int iinfo, Func<int, b
{
g.DrawImage(src, destRectangle, srcRectangle, GraphicsUnit.Pixel);
}

dst.Tag = src.Tag;
Contracts.Assert(dst.Width == info.ImageWidth && dst.Height == info.ImageHeight);
};

Expand Down
1 change: 1 addition & 0 deletions src/Microsoft.ML.ImageAnalytics/VectorToImageTransform.cs
Original file line number Diff line number Diff line change
Expand Up @@ -410,6 +410,7 @@ private ValueGetter<Bitmap> GetterFromType<TValue>(PrimitiveDataViewType srcType
(int)Math.Round(blue * scale - offset));
}
dst.SetPixel(x, y, pixel);
dst.Tag = nameof(VectorToImageConvertingTransformer);
}
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -843,26 +843,30 @@ public void TensorFlowTransformCifar()
var tensorFlowModel = mlContext.Model.LoadTensorFlowModel(modelLocation);
var schema = tensorFlowModel.GetInputSchema();
Assert.True(schema.TryGetColumnIndex("Input", out int column));
var type = (VectorDataViewType)schema[column].Type;
var type = (VectorDataViewType) schema[column].Type;
var imageHeight = type.Dimensions[0];
var imageWidth = type.Dimensions[1];

var dataFile = GetDataPath("images/imagesmixedpixelformat.tsv");
var imageFolder = Path.GetDirectoryName(dataFile);
var data = mlContext.Data.LoadFromTextFile(dataFile,
columns: new[]
{
new TextLoader.Column("ImagePath", DataKind.String, 0),
new TextLoader.Column("Name", DataKind.String, 1),
}
);
{
new TextLoader.Column("ImagePath", DataKind.String, 0),
new TextLoader.Column("Name", DataKind.String, 1),
}
);

var pipeEstimator = new ImageLoadingEstimator(mlContext, imageFolder, ("ImageReal", "ImagePath"))
.Append(new ImageResizingEstimator(mlContext, "ImageCropped", imageWidth, imageHeight, "ImageReal"))
.Append(new ImagePixelExtractingEstimator(mlContext, "Input", "ImageCropped", interleavePixelColors: true));
var pipeEstimator = new ImageLoadingEstimator(mlContext, imageFolder,
("ImageReal", "ImagePath"))
.Append(new ImageResizingEstimator(mlContext, "ImageCropped",
imageWidth, imageHeight, "ImageReal"))
.Append(new ImagePixelExtractingEstimator(mlContext, "Input",
"ImageCropped", interleavePixelColors: true));

var pixels = pipeEstimator.Fit(data).Transform(data);
IDataView trans = tensorFlowModel.ScoreTensorFlowModel("Output", "Input").Fit(pixels).Transform(pixels);
IDataView trans = tensorFlowModel.ScoreTensorFlowModel("Output", "Input")
.Fit(pixels).Transform(pixels);

trans.Schema.TryGetColumnIndex("Output", out int output);
using (var cursor = trans.GetRowCursor(trans.Schema["Output"]))
Expand All @@ -882,21 +886,41 @@ public void TensorFlowTransformCifar()
getter2(ref buffer2);
Assert.Equal(10, buffer.Length);
Assert.Equal(10, buffer2.Length);
Assert.Equal(buffer.DenseValues().ToArray(), buffer2.DenseValues().ToArray());
Assert.Equal(buffer.DenseValues().ToArray(),
buffer2.DenseValues().ToArray());
numRows += 1;
}

Assert.Equal(7, numRows);
}
}

//Temp.
if(RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
logMessages.ForEach(msg => Console.WriteLine(msg));
Assert.Contains(
@"[Source=Mapper; ImageResizingTransformer, Kind=Warning] Encountered image " +
GetDataPath("images/tomato_indexedpixelformat.gif") +
" of unsupported pixel format Format8bppIndexed but converting it to Format32bppArgb.",
logMessages);

Assert.Contains(@"[Source=Mapper; ImageResizingTransformer, Kind=Warning] Encountered image " + GetDataPath("images/tomato_indexedpixelformat.gif") + " of unsupported pixel format Format8bppIndexed but converting it to Format32bppArgb.", logMessages);
Assert.Contains(@"[Source=Mapper; ImageResizingTransformer, Kind=Warning] Encountered image " + GetDataPath("images/taco_invalidpixelformat.jpg") + " of unsupported pixel format 8207 but converting it to Format32bppArgb.", logMessages);
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ||
RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
//temp.
logMessages.ForEach(msg => Console.WriteLine(msg));

Assert.Contains(
@"[Source=Mapper; ImageResizingTransformer, Kind=Warning] Encountered image " +
GetDataPath("images/taco_invalidpixelformat.jpg") +
" of unsupported pixel format Format32bppRgb but converting it to Format32bppArgb.",
logMessages);
}
else
{
Assert.Contains(
@"[Source=Mapper; ImageResizingTransformer, Kind=Warning] Encountered image " +
GetDataPath("images/taco_invalidpixelformat.jpg") +
" of unsupported pixel format 8207 but converting it to Format32bppArgb.",
logMessages);
}
}

[TensorFlowFact]
Expand Down