Cómo extraer datos de pasaportes con IronOCR

Curtis Chau
Curtis Chau
7 de agosto, 2024
Actualizado 16 de febrero, 2025
Compartir:
This article was translated from English: Does it need improvement?
Translated
View the article in English

En aplicaciones y sistemas como el check-in en el mostrador y la inmigración de seguridad en aeropuertos, donde los agentes tienen que manejar un gran volumen de pasaportes diariamente, contar con un sistema confiable que extraiga con precisión información esencial y crítica sobre el viajero es crucial para garantizar un proceso eficiente y ágil a través de la inmigración.

IronOCR es una herramienta confiable que facilita la extracción y lectura de datos de un pasaporte. El proceso se vuelve sencillo con una llamada simple al método ReadPassport.

Comience a usar IronOCR en su proyecto hoy con una prueba gratuita.

Primer Paso:
green arrow pointer

Para usar esta función, también debe instalar el paquete IronOcr.Extension.AdvancedScan.

Ejemplo de extracción de datos de pasaportes

Como ejemplo, utilizaremos una imagen de pasaporte como entrada para demostrar la funcionalidad de IronOCR. Después de cargar la imagen utilizando OcrInput, puedes utilizar el método ReadPassport para identificar y extraer información del pasaporte. Este método devuelve un objeto OcrPassportResult, que contiene propiedades como GivenNames, Country, PassportNumber, Surname, DateOfBirth y DateOfExpiry. Todos los miembros del objeto PassportInfo son cadenas.

Atención

  • El método actualmente solo funciona para pasaportes en inglés.
  • El uso de la exploración avanzada en .NET Framework requiere que el proyecto se ejecute en arquitectura x64.

Entrada de pasaporte

Imagen de muestra

Código

:path=/static-assets/ocr/content-code-examples/how-to/read-passport-read-passport.cs
using IronOcr;
using System;

// Instantiate OCR engine
var ocr = new IronTesseract();

using var inputPassport = new OcrInput();

inputPassport.LoadImage("passport.jpg");

// Perform OCR
OcrPassportResult result = ocr.ReadPassport(inputPassport);

// Output passport information
Console.WriteLine(result.PassportInfo.GivenNames);
Console.WriteLine(result.PassportInfo.Country);
Console.WriteLine(result.PassportInfo.PassportNumber);
Console.WriteLine(result.PassportInfo.Surname);
Console.WriteLine(result.PassportInfo.DateOfBirth);
Console.WriteLine(result.PassportInfo.DateOfExpiry);
Imports IronOcr
Imports System

' Instantiate OCR engine
Private ocr = New IronTesseract()

Private inputPassport = New OcrInput()

inputPassport.LoadImage("passport.jpg")

' Perform OCR
Dim result As OcrPassportResult = ocr.ReadPassport(inputPassport)

' Output passport information
Console.WriteLine(result.PassportInfo.GivenNames)
Console.WriteLine(result.PassportInfo.Country)
Console.WriteLine(result.PassportInfo.PassportNumber)
Console.WriteLine(result.PassportInfo.Surname)
Console.WriteLine(result.PassportInfo.DateOfBirth)
Console.WriteLine(result.PassportInfo.DateOfExpiry)
$vbLabelText   $csharpLabel

Salida

Output de resultado

A continuación, accedemos al miembro de datos PassportInfo obtenido del objeto OcrPassportResult.

  • GivenNames: Una propiedad de PassportInfo que devuelve los nombres dados del pasaporte de entrada como una cadena. Esto corresponde a la primera fila de datos MRZ con posiciones del 4 al 44.
  • Country: Una propiedad de PassportInfo devuelve el país del pasaporte ingresado como una cadena. Esto corresponde a la primera fila de datos MRZ con posiciones de 2 a 3. La cadena devuelta deletrearía el nombre completo del país emisor en lugar de la abreviatura. En nuestro ejemplo, EE. UU. vuelve a ser Estados Unidos de América.
  • PassportNumber: Una propiedad de PassportInfo que devuelve los nombres dados del pasaporte de entrada como una cadena. Esto corresponde a la segunda fila de datos MRZ, con posiciones del 1 al 9.
  • Apellido: Una propiedad de PassportInfo devuelve el apellido del pasaporte de entrada como una cadena. Esto corresponde a la primera fila de datos MRZ con posiciones del 4 al 44.
  • DateOfBirth: Una propiedad de PassportInfo devuelve la fecha de nacimiento de la entrada del pasaporte como una cadena en el formato YYYY-MM-DD. Esto corresponde a la segunda fila de datos MRZ con posiciones del 14 al 19.
  • DateOfExpiry: Un miembro de propiedad de PassportInfo que devuelve la fecha de vencimiento del pasaporte ingresado como una cadena en el formato AAAA-MM-DD. Esto corresponde a la segunda fila de datos MRZ con las posiciones 22 a 27.

