Saltar al contenido principal
Los bloques de FlexiLayout corresponden a los campos de los documentos de los que se deben capturar datos. Un bloque especifica el tipo de datos que puede contener el campo y las coordenadas del área de la imagen donde probablemente se encuentre el campo. La rama de bloques está marcada con en el árbol de FlexiLayout. ABBYY FlexiLayout™ Studio admite los siguientes tipos de bloques:
  • Texto (marcado con el icono ) se utiliza para extraer datos de texto Ampliar las regiones de los bloques de texto puede mejorar la calidad del reconocimiento. Para ampliar una región, haga doble clic en el elemento Blocks para abrir su cuadro de diálogo de propiedades y especifique los valores verticales y horizontales de la propiedad Blocks result region inflate.
  • Código de barras (marcado con el icono ) se utiliza para leer códigos de barras
  • Marca de verificación (marcado con el icono ) se utiliza para reconocer marcas de verificación
  • Imagen (marcado con el icono ) se utiliza para procesar objetos que no se identificaron como texto durante el prerreconocimiento
  • Tabla (marcado con el icono ) se utiliza para extraer datos de tablas
  • Grupo (marcado con el icono ) se utiliza para agrupar bloques de forma lógica
  • Grupo de marcas de verificación (marcado con el icono ) se utiliza para crear grupos de marcas de verificación. Solo se pueden agregar bloques de marcas de verificación a este tipo de grupo; aquí no se pueden crear ni mover bloques de otros tipos.
  • Grupo repetido (marcado con el icono ) se utiliza para crear un grupo repetido de bloques
  • No reconocido (marcado con el icono ) se utiliza para excluir un área del reconocimiento
Los bloques para los que no se especifica un área de imagen en al menos una alternativa de layout tienen un cuadrado vacío en la esquina superior derecha del icono: . Si solo se selecciona un FlexiLayout (mediante el elemento Select Layout del menú contextual del elemento, o mediante el mismo elemento en la sección FlexiLayout, o mediante el elemento Select Alternative Layout del menú contextual de FlexiLayout), el programa comprobará el área de la imagen solo en este FlexiLayout.
Los datos de los bloques se extraen en una aplicación de captura de datos como ABBYY FlexiCapture.

Propiedades del bloque

  • Name - el nombre del bloque. El nombre de un bloque puede contener letras (caracteres latinos, caracteres latinos con diacríticos y caracteres cirílicos), dígitos y guiones bajos. El nombre de un bloque debe comenzar con una letra o un guion bajo. Los nombres de los bloques no deben contener espacios ni símbolos especiales.
  • Type - el tipo del bloque (seleccionado al crearlo). El tipo del bloque debe corresponder al tipo de objeto(s) ubicado(s) en el área delimitada por el bloque.
  • Comment - un comentario proporcionado por el usuario (opcional).
  • Has repeating instances - indica que el bloque constará de varias instancias. Seleccione esta propiedad si, por ejemplo, se van a usar todas las instancias de un grupo repetidoelement como región del bloque.
  • Instance sort order - establece el orden en que las instancias del grupo deben unirse en un bloque. Esta propiedad solo está disponible si está seleccionada la opción Has repeating instances. Valores posibles:
    • Top to bottom - las instancias se unen en un bloque según su ubicación en la imagen, de arriba abajo
    • Left to right - las instancias se unen en un bloque según su ubicación en la imagen, de izquierda a derecha
    • Right to left - las instancias se unen en un bloque según su ubicación en la imagen, de derecha a izquierda
    • In order of finding - las instancias se unen en un bloque en el orden en que se generan las hipótesis. Las hipótesis se generan en orden descendente de calidad. Si el usuario ha especificado condiciones adicionales para las instancias, las hipótesis se generan en el orden definido por el usuario. Por lo tanto, si necesita un orden distinto del orden estándar que usa el programa, puede especificar el orden deseado mediante condiciones adicionales.
