Beispiel #1
0
        public Bitmap DrawDataToGrid(IList <Tuple <Vector <double>, Color, string> > data, int imageSize, Color bg, int cols)
        {
            Contract.Requires(data.Count > 0);

            int count = data.Count;
            int rows  = (count + cols - 1) / cols;

            Size   size = new Size(1 + cols * (imageSize + 1), 1 + rows * (imageSize + 1));
            Bitmap img  = new Bitmap(size.Width, size.Height, PixelFormat.Format24bppRgb);

            var font = new Font(FontFamily.GenericSansSerif, 5);

            var drawingImg = new Bitmap(imageSize, imageSize, PixelFormat.Format24bppRgb);
            var ic         = new NetInputConvertor();

            using (Graphics g = Graphics.FromImage(img), imgG = Graphics.FromImage(drawingImg)) {
                g.Clear(bg);

                int row = 0;
                int col = 0;
                foreach (var item in data)
                {
                    Contract.Assert(row < rows && col < cols);

                    var bb = new Rectangle(1 + col * (imageSize + 1), 1 + row * (imageSize + 1), imageSize, imageSize);
                    imgG.Clear(item.Item2);
                    ic.VectorToImage(item.Item1, drawingImg);
                    g.DrawImageUnscaled(drawingImg, bb);

                    if (!string.IsNullOrWhiteSpace(item.Item3))
                    {
                        g.DrawString(item.Item3, font, Brushes.White, bb.X + 1, bb.Y + 1);
                        g.DrawString(item.Item3, font, Brushes.Black, bb.Location);
                    }

                    col += 1;
                    if (col >= cols)
                    {
                        col  = 0;
                        row += 1;
                    }
                }
            }

            return(img);
        }
Beispiel #2
0
        private void prepareInOut(MausrDb db)
        {
            var ic       = new NetInputConvertor();
            var dbInputs = db.SymbolDrawings.Where(x => x.Approved == true).ToList();

            var baseInputsAndDrawings = dbInputs
                                        .Select(sd => new { SymbolId = sd.Symbol.SymbolId, RawDrawing = sd.GetRawDrawing() })
                                        .ToList();

            var inputsAndDrawings = baseInputsAndDrawings.ToList();
            var dataProc          = new RawDataProcessor();

            if (trainSettings.GenerateExtraInputsByRotation != 0)
            {
                inputsAndDrawings.AddRange(baseInputsAndDrawings
                                           .Select(x => new {
                    SymbolId   = x.SymbolId,
                    RawDrawing = dataProc.Rotate(x.RawDrawing, trainSettings.GenerateExtraInputsByRotation)
                }));
                inputsAndDrawings.AddRange(baseInputsAndDrawings
                                           .Select(x => new {
                    SymbolId   = x.SymbolId,
                    RawDrawing = dataProc.Rotate(x.RawDrawing, -trainSettings.GenerateExtraInputsByRotation)
                }));
            }

            if (trainSettings.NormalizeInput)
            {
                foreach (var iad in inputsAndDrawings)
                {
                    dataProc.NormalizeInPlace(iad.RawDrawing);
                }
            }

            ic.Shuffle(inputsAndDrawings);

            var rasterizer = new Rasterizer()
            {
                ImageSize   = trainSettings.InputImgSizePx,
                DrawPoints  = false,
                ExtraMargin = true,
                PenSizePerc = trainSettings.PenThicknessPerc / 100f
            };

            int testSamplesCount = 1 + (trainSettings.TestDataSetSizePerc * inputsAndDrawings.Count / 100);
            {
                var testSet      = inputsAndDrawings.Take(testSamplesCount).ToList();
                var testDrawings = testSet.Select(x => x.RawDrawing).ToList();

                testInputs           = ic.CreateInputsMatrix(testDrawings, rasterizer, false);
                testOutIds           = testSet.Select(x => x.SymbolId).ToArray();
                testOutNeuronIndices = ic.CreateOutIndicesFromIds(testOutIds, network);
            }
            {
                var trainSet      = inputsAndDrawings.Skip(testSamplesCount).ToList();
                var trainDrawings = trainSet.Select(x => x.RawDrawing).ToList();

                trainInputs           = ic.CreateInputsMatrix(trainDrawings, rasterizer, false);
                trainOutIds           = trainSet.Select(x => x.SymbolId).ToArray();
                trainOutNeuronIndices = ic.CreateOutIndicesFromIds(trainOutIds, network);
            }
        }