Ejemplo n.º 1
0
        private Angle GetAngle(Mat src)
        {
            Angle angle    = new Angle();
            Mat   angleImg = new Mat();

            CvInvoke.Resize(src, angleImg, new Size(angleDstWidth, angleDstHeight));
            Tensor <float> inputTensors = OcrUtils.SubstractMeanNormalize(angleImg, MeanValues, NormValues);
            var            inputs       = new List <NamedOnnxValue>
            {
                NamedOnnxValue.CreateFromTensor(inputNames[0], inputTensors)
            };

            try
            {
                using (IDisposableReadOnlyCollection <DisposableNamedOnnxValue> results = angleNet.Run(inputs))
                {
                    var resultsArray = results.ToArray();
                    Console.WriteLine(resultsArray);
                    float[] outputData = resultsArray[0].AsEnumerable <float>().ToArray();
                    return(ScoreToAngle(outputData, angleCols));
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message + ex.StackTrace);
                //throw ex;
            }
            return(angle);
        }
Ejemplo n.º 2
0
        private TextLine GetTextLine(Mat src)
        {
            TextLine textLine = new TextLine();

            float scale    = (float)crnnDstHeight / (float)src.Rows;
            int   dstWidth = (int)((float)src.Cols * scale);

            Mat srcResize = new Mat();

            CvInvoke.Resize(src, srcResize, new Size(dstWidth, crnnDstHeight));
            Tensor <float> inputTensors = OcrUtils.SubstractMeanNormalize(srcResize, MeanValues, NormValues);
            var            inputs       = new List <NamedOnnxValue>
            {
                NamedOnnxValue.CreateFromTensor(inputNames[0], inputTensors)
            };

            try
            {
                using (IDisposableReadOnlyCollection <DisposableNamedOnnxValue> results = crnnNet.Run(inputs))
                {
                    var     resultsArray = results.ToArray();
                    var     dimensions   = resultsArray[0].AsTensor <float>().Dimensions;
                    float[] outputData   = resultsArray[0].AsEnumerable <float>().ToArray();

                    return(ScoreToTextLine(outputData, dimensions[1], dimensions[2]));
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message + ex.StackTrace);
                //throw ex;
            }

            return(textLine);
        }
Ejemplo n.º 3
0
        public List <TextBox> GetTextBoxes(Mat src, ScaleParam scale, float boxScoreThresh, float boxThresh, float unClipRatio)
        {
            Mat srcResize = new Mat();

            CvInvoke.Resize(src, srcResize, new Size(scale.DstWidth, scale.DstHeight));
            Tensor <float> inputTensors = OcrUtils.SubstractMeanNormalize(srcResize, MeanValues, NormValues);
            var            inputs       = new List <NamedOnnxValue>
            {
                NamedOnnxValue.CreateFromTensor(inputNames[0], inputTensors)
            };

            try
            {
                using (IDisposableReadOnlyCollection <DisposableNamedOnnxValue> results = dbNet.Run(inputs))
                {
                    var resultsArray = results.ToArray();
                    Console.WriteLine(resultsArray);
                    var textBoxes = GetTextBoxes(resultsArray, srcResize.Rows, srcResize.Cols, scale, boxScoreThresh, boxThresh, unClipRatio);
                    return(textBoxes);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message + ex.StackTrace);
            }
            return(null);
        }