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(); }); } }
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))); }