static void SensorGaborFilterTest(int maxIterations) { string TrainingSetPath = Path.Combine("O:", "clean"); var filter = new Gabor2DFilter(); var writer = new MatrixToBitmapFileWriter(""); var sensor = new BitmapPicture2DSensor(presentationsPerInput: 1, pathSpeed: 2, useRandomOrigin: true); sensor.SetTrainingFolder(TrainingSetPath); sensor.AddFilter(filter); sensor.OnFilteredMatrixOutput += writer.OutputWriterHandler; int nbIterations = 0; foreach (var input in sensor.GetTrainingInputs(true)) { foreach (var iteration in input) { nbIterations++; if (nbIterations >= maxIterations) break; } if (nbIterations >= maxIterations) break; } }
public void CanGetTrainingInputsWithTransformationsAndGaborFilterInNormalOrder() { var sensor = new BitmapPicture2DSensor(pathSpeed: 10, useRandomOrigin: true); sensor.SetTrainingFolder(TrainingSetPath); sensor.AddFilter(new Gabor2DFilter()); var nbInputs = 0; var nbIterations = 0; foreach (var input in sensor.GetTrainingInputs(true)) { Assert.IsNotNull(input.CurrentFile); Assert.IsFalse(string.IsNullOrWhiteSpace(input.CategoryName)); nbInputs++; foreach (var iteration in input) { if (!iteration.IsBlank()) nbIterations++; } } Assert.AreEqual(TrainingSetSize, nbInputs, "nbInputs"); Assert.IsTrue(nbIterations >= TrainingSetSize, "nbIterations"); }
public void CanGetTrainingInputsWithTransformationsNoFiltersInNormalOrder() { var sensor = new BitmapPicture2DSensor(); sensor.SetTrainingFolder(TrainingSetPath); var nbInputs = 0; foreach (var input in sensor.GetTrainingInputs(true)) { Assert.IsNotNull(input.CurrentFile); Assert.IsFalse(string.IsNullOrWhiteSpace(input.CategoryName)); foreach (var iteration in input) { nbInputs++; } } Assert.IsTrue(nbInputs > TrainingSetSize); }
public void CanGetTrainingInputsNoTransformationsWithoutFiltersInNormalOrder() { int nbRepetitions = 2; var sensor = new BitmapPicture2DSensor(Default.AutomaticSize, Default.AutomaticSize, 0, nbRepetitions, TrainingOrder.Normal); sensor.SetTrainingFolder(TrainingSetPath); var nbInputs = 0; foreach (var input in sensor.GetTrainingInputs(false)) { Assert.IsNotNull(input.CurrentFile); Assert.IsFalse(string.IsNullOrWhiteSpace(input.CategoryName)); foreach (var iteration in input) { nbInputs++; } } Assert.AreEqual(nbRepetitions * TrainingSetSize, nbInputs); }
public void CanGetTrainingInputsNoTransformationsWithoutFiltersInRandomAllOrder() { int nbRepetitions = 2; var sensor = new BitmapPicture2DSensor(Default.AutomaticSize, Default.AutomaticSize, 0, nbRepetitions, TrainingOrder.RandomAll); sensor.SetTrainingFolder(TrainingSetPath); var nbInputs = 0; var categories = new List<string>(); foreach (var input in sensor.GetTrainingInputs(false)) { Assert.IsNotNull(input.CurrentFile); Assert.IsFalse(string.IsNullOrWhiteSpace(input.CategoryName)); categories.Add(input.CategoryName); foreach (var iteration in input) { nbInputs++; Debug.WriteLine("RandomAll order: " + input.CategoryName); } } Assert.AreEqual(nbRepetitions * TrainingSetSize, nbInputs); // Compare with normal order sequence var randomCategories = new List<string>(); var randomSensor = new BitmapPicture2DSensor(Default.AutomaticSize, Default.AutomaticSize, 0, nbRepetitions, TrainingOrder.Random); randomSensor.SetTrainingFolder(sensor.TrainingFolder.FullName); foreach (var input in randomSensor.GetTrainingInputs(false)) { randomCategories.Add(input.CategoryName); foreach (var iteration in input) { Debug.WriteLine("Random order: " + input.CategoryName); } } Assert.IsFalse(categories.SequenceEqual(randomCategories)); }
public void CanOutputBitmapFilesFromSensorGeneratedImagesUsingTwoSensorsAndOneOutputFolder() { var sensor = new BitmapPicture2DSensor(presentationsPerInput: 1, pathSpeed: 2); sensor.SetTrainingFolder(TrainingSetPath); var writer = new MatrixToBitmapFileWriter("SameFolder"); sensor.OnTransformedMatrixOutput += writer.OutputWriterHandler; var nbIterations = 0; foreach (var input in sensor.GetTrainingInputs(true)) { foreach (var iteration in input) { nbIterations++; } } Assert.AreEqual(nbIterations, writer.OutputFolder.GetFiles().Length); var sensor2 = new BitmapPicture2DSensor(presentationsPerInput: 1, pathSpeed: 2); sensor2.SetTrainingFolder(TrainingSetPath); var writer2 = new MatrixToBitmapFileWriter("sameFolder"); sensor2.OnTransformedMatrixOutput += writer2.OutputWriterHandler; var nbIterations2 = 0; foreach (var input in sensor2.GetTrainingInputs(true)) { foreach (var iteration in input) { nbIterations2++; } } Assert.AreEqual(nbIterations2, writer2.OutputFolder.GetFiles().Length); }
public void SpatialLayer2DGaussianCanLearnAndInferFromBitmapPicture2DSensor() { var sensor = new BitmapPicture2DSensor(presentationsPerInput: 1, pathSpeed: 2, useRandomOrigin: false); sensor.SetTrainingFolder(TrainingSetPath); var layer = new Spatial2DLayer(SpatialLayerType.Gaussian, 16, 16, 0.1, true); foreach (var input in sensor.GetTrainingInputs(true)) { foreach (var iteration in input) { layer.Learn(iteration); } } Assert.IsTrue(((SpatialNode2DGaussian)layer.ClonedNode).CoincidencesFrequencies.Keys.Count > 0); }
public void GenerateInputsAlwaysInsideSensor() { var sensor = new BitmapPicture2DSensor(pathSpeed: 100); sensor.SetTrainingFolder(TrainingSetPath); var writer = new MatrixToBitmapFileWriter(); sensor.OnTransformedMatrixOutput += writer.OutputWriterHandler; var nbInputIterationsOutside = 0; foreach (var input in sensor.GetTrainingInputs(true)) { Assert.IsNotNull(input.CurrentFile); Assert.IsFalse(string.IsNullOrWhiteSpace(input.CategoryName)); foreach (var iteration in input) { if (sensor.IsCurrentInputOutsideField()) nbInputIterationsOutside++; } } Assert.AreEqual(0, nbInputIterationsOutside); }
public void CanOutputFilteredInputsFromGabor2DFilter() { var filter = new Gabor2DFilter(); var writer = new MatrixToBitmapFileWriter(""); var sensor = new BitmapPicture2DSensor(presentationsPerInput: 1, pathSpeed: 2, useRandomOrigin: true); sensor.SetTrainingFolder(TrainingSetPath); sensor.AddFilter(filter); sensor.OnFilteredMatrixOutput += writer.OutputWriterHandler; int maxIterations = 100, nbIterations = 0; var begin = DateTime.Now; foreach (var input in sensor.GetTrainingInputs(true)) { foreach (var iteration in input) { nbIterations++; if (nbIterations >= maxIterations) break; } if (nbIterations >= maxIterations) break; } var end = DateTime.Now; Debug.WriteLine(begin); Debug.WriteLine("{0} (duration: {1:D} ms)", end, (int)(end - begin).TotalMilliseconds); Assert.AreEqual(maxIterations, writer.OutputFolder.GetFiles().Length); }
public void CanOutputBitmapFilesFromSensorTransformedInputsWithTranslationRotationAndScaling() { var sensor = new BitmapPicture2DSensor(presentationsPerInput: 1, pathSpeed: 2, rotationAngleMaxDegrees:180.0f, rotationSpeed:10.0f, scalingMin:0.5f, scalingMax:2.0f, scalingSpeed:0.1f); sensor.SetTrainingFolder(TrainingSetPath); var writer = new MatrixToBitmapFileWriter(""); sensor.OnTransformedMatrixOutput += writer.OutputWriterHandler; var nbIterations = 0; foreach (var input in sensor.GetTrainingInputs(true)) { foreach (var iteration in input) { nbIterations++; } } Assert.AreEqual(nbIterations, writer.OutputFolder.GetFiles().Length); }
public void CanOutputBitmapFilesFromSensorTransformedInputsWithTranslation() { var sensor = new BitmapPicture2DSensor(presentationsPerInput: 1, pathSpeed: 2, useRandomOrigin: false); sensor.SetTrainingFolder(TrainingSetPath); var writer = new MatrixToBitmapFileWriter(""); sensor.OnTransformedMatrixOutput += writer.OutputWriterHandler; var realNbInputs = sensor.TrainingFolder.EnumerateFiles("*.bmp", SearchOption.AllDirectories).Count(); var nbIterations = 0; var nbInputs = 0; foreach (var input in sensor.GetTrainingInputs(true)) { bool newInput = true; foreach (var iteration in input) { if (newInput) { nbInputs++; newInput = false; } nbIterations++; } } Assert.AreEqual(realNbInputs, nbInputs, "nbInputs"); Assert.AreEqual(nbIterations, writer.OutputFolder.GetFiles().Length, "nbIterations"); }
public void SensorGeneratesNoBlankOutput() { var sensor = new BitmapPicture2DSensor(pathSpeed: 1000); sensor.SetTrainingFolder(TrainingSetPath); foreach (var input in sensor.GetTrainingInputs(true)) { Assert.IsNotNull(input.CurrentFile); Assert.IsFalse(string.IsNullOrWhiteSpace(input.CategoryName)); foreach (var iteration in input) { Assert.AreEqual(false, iteration.IsBlank()); } } }
public void NoErrorWhenTrainingFolderEmpty() { var sensor = new BitmapPicture2DSensor(); var emptyFolder = Directory.CreateDirectory("empty"); sensor.SetTrainingFolder(emptyFolder.FullName); try { foreach (var input in sensor.GetTrainingInputs()) { Assert.Fail("This folder should be empty for testing purposes: " + sensor.TrainingFolder); } } catch (Exception e) { Assert.Fail("Should not throw an exception when an empty folder is used for training: " + e.ToString()); } }
public void ErrorWhenTrainingFolderNotSet() { var sensor = new BitmapPicture2DSensor(); try { foreach (var input in sensor.GetTrainingInputs()) { } Assert.Fail("No exception thrown while parsing training inputs with no training folder set"); } catch (Exception e) { Assert.IsInstanceOfType(e, typeof(HtmException), e.Message); } }
public void ErrorWhenTrainingFolderNotFound() { var sensor = new BitmapPicture2DSensor(); sensor.SetTrainingFolder("stuff.xyz"); try { foreach (var input in sensor.GetTrainingInputs()) { } Assert.Fail("No exception thrown while parsing training inputs with inexistent training folder"); } catch (Exception e) { Assert.IsInstanceOfType(e, typeof(DirectoryNotFoundException), e.ToString()); } }
public void CheckTrainingInputsAreInReverseOrder() { int nbRepetitions = 1; var sensor = new BitmapPicture2DSensor(Default.AutomaticSize, Default.AutomaticSize, 0, nbRepetitions, TrainingOrder.Reverse); sensor.SetTrainingFolder(TrainingSetPath); var nbInputs = 0; var categories = new List<string>(); foreach (var input in sensor.GetTrainingInputs(false)) { Assert.IsNotNull(input.CurrentFile); Assert.IsFalse(string.IsNullOrWhiteSpace(input.CategoryName)); categories.Add(input.CategoryName); foreach (var iteration in input) { nbInputs++; } } Assert.AreEqual(nbRepetitions * TrainingSetSize, nbInputs); Assert.IsTrue(categories.SequenceEqual(categories.OrderByDescending(s => s))); }