Saltar al pie de página
USO DE IRONBARCODE

Cómo Usar un SDK de Escáner de Documentos en una Aplicación .NET MAUI

Con el auge de la tecnología móvil, las aplicaciones de escaneo de documentos como Scanbot SDK y SDK Nativos se han convertido en herramientas indispensables tanto para individuos como para empresas. En este tutorial, exploraremos cómo crear una aplicación de escáner de documentos utilizando la última versión de .NET Multi-platform App UI (MAUI) e IronOCR, una poderosa biblioteca OCR (Reconocimiento Óptico de Caracteres) para .NET. .NET MAUI simplifica la creación de aplicaciones móviles multiplataforma, asegurando un despliegue fluido en dispositivos como Android. Al final de esta guía, podrás desarrollar tu propia aplicación SDK de escáner de documentos que pueda 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. Instala la biblioteca C# IronOCR para usar el SDK de escáner de documentos.
  2. Diseña un formulario .NET MAUI con los controles necesarios.
  3. Captura una foto utilizando el método MediaPicker.CapturePhotoAsync.
  4. Convierte la foto capturada a un Stream.
  5. Pasa el stream al método OcrInput LoadImage.
  6. Realiza OCR usando el método IronTesseract Read.
  7. Muestra el texto del documento utilizando la propiedad Text de OcrResult.

IronOCR - La biblioteca de 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 cómo las empresas manejan el procesamiento de documentos, facilitando la extracción de información valiosa de varias fuentes como documentos escaneados, PDFs e imágenes.

IronOCR se destaca entre las soluciones OCR debido a sus características avanzadas, rendimiento robusto y facilidad de integración. Ya sea que seas un desarrollador buscando incorporar características OCR en tus aplicaciones o una empresa que busca optimizar los procesos de gestión documental, IronOCR ofrece una solución completa.

Características principales 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 texto con precisión de documentos complejos, incluyendo imágenes con baja resolución o escaneos de mala calidad.
  2. Soporte Multilingüe: IronOCR es compatible con el reconocimiento de texto en más de 125 idiomas, haciéndolo adecuado para negocios que operan en diversos entornos lingüísticos.
  3. Preprocesamiento de Imágenes: IronOCR proporciona varias capacidades de preprocesamiento de imágenes, como reducción de ruido, ajuste de contraste y enderezamiento, para mejorar la precisión. Estas técnicas mejoran los resultados de OCR, especialmente en imágenes distorsionadas o imperfectas.
  4. Soporte para varios formatos de archivo: IronOCR es compatible con una amplia gama de formatos de archivo, incluyendo TIFF, JPEG, PNG y PDF, asegurando compatibilidad con diferentes fuentes de documentos.
  5. Opciones de personalización: Los desarrolladores pueden personalizar el comportamiento de IronOCR para cumplir con requisitos específicos, ofreciendo flexibilidad en los parámetros de reconocimiento y en la integración de flujos de trabajo.
  6. Rápido y Escalable: Optimizado para el rendimiento, IronOCR extrae texto rápidamente de grandes volúmenes de documentos. Su arquitectura escalable asegura una operación fluida, independientemente del volumen de documentos.
  7. Integración con aplicaciones .NET: IronOCR se integra sin problemas con aplicaciones .NET, proporcionando una API fácil de usar para incorporar funcionalidad de OCR. Esto simplifica el desarrollo y acelera el tiempo de comercialización para aplicaciones habilitadas con OCR.
  8. Clasificación de Documentos y Extracción de Datos: Más allá del reconocimiento básico de texto, IronOCR ofrece características avanzadas para la clasificación de documentos y la extracción de datos, identificando campos de datos específicos como nombres, direcciones o números de factura.

Requisitos previos

  • Conocimientos básicos de programación en C#.
  • Visual Studio 2022 instalado con la carga de trabajo de .NET MAUI.
  • Biblioteca de paquetes IronOCR instalada a través del Administrador de Paquetes NuGet.

1. Configuración de su proyecto .NET MAUI

  • Abre Visual Studio 2022 y crea un nuevo proyecto de aplicación .NET MAUI.

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

  • Elige un nombre de proyecto adecuado y configura las opciones de tu proyecto.

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

  • Asegúrate de tener instalados los SDKs necesarios de Android y iOS para el desarrollo de dispositivos en plataformas objetivo.

2. Instalación de la biblioteca IronOCR

  • Haz clic derecho en tu Solución en Visual Studio.
    • Selecciona 'Administrar paquetes NuGet para la solución' y en la pestaña Explorar, busca 'IronOCR'.

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

  • Instala la biblioteca IronOCR en tu proyecto.

3. Diseño de la interfaz de usuario

Empecemos diseñando el diseño de nuestro MainPage.xaml. Crearemos un diseño simple con un control de imagen para mostrar la foto capturada, un botón de captura para tomar fotos y un Label 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>
XML

En este diseño:

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

Resultado

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 escaneo de documentos

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

  1. Utilizar la API de Cámara: Aprovechar la API de cámara proporcionada por .NET MAUI para capturar archivos de imagen directamente dentro de tu aplicación.
  2. Pasar Imagen a IronOCR: Una vez que se captura una imagen, pásala a IronOCR para la extracción de texto, aprovechando su robusta funcionalidad.
  3. Mostrar Texto Extraído: Muestra el texto extraído en el área designada en la interfaz de usuario de tu aplicación para su visualización por el usuario.

Aquí está 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

Explicación del código

