Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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(' ');
        }
Ejemplo n.º 3
0
 public void PrepareLastTwoDigitsFromTheFrameNumber(IotaVtiOcrProcessor stateManager)
 {
     LastFrameNoDigit       = stateManager.GetBlockAtPosition(Image, stateManager.LastFrameNoDigitPosition, IsOddField);
     SecondLastFrameNoDigit = stateManager.GetBlockAtPosition(Image, stateManager.LastFrameNoDigitPosition - 1, IsOddField);
 }