Ejemplo n.º 1
0
        private void NormalizeAndConvertDataSet()
        {
            Log.Write(this.GetType(), "Normalizing data sets");

            List <DataSet> newDataSets = new List <DataSet>();

            List <Bitmap> allCharactersBitmap =
                _dataSetList
                .SelectMany(ds => ds.Items, (ds, item) => new { ds, item })
                .SelectMany(c => c.item.charactersBitmap)
                .ToList();


            _normalizedHeight = allCharactersBitmap.Max(c => c.Height);
            _normalizedWidth  = allCharactersBitmap.Max(c => c.Width);

            char[] labels =
                _dataSetList
                .SelectMany(ds => ds.Items, (ds, item) => new { ds, item })
                .SelectMany(c => c.item.charactersLabelsChar)
                .Distinct()
                .OrderBy(c => c)
                .ToArray();

            _dictionary = DictionaryTools.CreateDictionaries(labels);

            foreach (DataSet dataSet in _dataSetList)
            {
                Parallel.ForEach(dataSet.Items, dataSetItem =>
                {
                    dataSetItem.charactersLabelsInt =
                        DictionaryTools.CharToInt(_dictionary, dataSetItem.charactersLabelsChar);
                    dataSetItem.charactersBitmap =
                        dataSetItem
                        .charactersBitmap
                        .Select(ch => new Bitmap(ch, _normalizedWidth, _normalizedHeight))
                        .ToArray();
                    dataSetItem.charactersDouble =
                        dataSetItem
                        .charactersBitmap
                        .Select(ch =>
                                dataSet
                                .CourtImageEngine
                                .ConvertImageToDouble(new Bitmap(ch, _normalizedWidth, _normalizedHeight)))
                        .ToArray();
                });
            }
        }
Ejemplo n.º 2
0
        public string Predict(Bitmap imageBitmap, string courtName, string color = null)
        {
            IImageEngine imageEngine = CreateCourtImageEngineObject(courtName);

            ColorsEnum?colorEnum = null;

            if (
                !string.IsNullOrWhiteSpace(color) &&
                Enum.GetNames(typeof(ColorsEnum)).Any(c => c.Equals(color, StringComparison.InvariantCultureIgnoreCase)))
            {
                Enum.TryParse(color, true, out ColorsEnum tmpColorEnum);
                colorEnum = tmpColorEnum;
            }

            Bitmap[]   charactersBitmap = imageEngine.ExtractCharacters(imageBitmap, colorEnum);
            double[][] charactersDouble =
                charactersBitmap
                .Select(ch => imageEngine.ConvertImageToDouble(new Bitmap(ch, _normalizedWidth, _normalizedHeight)))
                .ToArray();

            int[] x = Engine.Predict(charactersDouble);

            return(string.Concat(DictionaryTools.IntToChar(_dictionary, x)));
        }