USO DE IRONBARCODE

Cómo utilizar un SDK de escáner de documentos en una aplicación .NET MAUI

Jordi Bardia
Jordi Bardia
29 de abril, 2024
Compartir:

Con el auge de la tecnología móvil, las aplicaciones de escaneo de documentos como Scanbot SDK y los SDK Nativos se han convertido en herramientas indispensables para individuos y empresas por igual. En este tutorial, exploraremos cómo crear una aplicación de escaneo de documentos utilizando la última versión de .NET Multi-platform App UI (MAUI) e IronOCR, una potente biblioteca de OCR (Reconocimiento Óptico de Caracteres) para .NET. .NET MAUI simplifica la creación de aplicaciones móviles multiplataforma como Android, garantizando una implementación perfecta en el dispositivo del usuario final. Al final de esta guía, podrá desarrollar su propia aplicación SDK de escáner de documentos que puede extraer texto de imágenes y archivos escaneados con facilidad.

Cómo utilizar un SDK de escáner de documentos en una aplicación .NET MAUI

  1. Instale la biblioteca de C# de IronOCR para usar el SDK de escáner de documentos.

  2. Diseña un formulario .NET MAUI con los controles necesarios.

  3. Capturar marco de foto usando el método MediaPicker.CapturePhotoAsync.

  4. Convertir la foto capturada a Stream.

  5. Pase el flujo al método LoadImage de OcrInput.

  6. Realice OCR utilizando el método Read de IronTesseract.

  7. Muestra el texto del documento usando la propiedad Text de OcrResult.

IronOCR - La biblioteca OCR de C#

IronOCR es un software de reconocimiento óptico de caracteres (OCR) de última generación desarrollado por Iron Software, LLC, diseñado para convertir imágenes y documentos escaneados en texto editable de manera precisa y eficiente. La tecnología OCR ha revolucionado la forma en que las empresas gestionan el procesamiento de documentos, facilitando la extracción de información valiosa de diversas fuentes, como documentos escaneados, PDF e imágenes.

IronOCR destaca entre las soluciones de OCR por sus funciones avanzadas, su sólido rendimiento y su facilidad de integración. Tanto si es un desarrollador que desea incorporar funciones de OCR a sus aplicaciones como si es una empresa que busca agilizar los procesos de gestión de documentos generados por datos, IronOCR le ofrece una solución integral.

Características principales de IronOCR

Estas son algunas de las principales características de IronOCR:

  1. Alta precisión: IronOCR utiliza algoritmos de última generación y técnicas de aprendizaje automático para lograr una precisión excepcional en el reconocimiento de texto. Puede extraer con precisión texto de documentos complejos, incluidas imágenes con QR de baja resolución o escaneados de mala calidad.

  2. Soporte Multilingüe: Una de las características destacadas de IronOCR es su extenso soporte de idiomas. Puede reconocer texto en más de 127 idiomas, lo que la hace adecuada para empresas que operan en entornos lingüísticos diversos.

  3. Preprocesamiento de imágenes: Para mejorar la precisión, IronOCR ofrece diversas capacidades de preprocesamiento de imágenes, como reducción de ruido, ajuste de contraste y corrección de sesgo. Estas técnicas de preprocesamiento ayudan a mejorar los resultados del OCR, especialmente cuando se trata de imágenes distorsionadas o imperfectas.

  4. Soporte para Varios Formatos de Archivo: IronOCR admite una amplia variedad de formatos de archivo, incluidos TIFF, JPEG, PNG y PDF. Esta flexibilidad permite a los usuarios procesar documentos de distintas fuentes sin preocuparse por problemas de compatibilidad.

  5. Opciones de personalización: Los desarrolladores pueden personalizar el comportamiento de IronOCR según sus requisitos específicos. Tanto si se trata de ajustar los parámetros de reconocimiento como de integrarlo con los flujos de trabajo existentes, IronOCR ofrece un alto grado de flexibilidad y personalización.

  6. Rápido y escalable: IronOCR está optimizado para el rendimiento, lo que permite una extracción rápida de texto incluso de grandes volúmenes de documentos. Su arquitectura escalable garantiza un funcionamiento sin problemas, tanto si procesa un puñado de documentos como si gestiona depósitos de documentos masivos.

  7. Integración con aplicaciones .NET: IronOCR se integra perfectamente con aplicaciones .NET, proporcionando a los desarrolladores APIs y bibliotecas fáciles de usar para incorporar la funcionalidad de OCR en sus proyectos de software. Esta estrecha integración simplifica el desarrollo y acelera el tiempo de comercialización de las aplicaciones compatibles con OCR.

  8. Clasificación de documentos y extracción de datos: Más allá del reconocimiento básico de texto, IronOCR ofrece funciones avanzadas para la clasificación de documentos y extracción de datos. Puede identificar campos de datos específicos dentro de los documentos, como nombres, direcciones o números de factura, lo que permite la extracción y el análisis automatizados de datos.

