Cómo leer códigos de barras de archivos de imagen (jpg, png, gif, tiff, svg, bmp)

This article was translated from English: Does it need improvement?
Translated
View the article in English

por Hairil Hasyimi Bin Omar




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

Primer Paso:
green arrow pointer

Lectura directa de códigos de barras a partir de una imagen

Una de las principales características de IronBarcode es su capacidad para leer códigos de barras desde múltiples formatos de imagen. Esto incluye:

* Gráficos vectoriales escalables(SVG)

* Grupo Mixto de Expertos en Fotografía(JPEG)

* Gráficos de red portátiles(PNG)

* Formato de intercambio de gráficos(GIF)

* Tagged Formato de archivo de imagen(TIFF)

* Archivo de imagen de mapa de bits(BMP)

Esto es posible gracias a nuestra biblioteca de código abierto, IronDrawing. Ahora vamos a ver cómo podemos utilizar IronBarcode para leer códigos de barras de dos imágenes de código de barras adjunta como se demuestra en el siguiente fragmento de código.

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-images-1.cs
using IronBarCode;
using System;

var myBarcode = BarcodeReader.Read(@"image_file_path.jpg"); //image file path

foreach (var item in myBarcode)
{
    Console.WriteLine(item.ToString());
}
Imports IronBarCode
Imports System

Private myBarcode = BarcodeReader.Read("image_file_path.jpg") 'image file path

For Each item In myBarcode
	Console.WriteLine(item.ToString())
Next item
VB   C#
QRcodeintro related to Lectura directa de códigos de barras a partir de una imagen
Ejemplo de código QR de prueba
Code128intro related to Lectura directa de códigos de barras a partir de una imagen
Ejemplo de código de barras de prueba

¿Quieres saber cuáles son los valores del código de barras en las muestras? ¡¡Pruébalo con el fragmento de código!! Para utilizar IronBarcode, lo primero que debe hacer es instalar la librería IronBarcode a través del gestor de paquetes NuGet de Microsoft Visual Studio en su proyecto, tal y como se muestra en la siguiente imagen. Esto le permitirá acceder a IronBarcode BarcodeReader.Read() method to directly read barcode image.

A partir del fragmento de código anterior, podemos ver que IronBarcode ofrece simplicidad al permitir a los usuarios utilizar únicamente BarcodeReader.Read() para leer un archivo de imagen que ya se ha incluido en el proyecto especificando el parámetro nombre del archivo cadena, O ruta del archivo como parámetro del método. La mejor práctica es utilizar la cadena literal "@" al especificar una ruta de archivo en el método, ya que si no se incluye, los usuarios tendrían que añadir varios caracteres de escape "\" en la cadena de ruta del archivo.

Adjuntar Valores() al final de BarcodeReader.Read() para obtener el valor del código de barras en forma de System.String [] object.

Para ver el resultado en la consola, puede utilizar foreach para iterar sobre los valores almacenados en el campo cadena [] y, dentro del bloque de bucle, llame a Console.WriteLine() method with the iterator variable as the parameter.

Este método no sólo es capaz de leer formatos de códigos de barras unidimensionales(Codabar, Code128, Code39, Code93, EAN13, EAN18, ITF, MSI, UPCA, UPCE)También puede leer formatos de códigos de barras bidimensionales.(Azteca, DataMatrix, QRCode) en varios formatos de imagen.

Configuración de las opciones del lector de códigos de barras

¿Siente que la lectura de códigos de barras es demasiado lenta? ¿Código de barras demasiado pequeño en la imagen y IronBarcode no puede leerlo? ¿Quieres leer sólo determinadas zonas de una imagen? ¿Desea leer sólo determinados tipos de códigos de barras en una imagen con mezclas de códigos de barras? ¿Quiere mejorar su rendimiento general en lectura? No te preocupes más!

BarcodeReaderOptions permite a los usuarios modificar o ajustar el comportamiento del lector de códigos de barras para que pueda resolver todos los problemas mencionados anteriormente. Veamos y analicemos en detalle todas las propiedades ajustables disponibles en BarcodeReaderOptions uno a uno:

Área de cultivo

