private void ProcessNetwork()
        {
            app.WriteLine("Downsampling images...");

            foreach (ImagePair pair in imageList)
            {
                IMLData ideal = new BasicMLData(outputCount);
                int     idx   = pair.Identity;
                for (int i = 0; i < outputCount; i++)
                {
                    if (i == idx)
                    {
                        ideal.Data[i] = 1;
                    }
                    else
                    {
                        ideal.Data[i] = -1;
                    }
                }

                try
                {
                    var img  = new Bitmap(pair.File);
                    var data = new ImageMLData(img);
                    training.Add(data, ideal);
                }
                catch (Exception e)
                {
                    app.WriteLine("Error loading: " + pair.File
                                  + ": " + e.Message);
                }
            }

            String strHidden1 = GetArg("hidden1");
            String strHidden2 = GetArg("hidden2");

            if (training.Count == 0)
            {
                app.WriteLine("No images to create network for.");
                return;
            }

            training.Downsample(downsampleHeight, downsampleWidth);

            int hidden1 = int.Parse(strHidden1);
            int hidden2 = int.Parse(strHidden2);

            network = EncogUtility.SimpleFeedForward(training
                                                     .InputSize, hidden1, hidden2,
                                                     training.IdealSize, true);
            app.WriteLine("Created network: " + network);
        }
Example #2
0
        private void Learn_Click(object sender, RoutedEventArgs e)
        {
            var downsample = new Downsampler();
            var training   = new ImageMLDataSet(downsample, true, 1, -1);

            for (var i = 0; i < Images.Count; ++i)
            {
                var ideal = new BasicMLData(DIGITS_COUNT);
                for (int j = 0; j < DIGITS_COUNT; ++j)
                {
                    if (j == i)
                    {
                        ideal[j] = 1;
                    }
                    else
                    {
                        ideal[j] = -1;
                    }
                }
                foreach (var img in Images[i])
                {
                    MemoryStream  stream  = new MemoryStream();
                    BitmapEncoder encoder = new BmpBitmapEncoder();
                    encoder.Frames.Add(BitmapFrame.Create(img));
                    encoder.Save(stream);

                    var bitmap = new Drawing.Bitmap(stream);
                    var data   = new ImageMLData(bitmap);
                    training.Add(data, ideal);
                }
            }

            training.Downsample(DIGIT_HEIGHT, DIGIT_WIDTH);

            network = EncogUtility.SimpleFeedForward(training.InputSize, 35, 0, training.IdealSize, true);

            double strategyError  = 0.01;
            int    strategyCycles = 2000;

            var train = new ResilientPropagation(network, training);

            //train.AddStrategy(new ResetStrategy(strategyError, strategyCycles));
            EncogUtility.TrainDialog(train, network, training);

            EncogDirectoryPersistence.SaveObject(new FileInfo("network.eg"), network);
        }
        public void ProcessWhatIs()
        {
            String filename = GetArg("image");

            try
            {
                var img   = new Bitmap(filename);
                var input = new ImageMLData(img);
                input.Downsample(downsample, false, downsampleHeight,
                                 downsampleWidth, 1, -1);
                int winner = network.Winner(input);
                app.WriteLine("What is: " + filename + ", it seems to be: "
                              + neuron2identity[winner]);
            }
            catch (Exception e)
            {
                app.WriteLine("Error loading: " + filename + ", " + e.Message);
            }
        }
