public int GetLastFrameNoDigitPosition(IotaVtiOcrProcessor stateManager) { for (int i = IotaVtiOcrProcessor.FIRST_FRAME_NO_DIGIT_POSITIONS; i <= IotaVtiOcrProcessor.MAX_POSITIONS; i++) { uint[] pixels = stateManager.GetBlockAtPosition(Image, i, IsOddField); int nuberSignalPixels = pixels.Count(x => x < 127); if (stateManager.IsMatchingSignature(nuberSignalPixels) /* Matches to blank block */) { return(i); } } return(-1); }
private static char OcrBlock(uint[] fieldPixels, IotaVtiOcrProcessor stateManager, int blockIndex, bool isOddField) { uint[] block = stateManager.GetBlockAtPosition(fieldPixels, blockIndex, isOddField); s_DiffSignatures[0] = GetDiffSignature(block, stateManager.ZeroDigitPattern); s_DiffDigits[0] = 0; s_DiffSignatures[1] = GetDiffSignature(block, stateManager.OneDigitPattern); s_DiffDigits[1] = 1; s_DiffSignatures[2] = GetDiffSignature(block, stateManager.TwoDigitPattern); s_DiffDigits[2] = 2; s_DiffSignatures[3] = GetDiffSignature(block, stateManager.ThreeDigitPattern); s_DiffDigits[3] = 3; s_DiffSignatures[4] = GetDiffSignature(block, stateManager.FourDigitPattern); s_DiffDigits[4] = 4; s_DiffSignatures[5] = GetDiffSignature(block, stateManager.FiveDigitPattern); s_DiffDigits[5] = 5; s_DiffSignatures[6] = GetDiffSignature(block, stateManager.SixDigitPattern); s_DiffDigits[6] = 6; s_DiffSignatures[7] = GetDiffSignature(block, stateManager.SevenDigitPattern); s_DiffDigits[7] = 7; s_DiffSignatures[8] = GetDiffSignature(block, stateManager.EightDigitPattern); s_DiffDigits[8] = 8; s_DiffSignatures[9] = GetDiffSignature(block, stateManager.NineDigitPattern); s_DiffDigits[9] = 9; double maxStrictMatch = stateManager.BlockWidth * stateManager.BlockHeight / 12.0; double maxMatch = stateManager.BlockWidth * stateManager.BlockHeight / 8.0; int strictMatchesIdx = 0; int matchesIdx = 0; for (int i = 0; i < 10; i++) { if (s_DiffSignatures[i] < maxStrictMatch && strictMatchesIdx < MAX_MATCHES) { s_StrictMatches[strictMatchesIdx] = s_DiffDigits[i]; strictMatchesIdx++; } if (s_DiffSignatures[i] < maxMatch && matchesIdx < MAX_MATCHES) { s_Matches[matchesIdx] = s_DiffDigits[i]; matchesIdx++; } } if (strictMatchesIdx == 1) { return(s_StrictMatches[0].ToString()[0]); } else if (strictMatchesIdx == 0 && matchesIdx == 1) { return(s_Matches[0].ToString()[0]); } else if (strictMatchesIdx > 1 || matchesIdx > 1) { var allMatches = new List <int>(); if (strictMatchesIdx > 1) { for (int i = 0; i < strictMatchesIdx; i++) { allMatches.Add(s_StrictMatches[i]); } } else if (matchesIdx > 1) { for (int i = 0; i < matchesIdx; i++) { allMatches.Add(s_Matches[i]); } } bool areAll8693Items = !allMatches.Any(x => x != 3 && x != 6 && x != 9 && x != 8); if (areAll8693Items) { bool is8Present = allMatches.Contains(8); bool is9Present = allMatches.Contains(9); bool is6Present = allMatches.Contains(6); bool is3Present = allMatches.Contains(3); return(DistinguishEightFromSimilarChars(block, stateManager, is9Present, is6Present, is3Present, is8Present)); } } return(' '); }
public void PrepareLastTwoDigitsFromTheFrameNumber(IotaVtiOcrProcessor stateManager) { LastFrameNoDigit = stateManager.GetBlockAtPosition(Image, stateManager.LastFrameNoDigitPosition, IsOddField); SecondLastFrameNoDigit = stateManager.GetBlockAtPosition(Image, stateManager.LastFrameNoDigitPosition - 1, IsOddField); }