Las siguientes propiedades especifican el área de la imagen de la que deben extraerse los datos.
  • For Layout selecciona la alternativa de layout en la que se especifica el área de búsqueda.
  • Source element - especifica un área en la imagen que es idéntica a la región del elemento que se usa para localizar el bloque en la imagen. Cuando el FlexiLayout se aplica a la imagen, el programa buscará el objeto (o los objetos) descrito por el elemento. Es a partir de estos objetos que se capturarán los datos. Para un grupo repetido, puede seleccionar una de las instancias o usar todas las instancias (AllInstances). Para más información, consulte Using instances of a grupo repetido as reference, excluded or source elements.
  • Expression - establece un área en la imagen que no coincide con ninguna de las regiones de los elementos. Por ejemplo, puede combinar en un solo bloque las regiones de varios elementos y el espacio entre ellas, ampliar la región de un elemento en un valor determinado o especificar las coordenadas del bloque sin basarse en ningún elemento. En este caso, la región del bloque puede describirse en FlexiLayout language.
La región de un bloque es continua. Esto significa que, si crea una región a partir de rectángulos separados entre sí, los espacios entre ellos se rellenarán con rectángulos adicionales finos para que la región sea continua.
Sin embargo, un bloque puede constar de varias regiones si se usan todas las instancias de un grupo repetido como elemento de referencia. La región de un bloque de grupo se calcula a partir de las regiones de los bloques secundarios, igual que la región de las hipótesis. La región resultante se amplía ligeramente para mejorar la visualización. Un grupo de marcas de verificación y un grupo común de bloques no tienen otros parámetros aparte del nombre y los comentarios. Los parámetros de un grupo repetido de bloques son los mismos que los de los bloques que no pertenecen a un grupo. La opción Has repeating instances siempre está habilitada para ellos. Los bloques secundarios pueden tener o no la opción Has repeating instances, pero siempre se crea para ellos una variable “Output instances”. Si un bloque dentro de un grupo repetido de bloques tiene la opción Has repeating instances, esto significa que puede repetirse dentro de cada instancia del bloque principal.

Especificar la región de un bloque mediante instancias de un grupo repetido

Si un bloque se define mediante varias instancias, la región del bloque constará de varias regiones independientes. Si usa una instancia concreta de un grupo repetido (p. ej., LastFound), la región del bloque se define igual que para cualquier otro elemento. Sin embargo, puede usar todas las instancias detectadas (AllInstances). Para usar varias instancias, seleccione la opción Has repeating instances. También puede escribir código para el bloque mediante la variable predefinida OutputInstances. Por ejemplo:
OutputInstances = SearchElements.PageHeader.AllInstances.UnionRect;
ABBYY FlexiCapture procesa los bloques con la opción Has repeating instances activada de la siguiente manera:
  • para los bloques que no son tablas, las instancias especificadas serán las del campo correspondiente
  • para un bloque de la tabla, las instancias especificadas se tratarán como una sola instancia del campo; es decir, ABBYY FlexiCapture procesará ese bloque como un campo de tipo Table con una región discontinua.

Reglas para crear referencias a elementos para grupos repetidos de bloques

Un grupo repetido de bloques hace referencia a un elemento repetido. Para crear instancias de un grupo repetido de bloques, necesita al menos varias instancias de elementos. Por lo tanto, uno de los Id debe ser AllInstances. Dado que los elementos situados debajo del elemento con AllInstances no pueden tener otros Id, esta condición también significa que el elemento repetido ubicado más abajo tiene AllInstances. Los bloques secundarios de un grupo repetido de bloques hacen referencia a elementos secundarios del grupo repetido de elementos al que hace referencia el bloque primario. La referencia debe tener el mismo Id para las instancias. Ejemplo: Si un bloque de grupo repetido tiene la siguiente referencia: SearchElements..RepGr1.Instance(1).RepGr2.AllInstances, sus bloques secundarios pueden hacer referencia al elemento RepGr1..RepGr2.Element solo de la siguiente manera: SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.Element. Si no hay un atributo HasRepeatingInstances, solo puede hacer referencia a subelementos del grupo básico que no tengan repeticiones dentro de él; a la inversa, si hay un atributo HasRepeatingInstances, puede hacer referencia a elementos que tengan repeticiones dentro del grupo básico (y solo puede hacer referencia a todas las instancias a la vez). Ejemplos: Hay un atributo HasRepeatingInstances SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.RepGr3.AllInstaces.Element SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.RepGr3.AllInstaces.RepGr4.AllInstances.Element No hay un atributo HasRepeatingInstances SearchElements.RepGr1.Instance(1).RepGr2.AllInstancess.Gr3.SubElement(where Gr3 is a simple group) SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.SubElement
Si las referencias se crean mediante Source element, la comprobación se realizará cuando se compile el FlexiLayout, y si las referencias se crean mediante código Advanced, se detectará un error al realizar el emparejamiento del FlexiLayout.