Example #4
0
        private void button1_Click(object sender, EventArgs e)
        {
            using (OpenFileDialog dlg = new OpenFileDialog())
            {
                dlg.Title  = "Open Image";
                dlg.Filter = "Image files (*.bmp, *.jpg, *.jpeg, *.jpe, *.jfif, *.png) | *.bmp; *.jpg; *.jpeg; *.jpe; *.jfif; *.png";

                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    var        bitMap = new Bitmap(dlg.FileName);
                    NeuralForm n      = new NeuralForm();
                    n.BitMap = bitMap;
                    n.Show();

                    //
                    var      network     = new BasicNetwork();
                    FileInfo networkFile = new FileInfo(NETWORK_PATH);
                    if (System.IO.File.Exists(NETWORK_PATH))
                    {
                        network = (BasicNetwork)(Encog.Persist.EncogDirectoryPersistence.LoadObject(networkFile));
                    }


                    int hCounter = 0; int Wcounter = 0;
                    int hMax         = bitMap.Height / SIZE;
                    int wMax         = bitMap.Width / SIZE;
                    var outputBitmap = new Bitmap(bitMap.Width, bitMap.Height);
                    while (hMax > hCounter)
                    {
                        Encog.ML.Data.Image.ImageMLDataSet testingSet = new Encog.ML.Data.Image.ImageMLDataSet(new Encog.Util.DownSample.RGBDownsample(), false, 1, -1);
                        var _25x25bitmap = new Bitmap(SIZE, SIZE);

                        for (int i = 0; i < SIZE; i++)
                        {
                            for (int j = 0; j < SIZE; j++)
                            {
                                var px = bitMap.GetPixel(Wcounter * SIZE + j, hCounter * SIZE + i);
                                _25x25bitmap.SetPixel(i, j, px);
                            }
                        }

                        ImageMLData data = new ImageMLData(_25x25bitmap);
                        testingSet.Add(data, null);
                        testingSet.Downsample(SIZE, SIZE);
                        bool isVege = false;

                        foreach (IMLDataPair pair in testingSet)
                        {
                            IMLData output = network.Compute(pair.Input);

                            if (output[1] > .05)
                            {
                                isVege = true;
                            }
                        }
                        for (int i = 0; i < SIZE; i++)
                        {
                            for (int j = 0; j < SIZE; j++)
                            {
                                var px = _25x25bitmap.GetPixel(i, j);
                                if (!isVege)
                                {
                                    outputBitmap.SetPixel(Wcounter * SIZE + j, hCounter * SIZE + i, px);
                                }
                                else
                                {
                                    outputBitmap.SetPixel(Wcounter * SIZE + j, hCounter * SIZE + i, Color.FromArgb(px.R, 0, px.B));
                                }
                            }
                        }

                        Wcounter++;
                        if (wMax <= Wcounter)
                        {
                            Wcounter = 0;
                            hCounter++;
                        }
                    }


                    NeuralForm n2 = new NeuralForm();
                    n2.BitMap = outputBitmap;
                    n2.Show();
                }
            }
        }
Example #5
0
        private void RecCanvas_MouseUp(object sender, MouseButtonEventArgs e)
        {
            recCanvas_drawing = false;

            var size = new Size(RecCanvas.ActualWidth, RecCanvas.ActualHeight);

            // Measure and arrange the surface
            // VERY IMPORTANT
            RecCanvas.Measure(size);
            RecCanvas.Arrange(new Rect(size));
            var renderBitmap = new RenderTargetBitmap((int)size.Width, (int)size.Height, 96d, 96d, PixelFormats.Pbgra32);

            renderBitmap.Render(RecCanvas);

            MemoryStream  stream  = new MemoryStream();
            BitmapEncoder encoder = new BmpBitmapEncoder();

            encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
            encoder.Save(stream);

            var bitmap = new Drawing.Bitmap(stream);

            var downsample = new Downsampler();
            var result     = downsample.DownSample(bitmap, DIGIT_HEIGHT, DIGIT_WIDTH);
            var image      = new Drawing.Bitmap(DIGIT_WIDTH, DIGIT_HEIGHT);

            for (var i = 0; i < DIGIT_HEIGHT; ++i)
            {
                for (var j = 0; j < DIGIT_WIDTH; ++j)
                {
                    image.SetPixel(j, i, Drawing.Color.FromArgb(
                                       255,
                                       (int)result[i * DIGIT_WIDTH + j],
                                       (int)result[i * DIGIT_WIDTH + j],
                                       (int)result[i * DIGIT_WIDTH + j]
                                       ));
                }
            }
            RecComp.Source = Imaging.CreateBitmapSourceFromHBitmap(
                image.GetHbitmap(),
                IntPtr.Zero,
                Int32Rect.Empty,
                BitmapSizeOptions.FromEmptyOptions());

            if (network == null)
            {
                return;
            }

            var input = new ImageMLData(bitmap);

            input.Downsample(downsample, false, DIGIT_HEIGHT, DIGIT_WIDTH, 1, -1);

            int winner = network.Winner(input);

            RecDigit.Text = winner.ToString();

            var data = network.Compute(input);

            for (var i = 0; i < DIGITS_COUNT; ++i)
            {
                Results[i] = new ResultObject
                {
                    Char   = i.ToString(),
                    Result = (data[i] + 1) / 2
                };
            }
        }