Área de cultivo es una propiedad de tipo IronSoftware.Drawing.CropRectangle disponible en BarcodeReaderOptions que permite a los usuarios especificar el área de una imagen que el usuario desea que IronBarcode lea. Esto ayudará a mejorar el rendimiento de la lectura, ya que el lector de códigos de barras no necesita escanear toda la imagen en busca de códigos de barras, así como a mejorar la precisión de la lectura, ya que se ha especificado el área de lectura.

Para ajustar el Área de cultivo basta con instanciar un nuevo objeto de tipo Rectángulo y especificar como argumentos las coordenadas del rectángulo, su anchura y su longitud. La unidad de medida aceptada es el píxel(px). CropArea = new IronSoftware.Drawing.Rectangle(x, y, width, height)

EsperarTiposDeCódigo

Por defecto, todos los códigos de barras soportados en IronBarcode serán escaneados en una imagen. Sin embargo, si el usuario sabe qué tipo de códigos de barras están disponibles o desea leer en una imagen, configurar esta propiedad para leer sólo un determinado tipo de código de barras aumentará enormemente el rendimiento y la precisión de la lectura, ya que el lector de códigos de barras no necesita iterar a través de colecciones de códigos de barras para interpretar y leer un código de barras.

Para utilizar esta propiedad, basta con definir la propiedad EsperarTiposDeCódigo a uno de los campos de Código de barras enum. Conozcamos todos los tipos de códigos de barras soportados por IronBarcode y veamos un ejemplo de código de barras de cada tipo.

  • TodoUnaDimensión : Tipos lineales de código de barras. This includes Codabar, Code128, Code39, Code93, EAN13, EAN18, ITF, MSI, UPCA, UPCE barcodes.

  • TodoBidimensional : Incluye códigos de barras de cuadrícula, matriciales y apilados. The barcode type that falls under 2 Dimensional barcodes are Aztec, DataMatrix, QRCode barcodes.

  • Azteca : Formato de código de barras 2D Aztec. El código azteca es un tipo de código de barras 2D inventado por Andrew Longacre, Jr. y Robert Hussey en 1995. Llamado así por la semejanza del patrón del buscador central con una pirámide azteca, el código azteca tiene el potencial de utilizar menos espacio que otros códigos de barras matriciales porque no requiere una "zona tranquila" circundante en blanco. A continuación se muestra un ejemplo de código de barras azteca
  • Muestra de código de barras Aztec
    Código de barras azteca
  • Codabar : Codabar es una simbología de código de barras lineal desarrollada en 1972 por Pitney Bowes Corp. Codabar codifica sólo datos numéricos (dígitos). A continuación se muestra un ejemplo de código de barras Codabar
  • Ejemplo de código de barras Codabar
    Código de barras Codabar
  • Código 128 : El Código 128 es una simbología de código de barras lineal de alta densidad definida en la norma ISO/IEC 15417:2007. Se utiliza para alfanumérico o sólo numérico códigos de barras. A continuación se muestra un ejemplo de código de barras Code128
  • Muestra de código de barras Code128
    Código de barras Code128
  • Código 39 : El Código 39 es una simbología de código de barras discreto de longitud variable. La especificación del Código 39 define 43 caracteres, formados por letras mayúsculas (de la A a la Z). A continuación se muestra un ejemplo de código de barras Code39
  • Muestra de código de barras Code39
    Código de barras Code39
  • Código93 : Formato de código de barras Code 93 1D. El Código 93 es una simbología de código de barras diseñada en 1982 por Intermec para proporcionar una mayor densidad y seguridad de datos al Código 39. El Código 93 admite la codificación de sólo los siguientes caracteres ASCII: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 - . $ / + % ESPACIO. A continuación se muestra un ejemplo de código de barras Code93
  • Muestra de código de barras Code93
    Código de barras Code93
  • Matriz de datos : Un Data Matrix es un código de barras bidimensional formado por "celdas" o módulos blancos y negros dispuestos en un patrón cuadrado o rectangular, también conocido como matriz. La información a codificar puede ser datos textuales o numéricos. El tamaño habitual de los datos oscila entre unos pocos bytes y 1556 bytes. A continuación se muestra un ejemplo de código de barras DataMatrix
  • Muestra de código de barras DataMatrix
    Código de barras DataMatrix
  • EAN13 : El Número Internacional de Artículo (también conocido como Número Europeo de Artículo o EAN) es un estándar que describe una simbología de código de barras y un sistema de numeración utilizado en el comercio mundial para identificar un tipo específico de producto al por menor, en una configuración de embalaje específica, de un fabricante específico. EAN-13 puede codificar únicamente contenidos numéricos (dígitos) de longitud 12 o 13 dígitos. A los códigos de barras más cortos se les añadirán automáticamente ceros (000) al principio del número. A continuación se muestra un ejemplo de código de barras EAN13
  • Ejemplo de código de barras EAN13
    Código de barras EAN13
  • EAN8 : Un EAN-8 es un código de barras de simbología EAN/UPC y deriva del código más largo International Article Number (EAN-13). EAN-8 puede codificar únicamente contenidos numéricos (dígitos) de 7 u 8 dígitos de longitud. A los códigos de barras más cortos se les añadirán automáticamente ceros (000) al principio del número. A continuación se muestra un ejemplo de código de barras EAN8
  • Ejemplo de código de barras EAN8
    Código de barras EAN8
  • Correo inteligente : Formato de código de barras Intelligent Mail 2D. El código de barras Intelligent Mail (también conocido como "IM Barcode" o "USPS OneCode Barcodes" o "IMB") es un código de barras de 65 barras que se utiliza en el correo en Estados Unidos. El término "Intelligent Mail" se refiere a los servicios ofrecidos por el Servicio Postal de Estados Unidos para la entrega de correo nacional. El código de barras IM pretende proporcionar mayor información y funcionalidad que sus predecesores POSTNET y PLANET. Tenga en cuenta que IronBarcode puede sólo LEER este tipo de código de barras. A continuación se muestra un ejemplo de código de barras de este tipo
  • Muestra de código de barras IntelligentMail
    Código de barras IntelligentMail
  • ITF : ITF-14 es la implementación GS1 de un código de barras intercalado 2 de 5 (ITF) para codificar un número de artículo de comercio mundial. Los símbolos ITF-14 se utilizan generalmente en los niveles de embalaje de un producto, como una caja de 24 latas de sopa. El ITF-14 siempre codifica 14 dígitos. ITF codifica sólo datos numéricos. Si el número de dígitos no es par, se añadirá automáticamente un "0". A continuación se muestra un ejemplo de código de barras ITF
  • Muestra de código de barras ITF
    Código de barras ITF
  • MaxiCode : Formato de código de barras MaxiCode 2D. MaxiCode es un sistema de símbolos legibles por máquina, de dominio público, creado y utilizado originalmente por United Parcel Service. Adecuado para el seguimiento y la gestión del envío de paquetes, se asemeja a un código de barras, pero en su lugar utiliza puntos dispuestos en una cuadrícula hexagonal. Tenga en cuenta que IronBarcode puede sólo LEER este tipo de código de barras. A continuación se muestra un ejemplo de código de barras de este tipo
  • Ejemplo de código de barras MaxiCode
    Código de barras MaxiCode
  • MSI : MSI es una simbología de código de barras desarrollada por MSI Data Corporation, basada en la simbología original Plessey Code. Este tipo de código de barras sólo acepta valores numéricos. A continuación se muestra un ejemplo de código de barras de tipo MSI
  • Ejemplo de código de barras MSI
    Código de barras MSI
  • PDF417 : PDF417 es un formato de símbolo de código de barras lineal apilado que se utiliza en diversas aplicaciones, principalmente transporte, tarjetas de identificación y gestión de inventarios. PDF son las siglas de Portable Data File (archivo de datos portátil). El 417 significa que cada patrón del código consta de 4 barras y espacios, y que cada patrón tiene 17 unidades de longitud. La simbología PDF417 fue inventada por el Dr. Ynjiun P. Wang en Symbol Technologies en 1991. (Wang 1993) Es la norma ISO 15438. A continuación se muestra un ejemplo de código de barras PDF417
  • Ejemplo de código de barras PDF417
    Código de barras PDF417
  • PharmaCode : Código binario farmacéutico. Un estándar de código de barras binario tolerante a fallos de lectura utilizado en la industria médica. Tenga en cuenta que IronBarcode puede sólo LEER este tipo de código de barras. A continuación se muestra un ejemplo de código de barras PharmaCode
  • Ejemplo de código de barras PharmaCode
    Código de barras PharmaCode
  • Plessey : El código Plessey es una simbología de código de barras lineal 1D basada en la modulación por anchura de impulsos, desarrollada en 1971 por The Plessey Company PLC, una empresa con sede en Gran Bretaña. Este tipo de código de barras sólo acepta valores numéricos. A continuación se muestra un ejemplo de código de barras Plessey
  • Muestra de código de barras Plessey
    Código de barras Plessey
  • Código QRCode : Código QR (abreviatura de Quick Response Code) es la marca comercial de un tipo de código de barras matricial (o código de barras bidimensional) diseñado por primera vez en 1994 para la industria del automóvil en Japón. Un código de barras es una etiqueta óptica legible por máquina que contiene información sobre el artículo al que se adhiere. Un código QR utiliza cuatro modos de codificación normalizados (numérico, alfanumérico, byte/binario y kanji) para almacenar datos de forma eficiente; también se pueden utilizar extensiones. A continuación se muestra un ejemplo de código de barras QR
  • Muestra de código de barras QRCode
    Código de barras QRCode
  • Rss14 : Reduce Space Symbology 14 formato de código de barras. Puede representar un código de barras 1D o un código de barras 2D apilado. El código de barras RSS 14 (Simbología de Espacio Reducido) codifica la identificación completa del artículo EAN.UCC de 14 dígitos en un símbolo que puede ser escaneado omnidireccionalmente por escáneres láser de punto de venta convenientemente configurados. Se trata de los últimos tipos de códigos de barras para la identificación con restricciones de espacio de EAN International y Uniform Code Council, Inc. Los códigos de barras RSS se han identificado para el sector de la alimentación y la atención sanitaria, donde los artículos son demasiado pequeños para permitir otras simbologías de códigos de barras. Tenga en cuenta que IronBarcode puede sólo LEER este tipo de código de barras. A continuación se muestra un ejemplo de código de barras Rss14
  • Muestra de código de barras 1D Rss14
    Dimensión Rss14 Código de barras
    Ejemplo de código de barras 2D Rss14
    Código de barras bidimensional Rss14
  • UPCA : El Código Universal de Producto (UPC) es una simbología de código de barras ampliamente utilizada en Estados Unidos, Canadá, Reino Unido, Australia, Nueva Zelanda, Europa y otros países para el seguimiento de artículos comerciales en las tiendas. UPC (técnicamente se refiere a UPC-A) consta de 12 dígitos numéricos, que se asignan de forma exclusiva a cada artículo comercial. Junto con el código de barras EAN, el UPC es el código de barras utilizado principalmente para escanear artículos comerciales en el punto de venta, según las especificaciones GS1. El UPCA puede codificar únicamente contenidos numéricos (dígitos) de longitud 12 o 13 dígitos. A los códigos de barras más cortos se les añadirán automáticamente ceros (000) al principio del número. A continuación se muestra un ejemplo de código de barras UPCA
  • Muestra de código de barras UPCA
    Código de barras UPCA
  • UPCE : Para permitir el uso de códigos de barras UPC en envases más pequeños, en los que no cabe un código de barras completo de 12 dígitos, se desarrolló una versión de UPC con "supresión de ceros", denominada UPC-E, en la que se suprimen el dígito del sistema numérico, todos los ceros finales del código del fabricante y todos los ceros iniciales del código del producto. UPCE puede codificar únicamente contenidos numéricos (dígitos) de 7 u 8 dígitos de longitud. A continuación se muestra un ejemplo de código de barras UPCE
  • Ejemplo de código de barras UPCE
    Código de barras UPCE