Requisitos previos

  • Conocimientos básicos de programación en C#.
  • Visual Studio 2022 última versión instalada en tu sistema con la carga de trabajo .NET MAUI.
  • Biblioteca de paquetes IronOCR instalada a través del gestor de paquetes NuGet.

1. Configurar tu proyecto .NET MAUI

  • Abre Visual Studio 2022 y crea un nuevo proyecto .NET MAUI App.

    Cómo usar un SDK de escáner de documentos en una aplicación .NET MAUI: Figura 1 - Proyecto de aplicación .NET MAUI

  • Elija un nombre de proyecto adecuado y configure los ajustes del proyecto.

    Cómo usar un SDK de escáner de documentos en una aplicación .NET MAUI: Figura 2 - Configuración del proyecto

  • Asegúrese de tener instalados los SDK de Android e iOS necesarios para el desarrollo de dispositivos en la plataforma de destino.

2. Instalación de la biblioteca IronOCR

  • Haga clic con el botón derecho en su solución en Visual Studio.

    • Seleccione "Gestionar paquetes NuGet para soluciones" y, en la pestaña Examinar, busque "IronOCR".

    Cómo usar un SDK de escáner de documentos en una aplicación .NET MAUI: Figura 3 - Paquete NuGet de IronOCR

  • Instale la biblioteca IronOCR en su proyecto.

3. Diseño de la interfaz de usuario

Empecemos diseñando el layout de nuestra MainPage.xaml. Crearemos un diseño sencillo con un control de imagen para mostrar la foto capturada, un botón Capturar para tomar fotos y una Etiqueta para mostrar el texto extraído.

Aquí está el código XAML para MainPage.xaml:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://schemas.microsoft.com/dotnet/2021/maui/design"
             x:Class="DocumentScanner.MainPage">
    <ScrollView>
        <VerticalStackLayout
            Padding="30,0"
            Spacing="25">
            <Image
                Source="dotnet_bot.png"
                HeightRequest="185"
                Aspect="AspectFit"
                SemanticProperties.Description="dot net bot in a race car number eight" />
            <Label
                Text="Welcome to .NET MAUI Document Scanner SDK"
                Style="{StaticResource Headline}"
                SemanticProperties.HeadingLevel="Level1" />
            <Label
                Text="Using IronOCR"
                Style="{StaticResource SubHeadline}"
                SemanticProperties.HeadingLevel="Level2"
                SemanticProperties.Description="Welcome to .NET MAUI Document Scanner SDK" />
            <!-- Camera preview -->
            <Image x:Name="cameraPreview" />
            <!-- Capture button -->
            <Button Text="Capture" Clicked="OnCaptureClicked" />
            <!-- Text display area -->
            <Label x:Name="textLabel"
                   Text="Recognized Text:"/>
        </VerticalStackLayout>
    </ScrollView>
</ContentPage>
XML

En esta disposición:

  • Usamos un VerticalStackLayout para apilar los controles verticalmente.
  • El control Image llamado capturedImage se utiliza para mostrar la foto capturada.
  • El control Button activa el manejador de eventos OnCaptureClicked cuando se hace clic.
  • El control Label llamado textLabel se utiliza para mostrar el texto extraído.

Salida

Cómo usar un SDK de escáner de documentos en una aplicación .NET MAUI: Figura 4 - Salida de MainPage.xaml

4. Implementación de la funcionalidad de escaneado de documentos

Para integrar la funcionalidad de extracción de texto en nuestra aplicación .NET MAUI Document Scanning, seguiremos estos pasos:

  1. Utilice la API de la cámara: Comience aprovechando la API de la cámara proporcionada por .NET MAUI para capturar archivos de imagen directamente dentro de su aplicación.

  2. Pasar imagen a IronOCR: Una vez que se captura una imagen, pásala a IronOCR, una potente biblioteca OCR, para la extracción de texto. IronOCR proporciona una sólida funcionalidad para extraer texto de imágenes con gran precisión.

  3. Mostrar el texto extraído: Finalmente, muestre el texto extraído en el área designada en la interfaz de usuario de su aplicación. Esto permite a los usuarios ver fácilmente el texto extraído de la imagen capturada o del código QR.

    A continuación se muestra el fragmento de código correspondiente que implementa estos pasos:

