Skip to main content
En esta sección se describen varias formas habituales de crear FlexiLayouts que encuentren campos de fecha en imágenes de baja calidad. Estas imágenes son bastante comunes y presentan diversos defectos de escaneo, causados principalmente por una configuración de escaneo incorrecta. Por ejemplo, la imagen puede verse demasiado clara o demasiado oscura si los ajustes de brillo no son correctos. Como resultado, puede perderse parte de la información de la imagen o algunas zonas pueden contener ruido.

Cuando el elemento fecha no puede detectar una fecha

FlexiLayout Studio ofrece un elemento especial fecha que se utiliza para detectar fechas. Sin embargo, al crear un FlexiLayout, puede que este elemento no sea suficiente. Esto puede ocurrir cuando la fecha de los documentos no coincide con ninguno de los formatos disponibles en el elemento fecha. Por ejemplo, FlexiLayout Studio permite usar los siguientes idiomas para especificar el mes en el campo de fecha: English, Czech, Danish, Dutch, Estonian, Finnish, French, German, Greek, Hungarian, Italian, Latvian, Lithuanian, Norwegian, Polish, Portuguese, Russian, Spanish, Swedish, Turkish. Si el mes está escrito con palabras en un idioma distinto de los enumerados, la fecha no coincide con ninguno de los formatos disponibles, por lo que no puede detectarse mediante un elemento fecha. También pueden producirse errores en la búsqueda de fechas si la imagen contiene elementos que no pueden eliminarse. Por ejemplo, la fecha puede estar subrayada y no haber un espacio visible entre la fecha y el subrayado, puede estar tachada o escrita en celdas de caracteres con separadores negros (marcos, peines). Las motas en el área de búsqueda o el hecho de que la fecha no esté mecanografiada, sino escrita a mano, también pueden hacer que el elemento fecha no pueda utilizarse para buscar fechas.

El proyecto de ejemplo SearchOfDate.fsp

La mejor manera de organizar la búsqueda de un campo de fecha se describe en el proyecto de ejemplo SearchOfDate.fsp (carpeta %public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Date). El proyecto contiene cinco páginas: El objetivo es encontrar la fecha en todas las imágenes, incluidas aquellas en las que el formato de fecha no es compatible con el elemento fecha.

Buscar formatos de fecha compatibles con el elemento fecha

Todos los elementos que describen el campo de fecha se agrupan en un elemento DateGroup. En primer lugar, este grupo contiene un elemento que busca el nombre del campo de fecha. En el proyecto de ejemplo, se trata de un elemento de tipo texto estático llamado DateHeader con el único valor Date:.
Configurar las restricciones de búsqueda para todos los elementos en la sección Relations no es difícil y, por lo tanto, no se describe aquí. Puede consultarlo directamente en el proyecto.
El grupo también contiene un elemento fecha llamado DateField. Este elemento busca campos de fecha cuyo formato sea compatible con el elemento fecha. Como puede verse en el proyecto, el elemento fecha solo puede detectar la fecha en la primera página.

Buscar otros formatos de fecha con un elemento de cadena de caracteres

Para buscar fechas en las demás páginas, el proyecto utiliza un elemento de cadena de caracteres llamado DateAsString. Este elemento usa un alfabeto para representar todos los caracteres que probablemente aparezcan en las imágenes.
Si el contenido de un campo de datos puede estructurarse y tiene un formato que el elemento fecha no admite, es aconsejable describir ese formato con una expresión regular en lugar de especificar un alfabeto.No obstante, debe asegurarse de que las imágenes procesadas sean de alta calidad, ya que una expresión regular presupone una coincidencia del 100 % entre el campo y la estructura descrita (los alfabetos, en cambio, permiten un cierto porcentaje de errores, que se especifica en las propiedades del elemento). Por lo tanto, los alfabetos son una herramienta más flexible en los casos en que no se puede garantizar la exactitud del reconocimiento.Si sabe que el mes de la fecha se escribirá como una palabra en el mismo idioma que el idioma de prerreconocimiento, puede ser aconsejable dividir el campo de fecha en tres secciones (día, mes y año) y buscar el campo del mes por separado mediante un elemento de tipo texto estático.Dicho elemento de texto estático debe describir todas las variaciones posibles del mes (por ejemplo, los nombres completos y abreviados del mes en el idioma correspondiente). Los campos de día y año pueden encontrarse entonces a la derecha y a la izquierda del mes mediante elementos de cadena de caracteres.
Captura de pantalla del editor de alfabeto en ABBYY FlexiLayout Studio utilizado para especificar los caracteres permitidos para el elemento de cadena de caracteres DateAsString.
Para optimizar el emparejamiento de FlexiLayout, se proporciona la siguiente condición en el campo de relación avanzada de prebúsqueda para el elemento DateAsString:
que es lo mismo que:
Esta condición significa que la búsqueda de la fecha como una cadena de caracteres solo se inicia si la fecha no puede detectarse mediante un elemento fecha. Como se muestra en el proyecto, el elemento DateAsString encuentra la fecha en las páginas restantes del proyecto, donde el elemento fecha no pudo detectarla.

