Esta sección aborda algunas características específicas del reconocimiento de códigos de barras con ABBYY FineReader Engine 12. Los aspectos principales del reconocimiento de códigos de barras se describen en el escenario Reconocimiento de códigos de barras.En la mayoría de los casos, si un código de barras cumple la especificación, puede reconocerse con la configuración predeterminada. En otros casos, es necesario especificar determinados parámetros. Estos parámetros se especifican mediante el subobjeto BarcodeParams del objeto PageAnalysisParams.
Los códigos de barras de los tipos Code 39, Interleaved 2 of 5, Codabar y Matrix 2 of 5 pueden incluir una suma de comprobación. Las sumas de comprobación se utilizan para detectar errores. El algoritmo para calcular la suma de comprobación está definido por el estándar. Debe establecer la propiedad HasChecksum del objeto BarcodeParams en TRUE para que los códigos de barras con suma de comprobación se reconozcan correctamente.
El resultado del reconocimiento no incluye la suma de comprobación del código de barras si el estándar la contempla.
Códigos de barras PDF417, Aztec, Data Matrix, QR Code y MaxiCode
De forma predeterminada, ABBYY FineReader Engine reconoce los códigos de barras PDF417, Aztec, DataMatrix, QR Code y MaxiCode utilizando la página de códigos correspondiente a la especificación. Las páginas de códigos son las siguientes:
para PDF417 — DOS de Estados Unidos (437) (CP_US_MSDOS)
para Aztec, DataMatrix, QR Code y MaxiCode — ISO Latin 1 (8859-1) (CP_Latin_ISO)
A veces, estos códigos de barras no se ajustan a la especificación; es decir, se crean con una página de códigos distinta de la definida por la especificación. En este caso, es necesario especificar manualmente la página de códigos mediante la propiedad CodePage del objeto BarcodeParams.
Los Códigos QR pueden utilizarse para codificar una gran cantidad de datos combinando hasta 16 códigos en una secuencia con formato Structured Append. El objeto BarcodeBlock proporciona acceso a información específica sobre la secuencia Structured Append mediante las propiedades QrCodeSequenceId, QrCodeSequenceCount y QrCodeSequenceIndex, y puede usarlo en su programa para unir los códigos reconocidos.
Los códigos de barras PDF417, Aztec, DataMatrix y QR Code pueden codificar tanto texto como datos binarios. ABBYY FineReader Engine representa todos los datos reconocidos de códigos de barras, incluidos los datos binarios, como texto. La forma en que los datos binarios se representan como texto depende del valor de la propiedad ContainsBinaryData del objeto BarcodeParams:
Los datos binarios, al igual que los datos de texto, se representan como una cadena Unicode (IBarcodeBlock::Text).
Los datos se convierten en una cadena Unicode mediante la página de códigos especificada en la propiedad IBarcodeParams::CodePage. Para obtener los datos binarios a partir de la cadena Unicode, debe decodificar la cadena con la página de códigos correspondiente.
El cero binario no puede convertirse correctamente en una cadena Unicode. El carácter correspondiente en la cadena será el símbolo de “carácter no reconocido” (”^”) y tendrá la propiedad IBarcodeSymbol::IsBinaryZero establecida en TRUE.
Los datos binarios, al igual que los datos de texto, se representan como una cadena Unicode (IBarcodeBlock::Text).
Los datos binarios se guardan en la cadena Unicode como una secuencia de valores hexadecimales de los bytes correspondientes. Por ejemplo, la cadena “00FF02” se utilizará para los siguientes 3 bytes: 0x00, 0xFF, 0x02.
Para reconocer códigos de barras que no se ajustan a la especificación o códigos de barras con sumas de comprobación, haga lo siguiente (suponemos que ya se ha cargado el perfil predefinido BarcodeRecognition_Accuracy o BarcodeRecognition_Speed):
Cambie los valores predeterminados de las propiedades necesarias del subobjeto BarcodeParams (DocumentProcessingParams contiene una propiedad PageProcessingParams, que contiene PageAnalysisParams, que a su vez incluye BarcodeParams).
Pase el objeto DocumentProcessingParams al método Process del objeto FRDocument como parámetro de entrada.
Si utiliza otros métodos de procesamiento, es posible que requieran un objeto PageAnalysisParams o un objeto PageProcessingParams como parámetros de entrada. Siga el mismo procedimiento y cambie los valores del subobjeto BarcodeParams de uno de estos objetos.
// Suponemos que Engine ya se ha cargado// y que el documento ya está abiertoIEngine* Engine;IFRDocument* frDocument;HRESULT res; // use esta variable para comprobar si la llamada al método se realizó correctamente...// Crear un objeto DocumentProcessingParamsIDocumentProcessingParams* params = 0;res = Engine->CreateDocumentProcessingParams( ¶ms );IPageProcessingParams* pageParams = 0;IPageAnalysisParams* analysisParams = 0;IBarcodeParams* barcodeParams = 0;res = params->get_PageProcessingParams( &pageParams );res = pageParams->get_PageAnalysisParams( &analysisParams );res = analysisParams->get_BarcodeParams( &barcodeParams );// Especificar los parámetros necesariosres = barcodeParams->set_Type( BT_Code39 );// Reconocer códigos de barras// Suponemos que el perfil predefinido BarcodeRecognition ya se ha cargadores = frDocument->Process( params );...
Código C++ (COM)
FREngine::IEnginePtr Engine;FREngine::IFRDocumentPtr frDocument;...// Crear un objeto DocumentProcessingParamsFREngine::IDocumentProcessingParamsPtr params = Engine->CreateDocumentProcessingParams();// Especificar los parámetros necesariosparams->PageProcessingParams->PageAnalysisParams->BarcodeParams->Type = FREngine::BT_Code39;// Reconocer códigos de barras. Suponemos que el objeto FRDocument ya se ha creado y// que el perfil predefinido BarcodeRecognition ya se ha cargadofrDocument->Process( params );...
Código C#
FREngine.IEngine engine;FREngine.IFRDocument frDocument;...// Crear un objeto DocumentProcessingParamsFREngine.IDocumentProcessingParams dpp = engine.CreateDocumentProcessingParams();// Especificar los parámetros necesariosdpp.PageProcessingParams.PageAnalysisParams.BarcodeParams.Type = (int)FREngine.BarcodeTypeEnum.BT_Code39;// Reconocer códigos de barras. Suponemos que el objeto FRDocument ya se ha creado y// que el perfil predefinido BarcodeRecognition ya se ha cargadofrDocument.Process( dpp );
La calidad del reconocimiento de códigos de barras depende de la calidad de impresión del código y de la configuración utilizada durante el proceso de escaneado del documento. Para que los códigos de barras se reconozcan correctamente, siga estas recomendaciones:
Un código de barras debe estar separado de cualquier otro texto por un espacio en blanco bastante amplio.
El tamaño del código de barras y el ancho de cada una de sus barras o puntos deben cumplir los siguientes requisitos:
La altura óptima del código de barras es superior a 10 milímetros. El tamaño de un código de barras debe ser inferior al tamaño A4.
La altura del código de barras debe ser superior al doble de la altura de una línea de texto.
En los códigos de barras no cuadrados, la longitud debe ser mayor que la altura.
En los códigos de barras 1D, el ancho de la barra más fina debe ser de al menos 3-5 píxeles de la imagen.
En los códigos de barras 2D, las dimensiones de sus celdas deben ser de al menos 2x2 píxeles; el tamaño recomendado es de 4x4 píxeles o más. Además, en todos los códigos de barras 2D excepto PDF417, las celdas deben ser cuadradas porque, si el código de barras 2D está estirado, lo más probable es que se reconozca incorrectamente.
No recomendamos comprimir imágenes de códigos de barras con compresión JPEG, ya que esto hace que los bordes se vean borrosos.
No recomendamos inclinar los códigos de barras; es decir, el ángulo del código de barras debe ser un múltiplo de 90 grados con respecto al eje horizontal.
El modo de escaneado en escala de grises es el mejor para fines de Reconocimiento óptico de caracteres (OCR). Al escanear en blanco y negro, ajuste la configuración de brillo. Si el código de barras aparece “cortado” o es muy claro, reduzca el brillo para oscurecer la imagen. Si el código de barras está distorsionado o sus partes aparecen pegadas entre sí, aumente el brillo para aclarar la imagen.
Evite imprimir códigos de barras dentro de marcos.
Evite imprimir códigos de barras sobre texto o imágenes.
En la práctica, los códigos de barras que no cumplen estas recomendaciones pueden seguir reconociéndose; sin embargo, la calidad del reconocimiento puede ser baja.