private RecognitionResult CreateRecognitionResult( int recResultCode, int[][] marks, bool[] sectionsValidity, StampResult stampResult, string stampNumber, string[] stampNumberAlts) { var recResult = new RecognitionResult(recResultCode) { StampResult = stampResult, StampNumber = stampNumber, StampNumberAlts = stampNumberAlts, BulletinNumber = recResultCode != (int)OcrRecognitionResult.MARK ? _ocr.BulletinNumber : -1, Marks = marks, SectionsValidity = sectionsValidity }; FindStampNumber(recResult); CreateStampInfo(recResult); if (recResult.ResultCode == OcrRecognitionResult.OK && recResult.StampOk) { if (recResult.BulletinNumber < 0 || recResult.BulletinNumber >= _electionManager.SourceData.Blanks.Length) { recResult.BlankType = BlankType.Bad; recResult.ResultDescription = "Недопустимый номер бюллетеня " + recResult.BulletinNumber; } else { var blank = _electionManager.SourceData.Blanks[recResult.BulletinNumber]; if (_electionManager.SourceData.IsVotingModeValidForBlank(blank, _recognitionStartVotingMode)) { Logger.LogVerbose(Message.RecognizerBulletinRecognized); for (int i = 0; i < recResult.Marks.Length; i++) { var curSectionMarks = recResult.Marks[i]; if (recResult.SectionsValidity[i]) { recResult.BlankType = BlankType.Valid; break; } if (curSectionMarks.Length > 0) recResult.BulletinWithExtraLabels = true; else recResult.BulletinWithoutLabels = true; } if (recResult.BlankType != BlankType.Valid) { if (recResult.BulletinWithExtraLabels) recResult.BlankType = BlankType.TooManyMarks; if (recResult.BulletinWithoutLabels) recResult.BlankType = BlankType.NoMarks; } recResult.ResultDescription = string.Format( "Бюллетень N {0} {1}. Печать: {2}. {3}. Время: {4}", recResult.BlankTypeDescription, blank.Marker, recResult.StampDescription, GetSquareDescription(recResultCode, recResult.Marks), DateTime.Now.ToString("HH:mm:ss.fff")); Logger.LogVerbose(Message.RecognizerBulletinResult, recResult.BlankTypeDescription, _recognitionStartVotingMode); } else { recResult.BlankType = BlankType.BadMode; recResult.ResultDescription = "Бюллетень не имеет текущего режима голосования"; Logger.LogVerbose(Message.RecognizerWrongModeForBulletin); } } } else { recResult.BlankType = BlankType.Bad; CreateBadBulletinInfo(recResult); recResult.ResultDescription = string.Format("Бюллетень неустановленной формы ({0}).", recResult.BadBulletinDescription); Logger.LogVerbose(Message.RecognizerNuf, recResult.ResultDescription); } var blankConfig = _config.Blanks.Get(recResult.BlankType, _sheetType); if (recResult.BlankType == BlankType.Bad && recResult.BadBulletinReason == BadBulletinReason.Stamp && _config.Blanks.Get(BlankType.BadStamp) != null) { blankConfig = _config.Blanks.Get(BlankType.BadStamp); } var imageFilePrefixStringBuilder = new StringBuilder(); imageFilePrefixStringBuilder.Append(blankConfig.ImageFilePrefix); if (!string.IsNullOrEmpty(recResult.BadBulletinFilePrefix)) { imageFilePrefixStringBuilder.Append('-'); imageFilePrefixStringBuilder.Append(recResult.BadBulletinFilePrefix); } if (_config.Ocr.Stamp.TestLevel == StampTestLevel.Halftone) { imageFilePrefixStringBuilder.Append('-'); imageFilePrefixStringBuilder.Append(recResult.StampNumber); } recResult.ImageFilePrefix = imageFilePrefixStringBuilder.ToString(); recResult.Marking = blankConfig.Marking; if (_recognitionStartVotingMode == VotingMode.Test) blankConfig = _config.Blanks.Get(BlankType.Test); recResult.ImageSavingType = blankConfig.ImageSavingType; return recResult; }
private void WriteRecognitionResultToLog( RecognitionResult recResult, StampResult stampResult, string stampNumber, string additionalInfo) { try { var recLogSb = new StringBuilder(); recLogSb.Append(_recognitionStartVotingMode); recLogSb.Append(','); recLogSb.Append(GetImageFileName(recResult.ImageFilePrefix)); recLogSb.Append(','); recLogSb.Append(_ocr.BulletinNumber); recLogSb.Append(','); recLogSb.Append(_scannerManager.SerialNumber); recLogSb.Append(','); recLogSb.Append(recResult.IntResultCode); recLogSb.Append(','); recLogSb.Append(stampNumber); recLogSb.Append(','); recLogSb.Append(stampResult); recLogSb.Append(','); recLogSb.Append(additionalInfo); if (!_scannerManager.SheetProcessingSession.Closed) { recLogSb.Append('\t'); recLogSb.Append(_scannerManager.SheetProcessingSession.Id); } _recognitionResultLogger.LogInfo(Message.RecognizerLog, recLogSb.ToString()); } catch (Exception ex) { Logger.LogError(Message.RecognizerLogError, ex); } }