Uso de FlexiLayout language para describir la ubicación de un bloque

Para especificar la región de un bloque, use el campo Expression. Según el tipo de bloque y si la opción Has repeating instances está seleccionada, se usa una de las siguientes variables predefinidas: OutputRegion (de tipo Region), OutputTable (de tipo TableHypothesis) y OutputInstances (de tipo HypothesisInstances o de tipo TableHypothesisInstances). Para obtener más información sobre la variable predefinida que puede usarse en el campo Expression, consulte Variables predefinidas.
Obtener y expandir la región de un elemento en 3 mm de ancho y 5 mm de longitudOutputRegion = SomeElement.Rect; OutputRegion.Inflate( 3mm, 5mm );
Combinar los Rectangle de las regiones de dos elementos y obtener el Rectangle que circunscribe los Rectangle combinadosRect outputRect; outputRect = Element1.Rect Or Element2.Rect; OutputRegion = outputRect;
Combinar en una sola Region los Rectangle que circunscriben las regiones de dos elementosRectArray outputRects; outputRects = RectArray( Element1.Rect ); outputRects.Add: Element2.Rect; OutputRegion = Region( outputRects );
Combinar en una sola Region las regiones de los objetos correspondientes a dos elementos diferentesRectArray outputRects; outputRects = Element1.Rects; outputRects.Add( Element2.Rects ); OutputRegion = outputRects.Region;
Combinar las regiones de los objetos que pertenecen a la Region de Element1 y eliminar las regiones de los objetos que pertenecen a la Region de Element2OutputRegion = FormRegion( Element1.Rects, Element2.Rects );
Usar un elemento Table para especificar un bloque TableOutputTable = SearchElements.TableElement;
Usar instancias de hipótesis de un determinado elemento para especificar un bloque TableOutputInstances = SearchElements.RepeatingGroup.AllInstances.TemplateElement;
También puede usar una variable predefinida IsNull para describir la región de un bloque. Esta variable indica si la región del bloque se encontró durante el emparejamiento de FlexiLayout. El valor false significa que la región se encontró; el valor true significa que la región no se encontró. La variable IsNull se inicializa con el valor false, es decir, se considera que la región del bloque se encontró. Sin embargo, en algunos casos puede que desee comprobar ciertas condiciones antes de llegar a una conclusión.
  1. Para indicar al programa que considere que la región del bloque se encontró si el ancho de la región del elemento de origen supera los 50 dots, introduzca el siguiente código en el campo Region Expression: if Element1.Width < 50dt then IsNull = true;
  2. Para indicar al programa que considere que la región del bloque de Element1 se encontró, introduzca el siguiente código en el campo Region Expression: IsNull = Element1.IsNull
  3. Suponga que necesita usar Element1 y Element2 para buscar un bloque. Si al menos uno de los elementos no se ha encontrado, se considera que el bloque no se encontró. Rect outputRect; Let FieldLeft = Element1.Rect.Left; Let FieldRight = Element2.Rect.Right; Let FieldTop = Element1.Rect.Top; Let FieldBottom = Element2.Rect.Bottom; outputRect = Rect( FieldLeft, FieldTop, FieldRight, FieldBottom); if ((Element1.IsNull == True) or (Element2.IsNull == True) ) then {IsNull = true;} OutputRegion = outputRect;
Nota. Este código funcionará correctamente solo si el área de búsqueda de Element1 está encima de y a la izquierda del área de búsqueda de Element2. En el ejemplo anterior, no se incluye la comprobación de esta condición para simplificar. En código real, esta comprobación es necesaria y los valores de las variables FieldLeft, FieldRight, FieldTop y FieldBottom deben ajustarse. De lo contrario, la llamada a la función Rect devolverá un error.