Desglosemos el código paso a paso:

  • En el archivo MainPage.xaml.cs, el método OnCaptureClicked está definido para manejar el evento de clic del botón de captura.
  • Se configura la clave de licencia de IronOCR, necesaria para usar la biblioteca IronOCR. Reemplaza "YOUR-LICENSE-KEY-HERE" con tu clave de licencia actual.
  • Se solicitan permisos de cámara utilizando Permissions.RequestAsync() para asegurar que la aplicación pueda acceder a la cámara del dispositivo.
  • Se llama a MediaPicker.CapturePhotoAsync() para tomar una foto usando la cámara. Si tiene éxito, la foto se muestra en el control de imagen cameraPreview.
  • Se abre un stream de la foto capturada y se usa como entrada para IronOCR, creando una instancia de IronTesseract, cargando el stream de imágenes en un objeto OcrInput y llamando al método Read para realizar OCR.
  • El texto extraído se muestra en el control textLabel si tiene éxito. Si no se detecta texto, se muestra un mensaje de error utilizando DisplayAlert.

Para una exploración más profunda de IronOCR y ejemplos de código adicionales, visita esta página de ejemplos de código.

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

  • Ejecuta la aplicación en varias plataformas (Android, iOS y Windows) para garantizar la compatibilidad multiplataforma.
  • Prueba diferentes escenarios, como escanear documentos con diversas fuentes, tamaños y orientaciones.
  • Verifica que el texto extraído sea preciso y se muestre 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

Al seguir este tutorial, has aprendido cómo usar el SDK de escáner de documentos de IronOCR dentro de .NET MAUI. Las aplicaciones de escaneo de documentos tienen numerosas aplicaciones prácticas, desde digitalizar documentos en papel hasta extraer información almacenada en recibos y facturas. Utilizando las poderosas capacidades de IronOCR y la flexibilidad de .NET MAUI, puedes construir aplicaciones de escaneo de documentos ricas en funciones que se adapten a varios casos de uso. Experimenta con diferentes funcionalidades, explora bibliotecas adicionales y continúa 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 visita esta página de documentación.

IronOCR ofrece una prueba gratuita para probar su funcionalidad completa en modo comercial. Su licencia perpetua lite comienza a partir de $799. Descarga la biblioteca desde la página de descarga y pruébala.

Preguntas Frecuentes

¿Cómo puedo crear una aplicación de escáner de documentos usando .NET MAUI?

Puedes crear una aplicación de escáner de documentos usando .NET MAUI aprovechando IronOCR para el Reconocimiento Óptico de Caracteres. Comienza instalando IronOCR a través del Gestor de Paquetes NuGet en Visual Studio, luego usa .NET MAUI para diseñar la interfaz de usuario de tu aplicación e implementa la funcionalidad de escaneo usando el método Read de IronTesseract.

¿Cuáles son los beneficios de usar IronOCR para una aplicación de escáner de documentos?

IronOCR ofrece alta precisión en el reconocimiento de texto, soporte multilingüe y compatibilidad con varios formatos de archivos. También ofrece preprocesamiento de imágenes, rendimiento rápido e integración perfecta con aplicaciones .NET, lo que lo convierte en una opción robusta para una aplicación de escáner de documentos.

¿Cómo instalo IronOCR en un proyecto .NET MAUI?

Para instalar IronOCR en un proyecto .NET MAUI, abre Visual Studio y usa el Gestor de Paquetes NuGet para buscar 'IronOCR'. Añade el paquete a tu proyecto para comenzar a usar sus funcionalidades de OCR.

¿Qué pasos están involucrados en la captura y procesamiento de imágenes en una aplicación de escáner de documentos?

El proceso involucra usar el MediaPicker para capturar imágenes, convertirlas a un formato de flujo y luego usar el IronTesseract de IronOCR para realizar la extracción de texto. El texto extraído puede mostrarse en la interfaz de usuario de la aplicación.

¿Qué formatos de archivo son compatibles con IronOCR para el procesamiento de OCR?

IronOCR es compatible con una amplia gama de formatos de archivo, incluidos TIFF, JPEG, PNG y PDF, lo que permite capacidades versátiles de escaneo de documentos y extracción de texto.

¿Puede IronOCR soportar OCR en múltiples idiomas?

Sí, IronOCR soporta OCR en más de 125 idiomas, lo que lo hace adecuado para aplicaciones que requieren reconocimiento de texto en diversos contextos lingüísticos.

¿Cómo facilita .NET MAUI el desarrollo multiplataforma?

.NET MAUI permite a los desarrolladores construir aplicaciones móviles multiplataforma con una única base de código, permitiendo un despliegue sin problemas en dispositivos Android, iOS y Windows.

¿Cuáles son los requisitos previos para desarrollar una aplicación de escáner de documentos con .NET MAUI?

Los requisitos previos incluyen conocimiento básico de programación en C#, Visual Studio 2022 con la carga de trabajo .NET MAUI y la biblioteca IronOCR instalada desde NuGet.

¿Cómo puedo probar la compatibilidad de mi aplicación de escáner de documentos en todas las plataformas?

Puedes probar tu aplicación de escáner de documentos en todas las plataformas al desplegarla en dispositivos Android, iOS y Windows para asegurar la funcionalidad y precisión en la extracción de texto, aprovechando las capacidades multiplataforma de .NET MAUI.

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 para pruebas de productos, desarrollo de productos e investigación, Jordi agrega un valor inmenso a la mejora continua del producto. La experiencia variada lo mantiene ...
Leer más