Capturar fechas parcialmente reconocidas con un elemento de colección de objetos

Sin embargo, en la página 4, la cadena detectada contiene solo una parte del campo de fecha. Si consulta los resultados del prerreconocimiento del campo de fecha (haciendo clic en Show Raw Objects en la Toolbar), el motivo de la detección parcial queda claro. El área de búsqueda contiene no solo objetos de texto, sino también otros tipos de objetos: Imagen y signo de puntuación. Esta situación es típica en imágenes de baja calidad: los objetos de texto no siempre se reconocen durante el prerreconocimiento.
Captura de pantalla de los objetos sin procesar del prerreconocimiento en ABBYY FlexiLayout Studio que muestra que el área de búsqueda del campo de fecha contiene objetos de texto, imagen y signo de puntuación.
Para encontrar todos los objetos asociados con el campo de fecha, el proyecto usa un elemento de colección de objetos llamado DateAsObjectCollection. En las propiedades del elemento se especifican todos los tipos de objeto detectados en el campo de fecha durante el prerreconocimiento. Para optimizar el emparejamiento de FlexiLayout, se usa la siguiente condición en el campo relación avanzada de prebúsqueda para los elementos DateAsObjectCollection y DateAsString:
La condición if (DateAsString.IsNull == FALSE) then Dontfind() no puede añadirse a las Propiedades avanzadas del elemento DateAsObjectCollection porque, como muestra el ejemplo, la cadena detectada puede contener solo una parte de la fecha.

Definir la región del bloque fecha a partir de AlternativeDateGroup

En este punto, el conjunto de elementos que describen las restricciones de búsqueda de los campos de fecha está completo. El elemento de grupo SearchElements.DateGroup.AlternativeDateGroup, que consta de los elementos DateField, DateAsString y DateAsObjectCollection, se especifica en el árbol del proyecto como Source element para el bloque fecha. Como se utilizó el método Dontfind() para describir las propiedades de los elementos DateAsString y DateAsObjectCollection, la región real del bloque detectado coincidirá bien con la región encontrada por la hipótesis para el elemento fecha, bien con la combinación de las regiones de los elementos DateAsObjectCollection y DateAsString. En este último caso, se espera que la región del elemento DateAsString forme parte de la región del elemento DateAsObjectCollection, por lo que la región resultante será la del elemento DateAsObjectCollection.
En este caso, puede especificar el elemento de grupo SearchElements.DateGroup.AlternativeDateGroup como Source element porque la situación es relativamente simple. La región del grupo es una combinación de las regiones de sus subelementos detectados.El método Dontfind() permite omitir la búsqueda de algunos subelementos. Por lo tanto, la región del elemento de grupo SearchElements.DateGroup.AlternativeDateGroup coincidirá con la región del subelemento. En el ejemplo dado, el método Dontfind() no solo ayuda a optimizar el emparejamiento de FlexiLayout, sino que también simplifica la descripción de los bloques.
Como alternativa, puede usar el siguiente código en la sección Expression.
El uso de una Expression ofrece opciones adicionales. Por ejemplo, puede comprobar si la región del elemento DateAsString realmente forma parte de la región de DateAsObjectCollection.
Captura de pantalla de la sección Expression en ABBYY FlexiLayout Studio que muestra el código de FlexiLayout language que define la región de salida del bloque fecha a partir de los elementos AlternativeDateGroup en el proyecto SearchOfDate.fsp.
Usar un elemento de cadena de caracteres para buscar un campo de fecha, sin definir el formato de la cadena ni usar un elemento de colección de objetos, como en el ejemplo proporcionado, puede dar buenos resultados si el área de búsqueda del campo de fecha puede definirse claramente.Sin embargo, si hay varias cadenas de caracteres en el área de búsqueda, el formato de la cadena debe describirse mediante una expresión regular o un alfabeto más restringido. De lo contrario, la hipótesis final puede no ser satisfactoria.Con un elemento de cadena de caracteres, puede limitar el número de caracteres de una cadena, el número de finales de palabra y la longitud de los espacios para descartar hipótesis incorrectas. Si se usa un elemento de colección de objetos, la hipótesis incluirá todos los objetos de la imagen que se encuentren dentro del área de búsqueda y cumplan las restricciones sobre el tamaño del objeto.