USO DE IRONBARCODE

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

Publicado en 29 de abril, 2024
Compartir:

Con el auge de la tecnología móvil, las aplicaciones de escaneo de documentos como Scanbot SDK y Native SDK se han convertido en herramientas indispensables o en expertos en soluciones tanto para particulares como para empresas. En este tutorial, vamos a explorar cómo crear una aplicación de escáner de documentos utilizando la última versión de .NET Multi-plataforma App UI(MAUI) y IronOCR, un potente 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 IronOCR C# Library para utilizar Document Scanner SDK.

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

  3. Capturar Marco de Fotos usando el método MediaPicker.CapturePhotoAsync.

  4. Convertir la foto capturada en Stream.

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

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

  7. Mostrar el texto del documento utilizando la propiedad OcrResult Text.

IronOCR - La biblioteca C# OCR

IronOCR es un avanzado sistema de reconocimiento óptico de caracteres(OCR) desarrollado por Iron Software, LLC, diseñado para convertir con precisión y eficacia imágenes y documentos escaneados en texto editable. 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 emplea 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 más destacadas de IronOCR es su amplio 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 varias funciones de preprocesamiento de imágenes, como la reducción de ruido, el ajuste del contraste y la eliminación de la distorsión. Estas técnicas de preprocesamiento ayudan a mejorar los resultados del OCR, especialmente cuando se trata de imágenes distorsionadas o imperfectas.

  4. **IronOCR es compatible con una amplia gama 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 de acuerdo a sus requerimientos 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 rápida extracción 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 API y bibliotecas fáciles de usar para incorporar la funcionalidad OCR a 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: Además del reconocimiento de texto básico, IronOCR ofrece funciones avanzadas de 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 utilizar 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 utilizar 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 utilizar un SDK de escáner de documentos en una aplicación .NET MAUI: Figura 3 - Paquete IronOCR NuGet

  • 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 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>
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<?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>
VB   C#

En esta disposición:

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

Salida

Cómo utilizar un SDK de escáner de documentos en una aplicación .NET MAUI: Figura 4 - Salida 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. Utilizar la API de la cámara: Empieza aprovechando la API de cámara proporcionada por .NET MAUI para capturar archivos de imagen directamente dentro de tu aplicación.

  2. Pase la imagen a IronOCR: Una vez capturada una imagen, pásela a IronOCR, una potente biblioteca de 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: Por último, muestre el texto extraído en el área designada de 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
VB   C#

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 Capture.
  • Dentro del método OnCaptureClicked, primero establecemos la clave de licencia de IronOCR. Esto es necesario para utilizar la biblioteca IronOCR. Sustituya "SU-CLAVE DE LICENCIA-AQUÍ " por su clave de licencia real.
  • Luego, solicitamos los permisos de la 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 utilizando la cámara del dispositivo. Si una foto es capturada con éxito, 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. Creamos una instancia de IronTesseract, cargamos el flujo de imágenes en un objeto OcrInput, y luego llamamos al método Read para realizar el OCR.
  • Si el texto se extrae correctamente, lo mostramos en un control Label llamado textLabel. Si no se detecta ningún texto, mostramos un mensaje de error utilizando DisplayAlert.

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

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

  • Ejecutar la aplicación en varias plataformas(Android, iOS y Windows) para garantizar la compatibilidad entre plataformas.
  • 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 utilizar 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 utilizar 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, visite este enlacedocumentación página.

IronOCR proporciona un**Prueba gratuita para probar su funcionalidad completa en modo comercial. Su luz perpetualicencia comienza a partir de $749. Descargue la biblioteca dedescargar **y pruébalo.

< 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

¿Listo para empezar? Versión: 2024.12 acaba de salir

Descarga gratuita de NuGet Descargas totales: 1,320,639 Ver licencias >