ExpectMultipleBarcodes

IronBarcode escaneará por defecto todos los códigos de barras disponibles en una imagen, lo que incluye escanear todo el archivo de imagen y añadir los valores de los códigos de barras leídos a la matriz de cadenas. Sin embargo, si los usuarios no desean leer varios códigos de barras en un archivo de imagen, pueden establecer esta propiedad en falso que hará que el lector de códigos de barras deje de escanear una vez encontrado un valor de código de barras. Esto mejorará de nuevo el rendimiento y la velocidad de lectura de IronBarcode.

Filtros de imagen

Una de las propiedades que se pueden añadir en BarcodeReaderOptions es una colección de filtros de imagen. Los filtros de imagen son importantes para preprocesar la imagen en bruto introducida en Iron Barcode. Para aplicar filtros de imagen dentro del BarcodeReaderOptions, los usuarios deben primero iniciar y especificar el Filtro de imágenes colección a utilizar.

MaxParallelThreads

IronBarcode también permite a los usuarios habilitar y ajustar la cantidad de hilos paralelos de ejecución, lo que a su vez mejorará la velocidad y la eficiencia del proceso. Hilos paralelos significa la ejecución de múltiples hilos simultáneamente en diferentes núcleos de procesadores. Importe por defecto para MaxParallelThread en IronBarcode es 4. Los usuarios pueden ajustarlos en función de las capacidades y la cantidad de recursos de que dispongan sus máquinas.