Example #6
0
        public static void Run()
        {
            FileInfo networkFile = new FileInfo(@"D:\Imagery\network\network.eg");

            var network = new BasicNetwork();

            network.AddLayer(new BasicLayer(null, true, SIZE * SIZE * 3));
            network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, NERUONCOUNT));
            network.AddLayer(new BasicLayer(new ActivationSigmoid(), false, 2));
            network.Structure.FinalizeStructure();
            network.Reset();

            if (System.IO.File.Exists(@"D:\Imagery\network\network.eg"))
            {
                network = (BasicNetwork)(Encog.Persist.EncogDirectoryPersistence.LoadObject(networkFile));
            }



            Encog.ML.Data.Image.ImageMLDataSet trainingSet = new Encog.ML.Data.Image.ImageMLDataSet(new RGBDownsample(), false, 1, -1);

            Random rnd = new Random();
            //take 1000,, take 5000 from nothing and scramble them
            List <string> fileEntries = Directory.GetFiles(@"D:\Imagery\_Vege").OrderBy(x => rnd.Next()).Take(1000).ToList();

            fileEntries.AddRange(Directory.GetFiles(@"D:\Imagery\_Nothing").OrderBy(x => rnd.Next()).Take(5000).ToArray());
            fileEntries = fileEntries.OrderBy(x => rnd.Next()).Take(6000).ToList();
            foreach (var file in fileEntries)
            {
                var         bitmap = new System.Drawing.Bitmap(file);
                ImageMLData data   = new ImageMLData(bitmap);
                if (file.Contains("_Nothing"))
                {
                    BasicMLData ideal = new BasicMLData(Nothing);
                    trainingSet.Add(data, ideal);
                }
                else
                {
                    BasicMLData ideal = new BasicMLData(Vegetation);
                    trainingSet.Add(data, ideal);
                }
            }
            trainingSet.Downsample(SIZE, SIZE);

            IMLTrain train = new Backpropagation(network, trainingSet, .001, 0.02)
            {
            };


            int epoch = 1;

            do
            {
                train.Iteration();
                Console.WriteLine(@"Epoch #" + epoch + @" Error: " + train.Error);
                epoch++;
            } while (epoch < 50);
            train.FinishTraining();

            Encog.Persist.EncogDirectoryPersistence.SaveObject(networkFile, (BasicNetwork)network);
            Encog.ML.Data.Image.ImageMLDataSet testingSet = new Encog.ML.Data.Image.ImageMLDataSet(new RGBDownsample(), false, 1, -1);
            fileEntries = Directory.GetFiles(@"D:\Imagery\_VegeTest").ToList();
            foreach (var file in fileEntries)
            {
                ImageMLData data  = new ImageMLData(new System.Drawing.Bitmap(file));
                BasicMLData ideal = new BasicMLData(Vegetation);
                testingSet.Add(data, ideal);
            }
            fileEntries = Directory.GetFiles(@"D:\Imagery\_NothingTest").ToList();
            foreach (var file in fileEntries)
            {
                ImageMLData data  = new ImageMLData(new System.Drawing.Bitmap(file));
                BasicMLData ideal = new BasicMLData(Nothing);
                testingSet.Add(data, ideal);
            }
            testingSet.Downsample(SIZE, SIZE);

            Console.WriteLine(@"Neural Network Results:");
            foreach (IMLDataPair pair in testingSet)
            {
                IMLData output = network.Compute(pair.Input);
                Console.WriteLine(@", actual (" + output[0] + @"," + output[1] + @"),ideal (" + pair.Ideal[0] + @"," + pair.Ideal[1] + ")");
            }

            EncogFramework.Instance.Shutdown();
        }