Windows Phone 8.1: Optical Character Recognition (OCR)


Siguiendo con el post anterior de los primeros pasos con la cámara se dejó preparado el terreno para este nuevo post.

Antes de comenzar es importante entender que es OCR y por supuesto, seguir el tutorial pasado.

En la última imagen del tutorial pasado en el método CreateBitmapFromCaptureElement se veía una otro método, ReadText.

Para comenzar a leer los caracteres contenidos en una imagen y en este caso obtenida de la cámara es obtener el empaquetado WindowsPreview.Media.Ocr, donde podremos instalarlo de la siguiente manera:

Instalar el NuGet

Abrir el Package Manager Console

Este demora un momento en inicializar y podremos escribir el siguiente código:

Haciendo la lógica

Microsoft ya hizo tooodo el procesamiento digital de imágenes y algoritmos necesarios para poder hacer OCR, así que declararé el método ReadText quien es el encargado de leer el texto incluído en un Stream.

Por último nos queda declarar el TextBlock de salida en nuestro archivo XAML, quedaría de la siguiente manera

Con esto ya tenemos una aplicación que reconoce textos desde la cámara del dispositivo, espero les sirva y haya podido abrir un sin fin de posibilidades.

Código completo del método

        private async Task<string> ReadText(IRandomAccessStream randomAccessStream)
        {
            using (var stream = randomAccessStream.CloneStream())
            {
                stream.Seek(0);
                try
                {
                    BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);

                    width = decoder.PixelWidth;
                    height = decoder.PixelHeight;

                    // Get pixels in BGRA format.
                    var pixels = await decoder.GetPixelDataAsync(
                        BitmapPixelFormat.Bgra8,
                        BitmapAlphaMode.Straight,
                        new BitmapTransform(),
                        ExifOrientationMode.RespectExifOrientation,
                        ColorManagementMode.ColorManageToSRgb);

                    // Extract text from image.
                    OcrResult result = await ocrEngine.RecognizeAsync(height, width, pixels.DetachPixelData());

                    // Check whether text is detected.
                    if (result.Lines != null)
                    {
                        // Collect recognized text.
                        string recognizedText = "";
                        foreach (var line in result.Lines)
                        {
                            foreach (var word in line.Words)
                            {
                                recognizedText += word.Text + " ";
                            }
                            recognizedText += Environment.NewLine;
                        }

                        // Return recognized text.
                        System.Diagnostics.Debug.WriteLine(recognizedText);
                        //OcrText.Text = recognizedText;
                        return recognizedText;
                    }
                }
                catch (Exception)
                {
                    CleanUpCamera();
                    return string.Empty;
                }
            }
            return String.Empty;
        }

 

2 comentarios en “Windows Phone 8.1: Optical Character Recognition (OCR)

Los comentarios están cerrados.