Multihilo

Esta propiedad permite a IronBarcode leer varias imágenes en paralelo. El valor predeterminado para Multihilo es VerdaderoPor lo tanto, los subprocesos múltiples se gestionarán automáticamente para mejorar el rendimiento de las tareas de lectura de códigos de barras por lotes.

EliminarFalsoPositivo

Esta propiedad elimina las lecturas de códigos de barras falsos positivos. Las lecturas falsas positivas de códigos de barras significan simplemente una lectura falsa de los valores del código de barras, pero identificada como válida. Esto puede ocurrir debido a errores en el proceso de secuenciación, como errores de secuenciación, o errores en el etiquetado del código de barras o en el proceso de preparación. Por lo tanto, fijar EliminarFalsoPositivo como verdadero eliminará las lecturas de códigos de barras falsos positivos, mejorando así la precisión de la lectura de códigos de barras. Sin embargo, si los usuarios buscan rendimiento a costa de precisión, establecer esta propiedad en Falso ayudaría. El valor por defecto de esta propiedad es Verdadero.

Velocidad

Como su nombre indica, Velocidad permiten a los usuarios optimizar aún más el rendimiento del lector de códigos de barras IronBarcode. Igual que EliminarFalsoPositivo ajustar esta propiedad mejorará el rendimiento a costa de la precisión, pero en 4 niveles como se muestra a continuación:

  • ReadingSpeed.Faster

    Ajuste del Velocidad a este valor hará que la lectura de códigos de barras sea más rápida, sin embargo, a expensas de la precisión. El programa terminará de ejecutarse rápidamente, pero la mayoría de las veces dará como resultado un código de barras vacío. Esto se debe a que la imagen de entrada no son preprocesados en absoluto y IronBarcode lee la imagen del código de barras tal cual. Se aconseja a los usuarios que utilicen este valor sólo si están seguros de que la imagen de entrada es nítida y clara.

  • ReadingSpeed.Balanced

    Este ajuste es recomendado para la Velocidad propiedad. Establece un equilibrio entre la precisión y el rendimiento de lectura intentando aplicar el Procesado de luz a la imagen para aclarar el área del código de barras y hacer que destaque para que el lector de códigos de barras lo detecte. La mayoría de las veces, esta configuración es suficiente para que IronBarcode lea una imagen de código de barras y produzca una salida precisa.

  • ReadingSpeed.Detailed

    En caso de utilizar el ajuste ReadingSpeed.Balanced no consigue producir un valor de código de barras a partir de la lectura, los usuarios pueden optar por utilizar ReadingSpeed.Detailed. IronBarcode realizará un Procesamiento Medio en la imagen para aclarar más el área del código de barras y que el lector de códigos de barras pueda detectarlo. Este ajuste es muy útil para detectar una imagen de código de barras pequeña o poco nítida.

    Tenga en cuenta, sin embargo, que esta configuración consume mucha CPU y puede afectar al rendimiento de lectura. Se recomienda a los usuarios experimentar con otros ajustes antes de utilizar esta configuración. Combinación de ReadingSpeed.Detailed con EliminarFalsoPositivo a "True" imprimirá una advertencia en la consola. Sin embargo, no afectará a la lectura y puede ignorarse.

  • ReadingSpeed.ExtremeDetail

    Este ajuste es el menos debido a que se trata de un proceso intensivo para la CPU, por lo que se realizará un Procesamiento Pesado de la imagen del código de barras para que el lector pueda leer los códigos de barras. Esto reducirá en gran medida el rendimiento de lectura de IronBarcode. Se aconseja a los usuarios que realicen el preprocesamiento de la imagen/apliquen filtros a la imagen antes de optar por esta configuración.

    Tenga en cuenta, sin embargo, que esta configuración consume mucha CPU y puede afectar al rendimiento de lectura. Se recomienda a los usuarios experimentar con otros ajustes antes de utilizar esta configuración. Combinación de ReadingSpeed.ExtremeDetail con EliminarFalsoPositivo a "True" imprimirá una advertencia en la consola. Sin embargo, no afectará a la lectura y puede ignorarse.

