Beispiel #1
0
        // SoftwareBitmap を OCR に掛ける
        private async Task RecognizeBitmapAsync(UwpSoftwareBitmap bitmap)
        {
            this.RecognizedTextTextBox.Text = string.Empty;

            var          ocrEngine = UwpOcrEngine.TryCreateFromLanguage(this.LangComboBox.SelectedItem as UwpLanguage);
            UwpOcrResult ocrResult = await ocrEngine.RecognizeAsync(bitmap);

            foreach (var ocrLine in ocrResult.Lines)
            {
                this.RecognizedTextTextBox.Text += (ocrLine.Text + "\n");
            }
        }
Beispiel #2
0
        public async Task RecognizeAsync(BitmapFrame bitmapFrame)
        {
            if (!CanExecute)
            {
                return;
            }
            ClearResults();

            // SoftwareBitmapを取得
            UwpSoftwareBitmap bitmap
                = await UwpSoftwareBitmapHelper.ConvertFrom(bitmapFrame).ConfigureAwait(true);

            if (bitmap == null)
            {
                return;
            }

            // OCR実行
            UwpOcrResult ocrResult = await engine.RecognizeAsync(bitmap);

            bitmap.Dispose();

            // Angle
            ocrAngle = ocrResult.TextAngle ?? 0.0;

            // Line
            foreach (var ocrLine in ocrResult.Lines)
            {
                WinOcrResult result = new WinOcrResult();

                string words  = "";
                double left   = ocrLine.Words[0].BoundingRect.Left;
                double right  = ocrLine.Words[0].BoundingRect.Right;
                double top    = ocrLine.Words[0].BoundingRect.Top;
                double bottom = ocrLine.Words[0].BoundingRect.Bottom;

                foreach (var word in ocrLine.Words)
                {
                    words += word.Text;

                    if (word.BoundingRect.Left < left)
                    {
                        left = word.BoundingRect.Left;
                    }
                    if (right < word.BoundingRect.Right)
                    {
                        right = word.BoundingRect.Right;
                    }
                    if (word.BoundingRect.Top < top)
                    {
                        top = word.BoundingRect.Top;
                    }
                    if (bottom < word.BoundingRect.Bottom)
                    {
                        bottom = word.BoundingRect.Bottom;
                    }
                }

                result.Words      = words;
                result.RectLeft   = left;
                result.RectTop    = top;
                result.RectWidth  = right - left;
                result.RectHeight = bottom - top;

                this.ocrResults.Add(result);
            }
        }