Comprendiendo la Información MRZ

IronOCR lee la información MRZ que se encuentra en las dos filas inferiores de cualquier pasaporte que siga el estándar de la (Organización de Aviación Civil Internacional) ICAO. Los datos MRZ consisten en dos filas de datos, cada conjunto de posiciones contiene información única. A continuación, se presenta una breve tabla sobre qué información corresponde al índice de la fila; para todas las excepciones e identificadores únicos, por favor consulte los estándares de documentación de ICAO.

Ejemplo de entrada:

Ubicación de MRZ

Primera Fila

Position Field Description
1Document TypeTypically 'P' for passport
2-3Issuing CountryThree-letter country code (ISO 3166-1 alpha-3)
4-44Surname and Given NamesSurname followed by '<<' and then given names separated by '<'

Segunda fila

Position Field Description
1-9Passport NumberUnique passport number
10Check Digit (Passport Number)Check digit for the passport number
11-13NationalityThree-letter nationality code (ISO 3166-1 alpha-3)
14-19Date of BirthDate of birth in YYMMDD format
20Check Digit (Date of Birth)Check digit for the date of birth
21SexGender ('M' for male, 'F' for female, 'X' for unspecified)
22-27Date of ExpiryExpiry date in YYMMDD format
28Check Digit (Date of Expiry)Check digit for the date of expiry
29-42Personal NumberOptional personal number (usually national ID number)
43Check Digit (Personal Number)Check digit for the personal number
44Check Digit (Composite)Overall check digit

Depuración

También podríamos verificar los resultados de IronOCR obteniendo el texto extraído en bruto de la imagen del pasaporte y el nivel de confianza para confirmar si la información extraída es precisa. Usando el ejemplo anterior, podemos acceder a las propiedades Confidence y Text del objeto OcrPassportResult.

:path=/static-assets/ocr/content-code-examples/how-to/read-passport-debug.cs
using IronOcr;
using System;

// Instantiate OCR engine
var ocr = new IronTesseract();

using var inputPassport = new OcrInput();

inputPassport.LoadImage("passport.jpg");

// Perform OCR
OcrPassportResult result = ocr.ReadPassport(inputPassport);

// Output Confidence level and raw extracted text
Console.WriteLine(result.Confidence);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System

' Instantiate OCR engine
Private ocr = New IronTesseract()

Private inputPassport = New OcrInput()

inputPassport.LoadImage("passport.jpg")

' Perform OCR
Dim result As OcrPassportResult = ocr.ReadPassport(inputPassport)

' Output Confidence level and raw extracted text
Console.WriteLine(result.Confidence)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

Salida de consola:

Depuración
  • Confianza: La propiedad Confidence de OcrPassportResult es un valor flotante que indica la confianza estadística de precisión del OCR como un promedio de cada carácter. Este valor flotante sería menor si la imagen del pasaporte está borrosa o contiene otra información. Donde 1 es el más alto y más confiado, y 0 es el más bajo y el menos confiado.
  • Texto: La propiedad Text de OcrPassportResult contiene el texto bruto, sin analizar, extraído de la imagen del pasaporte. Los desarrolladores podrían usar esto en pruebas unitarias para verificar el texto extraído de la imagen del pasaporte.
Curtis Chau
Redactor técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Universidad de Carleton) y se especializa en desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente atractivas, Curtis disfruta trabajando con frameworks modernos y creando manuales bien estructurados y visualmente atractivos.

Más allá del desarrollo, Curtis tiene un gran interés en el Internet de las Cosas (IoT), explorando formas innovadoras de integrar hardware y software. En su tiempo libre, disfruta de los videojuegos y de construir bots para Discord, combinando su amor por la tecnología con la creatividad.