UseCode39ExtendedMode

Este ajuste permite leer e interpretar códigos de barras de tipo Code39 con el modo ampliado, por lo que se aplicará el juego de caracteres ASCII completo. Configuración UseCode39ExtendedMode a Verdadero permitirá una lectura más precisa de los códigos de barras Code39.

Lectura avanzada de códigos de barras a partir de imágenes

Ahora que hemos aprendido todas las opciones que pueden ser ajustadas por los usuarios, ya sea para aumentar el rendimiento o la precisión, veamos cómo podemos aplicarlo en nuestro código. El siguiente fragmento de código lo demuestra.

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-images-2.cs
using IronBarCode;
using System;

BarcodeReaderOptions myOptions = new BarcodeReaderOptions()
{
    ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional, //or AllTwoDimensional
    ExpectMultipleBarcodes = true, // Default is true
    MaxParallelThreads = 2, // Default is 4
    Speed = ReadingSpeed.Detailed, // 4 levels of speed. Default is Balanced
    CropArea = new IronSoftware.Drawing.Rectangle(x: 242, y: 1124, width: 359, height: 378), // Units are in px
    ImageFilters = new ImageFilterCollection { new BinaryThresholdFilter() }, // Assign to image filter object name
    Multithreaded = true, // Default is true
    UseCode39ExtendedMode = true, // Default is true

};