using IronOcr;
namespace DocumentScanner
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }
        private async void OnCaptureClicked(object sender, EventArgs e)
        {
            License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
            try
            {
                // Request camera permissions
                var status = await Permissions.RequestAsync<Permissions.Camera>();
                if (status == PermissionStatus.Granted)
                {
                    // Take photo
                    var photo = await MediaPicker.CapturePhotoAsync();
                    if (photo != null)
                    {
                        // Display captured photo in Image
                        cameraPreview.Source = ImageSource.FromStream(() => photo.OpenReadAsync().Result);
                        using (var stream = await photo.OpenReadAsync())
                        {
                            // Use a stream from the captured photo for OCR
                            var ocr = new IronTesseract();
                            using var ocrInput = new OcrInput();
                            ocrInput.LoadImage(stream);
                            var ocrResult = ocr.Read(ocrInput);
                            if (string.IsNullOrEmpty(ocrResult.Text))
                            {
                                await DisplayAlert("Error", "No Text Detected!", "OK");
                            }
                            else
                            {
                                await DisplayAlert("Text Detected!", ocrResult.Text, "OK");
                                // Display extracted text
                                textLabel.Text = ocrResult.Text;
                            }
                        }
                    }
                }
                else
                {
                    // Camera permission denied
                    await DisplayAlert("Permission Denied", "Camera permission is required to capture photos.", "OK");
                }
            }
            catch (Exception ex)
            {
                // Handle exception
                await DisplayAlert("Error", ex.Message, "OK");
            }
        }
    }
}
using IronOcr;
namespace DocumentScanner
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }
        private async void OnCaptureClicked(object sender, EventArgs e)
        {
            License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
            try
            {
                // Request camera permissions
                var status = await Permissions.RequestAsync<Permissions.Camera>();
                if (status == PermissionStatus.Granted)
                {
                    // Take photo
                    var photo = await MediaPicker.CapturePhotoAsync();
                    if (photo != null)
                    {
                        // Display captured photo in Image
                        cameraPreview.Source = ImageSource.FromStream(() => photo.OpenReadAsync().Result);
                        using (var stream = await photo.OpenReadAsync())
                        {
                            // Use a stream from the captured photo for OCR
                            var ocr = new IronTesseract();
                            using var ocrInput = new OcrInput();
                            ocrInput.LoadImage(stream);
                            var ocrResult = ocr.Read(ocrInput);
                            if (string.IsNullOrEmpty(ocrResult.Text))
                            {
                                await DisplayAlert("Error", "No Text Detected!", "OK");
                            }
                            else
                            {
                                await DisplayAlert("Text Detected!", ocrResult.Text, "OK");
                                // Display extracted text
                                textLabel.Text = ocrResult.Text;
                            }
                        }
                    }
                }
                else
                {
                    // Camera permission denied
                    await DisplayAlert("Permission Denied", "Camera permission is required to capture photos.", "OK");
                }
            }
            catch (Exception ex)
            {
                // Handle exception
                await DisplayAlert("Error", ex.Message, "OK");
            }
        }
    }
}
Imports IronOcr
Namespace DocumentScanner
	Partial Public Class MainPage
		Inherits ContentPage

		Public Sub New()
			InitializeComponent()
		End Sub
		Private Async Sub OnCaptureClicked(ByVal sender As Object, ByVal e As EventArgs)
			License.LicenseKey = "YOUR-LICENSE-KEY-HERE"
			Try
				' Request camera permissions
				Dim status = Await Permissions.RequestAsync(Of Permissions.Camera)()
				If status = PermissionStatus.Granted Then
					' Take photo
					Dim photo = Await MediaPicker.CapturePhotoAsync()
					If photo IsNot Nothing Then
						' Display captured photo in Image
						cameraPreview.Source = ImageSource.FromStream(Function() photo.OpenReadAsync().Result)
						Using stream = Await photo.OpenReadAsync()
							' Use a stream from the captured photo for OCR
							Dim ocr = New IronTesseract()
							Dim ocrInput As New OcrInput()
							ocrInput.LoadImage(stream)
							Dim ocrResult = ocr.Read(ocrInput)
							If String.IsNullOrEmpty(ocrResult.Text) Then
								Await DisplayAlert("Error", "No Text Detected!", "OK")
							Else
								Await DisplayAlert("Text Detected!", ocrResult.Text, "OK")
								' Display extracted text
								textLabel.Text = ocrResult.Text
							End If
						End Using
					End If
				Else
					' Camera permission denied
					Await DisplayAlert("Permission Denied", "Camera permission is required to capture photos.", "OK")
				End If
			Catch ex As Exception
				' Handle exception
				Await DisplayAlert("Error", ex.Message, "OK")
			End Try
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel

Código Explicación

Desglosemos el código paso a paso:

  • En el archivo MainPage.xaml.cs, definimos el método OnCaptureClicked, que se activará cuando el usuario haga clic en el botón Capturar.
  • Dentro del método OnCaptureClicked, primero establecemos la clave de licencia de IronOCR. Esto es necesario para utilizar la biblioteca IronOCR. Reemplace "YOUR-LICENSE-KEY-HERE" con su clave de licencia real.
  • Luego, solicitamos permisos de cámara usando Permissions.RequestAsync(). Esto garantiza que la aplicación tiene los permisos necesarios para acceder a la cámara del dispositivo.
  • Usamos MediaPicker.CapturePhotoAsync() para capturar una foto usando la cámara del dispositivo. Si se captura correctamente una foto, la mostramos en un control Image llamado cameraPreview.
  • Abrimos una secuencia de la foto capturada y la utilizamos como entrada para el OCR mediante IronOCR. Crearemos una instancia de IronTesseract, cargaremos el flujo de la imagen en un objeto OcrInput, y luego llamaremos al método Read para realizar OCR.
  • Si el texto se extrae con éxito, lo mostramos en un control Label llamado textLabel. Si no se detecta texto, mostramos un mensaje de error utilizando DisplayAlert.

    Para un uso más robusto de IronOCR y detalles del código, visite esta página de ejemplos de código.

5. Prueba de la aplicación de escáner de documentos

  • Ejecuta la aplicación en varias plataformas (Android, iOS y Windows) para asegurar la compatibilidad multiplataforma.
  • Pruebe diferentes escenarios, como escanear documentos con diferentes fuentes, tamaños y orientaciones.
  • Compruebe que el texto extraído es preciso y se muestra correctamente en la interfaz de usuario.

Salida - Documento escaneado sin texto

Cómo usar un SDK de escáner de documentos en una aplicación .NET MAUI: Figura 5 - Salida de creación de PDF escaneado

Salida - Documento escaneado con texto

Cómo usar un SDK de escáner de documentos en una aplicación .NET MAUI: Figura 6 - Documentación escaneada

Conclusión

Siguiendo este tutorial, habrás aprendido a utilizar el SDK de escáner de documentos IronOCR en .NET MAUI. Las aplicaciones de escaneado de documentos tienen numerosas aplicaciones prácticas, desde la digitalización de documentos en papel hasta la extracción de información almacenada en recibos y facturas. Con las potentes funciones de IronOCR y la flexibilidad de .NET MAUI, puede crear aplicaciones de escáner de documentos ricas en funciones que se adapten a diversos casos de uso. Experimenta con distintas funcionalidades, explora bibliotecas adicionales y sigue perfeccionando tus habilidades para crear aplicaciones aún más impresionantes.

Para obtener información más detallada sobre las capacidades de IronOCR, por favor visite esta página de documentación.

IronOCR ofrece una prueba gratuita para probar su funcionalidad completa en modo comercial. Su licencia perpetua lite comienza desde $749. Descargue la biblioteca desde la página de descarga y pruébela.

Jordi Bardia
Ingeniero de software
Jordi es más competente en Python, C# y C++, cuando no está aprovechando sus habilidades en Iron Software; está programando juegos. Compartiendo responsabilidades en las pruebas de productos, el desarrollo de productos y la investigación, Jordi añade un inmenso valor a la mejora continua de los productos. La variada experiencia le mantiene desafiado y comprometido, y dice que es uno de sus aspectos favoritos de trabajar con Iron Software. Jordi creció en Miami, Florida, y estudió Informática y Estadística en la Universidad de Florida.
< ANTERIOR
Pasos para crear una API de escáner de código de barras para una aplicación WEB
SIGUIENTE >
Creación de una aplicación web generadora de códigos de barras Razor