var myBarcode = BarcodeReader.Read(@"image_file_path.jpg", myOptions); // Image file path

foreach (var item in myBarcode)
{
    Console.WriteLine(item.ToString());
}
Imports IronBarCode
Imports System

Private myOptions As New BarcodeReaderOptions() With {
	.ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional,
	.ExpectMultipleBarcodes = True,
	.MaxParallelThreads = 2,
	.Speed = ReadingSpeed.Detailed,
	.CropArea = New IronSoftware.Drawing.Rectangle(x:= 242, y:= 1124, width:= 359, height:= 378),
	.ImageFilters = New ImageFilterCollection From {New BinaryThresholdFilter()},
	.Multithreaded = True,
	.UseCode39ExtendedMode = True
}

Private myBarcode = BarcodeReader.Read("image_file_path.jpg", myOptions) ' Image file path

For Each item In myBarcode
	Console.WriteLine(item.ToString())
Next item
VB   C#

A partir del fragmento de código, podemos ver que para utilizar BarcodeReaderOptions primero tenemos que inicializarlo, luego podemos determinar y ajustar las propiedades del BarcodeReaderOptions según las propiedades indicadas anteriormente. La inicialización BarcodeReaderOptions puede utilizarse posteriormente como argumento en BarcodeReader.Read() junto con el archivo de imagen. Esto aplicará todos los ajustes en BarcodeReaderOptions al leer el código de barras de la imagen.

Hairil related to Lectura avanzada de códigos de barras a partir de imágenes

Hairil Hasyimi Bin Omar

Ingeniero de software

Como todos los grandes ingenieros, Hairil es un ávido aprendiz. Está perfeccionando sus conocimientos de C#, Python y Java, y los utiliza para añadir valor a los miembros del equipo de Iron Software. Hairil se unió al equipo de Iron Software desde la Universiti Teknologi MARA de Malasia, donde se licenció en Ingeniería Química y de Procesos.