Saltar al contenido principal
Una hipótesis para un elemento puede encontrarse o no. Por lo general, una hipótesis encontrada se formula sobre la base de uno o varios objetos de imagen o sus fragmentos (una excepción es el elemento espacio en blanco, que puede no contener ningún objeto de imagen en absoluto).

Regiones y límites de las hipótesis

Una hipótesis encontrada para un elemento simple siempre es una región continua. Las hipótesis para los elementos espacio en blanco, separador y código de barras siempre son rectángulos únicos. Si una hipótesis se formula sobre la base de un conjunto de objetos de imagen detectados, por ejemplo, una hipótesis para un elemento párrafo, la región de la hipótesis se construye a partir del array de rectángulos de los objetos detectados. La región creada de esta manera puede obtenerse mediante el método Region de la hipótesis. Al mostrar la región de la hipótesis en la imagen o al crear un bloque sobre la base de la hipótesis, los límites de la región no siguen exactamente los límites de cada rectángulo. En su lugar, los límites del área de búsqueda se suavizan para mejorar la visualización. Una región creada de esta manera puede obtenerse mediante el método SimplifiedRegion de la hipótesis. Los métodos Region y SimplifiedRegion pueden utilizarse tanto en el campo Relaciones avanzadas de prebúsqueda de la pestaña Avanzado (al describir el área de búsqueda del elemento) como en el campo Expresión de región al describir las propiedades del bloque y usar los elementos ya encontrados. Si no se encontró una hipótesis, esta coincide con el rectángulo difuso de su área de búsqueda. Al mostrar una hipótesis no encontrada en la imagen, FlexiLayout Studio dibuja el rectángulo externo del rectángulo difuso. Los límites Left, top, Right y Bottom de cualquier hipótesis son rangos. Para cada hipótesis encontrada, el rango degenera en un punto, es decir, Left.Start = Left.End, top.Start = top.End, etc. Para una hipótesis no encontrada, los rangos de los límites coinciden con los rangos de su área de búsqueda.

Acceso a las hipótesis en el código de FlexiLayout

El acceso a las hipótesis generadas y a sus propiedades en el código de los cuadros de diálogo correspondientes de bloques y elementos proporciona herramientas adicionales para configurar FlexiLayout. Se puede acceder a las hipótesis de los elementos por los nombres de los elementos. Para acceder a una hipótesis del elemento actual en el campo Relaciones avanzadas de posbúsqueda, solo puede usar el nombre de la propiedad. Se accede a las hipótesis y sus propiedades en modo de solo lectura. Se puede acceder a las hipótesis de los elementos en los campos Relaciones avanzadas de prebúsqueda y Relaciones avanzadas de posbúsqueda de la pestaña Avanzado del cuadro de diálogo Propiedades del elemento, así como en el campo Expresión de región del cuadro de diálogo Propiedades del bloque. En Relaciones avanzadas de prebúsqueda, puede acceder a las hipótesis generadas (y a sus propiedades) de todos los elementos ubicados por encima del elemento actual en el árbol de FlexiLayout. En Relaciones avanzadas de posbúsqueda, puede acceder a las hipótesis generadas de los elementos ubicados por encima del elemento actual en el árbol de FlexiLayout y a la hipótesis del propio elemento actual. En Expresión de región, puede acceder a las hipótesis (y a sus propiedades) de todos los elementos.

Propiedades de las hipótesis para todos los tipos de elemento

La siguiente tabla enumera las propiedades de las hipótesis para todos los tipos de elemento.

Ejemplo: comprobar si hay una hipótesis nula antes de acceder a las propiedades

Antes de acceder a las propiedades de una hipótesis para un elemento simple o de grupo, asegúrese de que la hipótesis a la que va a acceder no sea una hipótesis nula (llame a su propiedad IsNull). Acceder a una propiedad de una hipótesis nula (que corresponde a un elemento no detectado) provoca un error. Considere un ejemplo que utiliza el proyecto de Sample 1, que puede encontrarse en el CD-ROM del programa. Suponga que hay un identificador en su documento en forma de código de barras y que quiere que su FlexiLayout haga coincidir solo aquellos documentos en los que el valor del código de barras sea 1556897142240. En la sección Relaciones avanzadas de posbúsqueda del elemento que describe las propiedades y las restricciones de búsqueda del código de barras (elemento IdentityNumber en Sample 1), escriba el siguiente código:
Haga clic en Apply o Check. El compilador no detecta ningún error de sintaxis. Parece que el código es correcto. Sin embargo, si intenta hacer coincidir el FlexiLayout con cualquier página de Sample 1, aparece el siguiente mensaje de error: Error in element “MainGroup.IdentityNumber”, Advanced relations section: Attempt to access undefined hypothesis MainGroup.IdentityNumber. La causa del error es la siguiente. FlexiLayout Studio encuentra una hipótesis para el elemento código de barras. Luego compara el valor del código de barras con el valor especificado en el código. Si los valores son distintos, el código Quality: 0; restablece el valor de la hipótesis a 0. A continuación, se genera una hipótesis nula para este elemento, para la que FlexiLayout Studio también comprueba la condición value != "1556897142240". Como no se permite acceder al valor de una hipótesis nula (no tiene esta propiedad), FlexiLayout Studio muestra un mensaje de error “…undefined hypothesis…”. Por lo tanto, ajuste el código de la siguiente manera:
El código anterior funciona solo para un elemento obligatorio. Para un elemento opcional, ajuste el código de la siguiente manera:
De lo contrario, solo la calidad de la hipótesis real se restablece a 0. Esto hace que FlexiLayout Studio genere una hipótesis nula, para la que no se ejecuta la condición if not IsNull. Por lo tanto, la calidad de la hipótesis final (nula) permanece igual que la especificada en las propiedades del elemento (0.97 si se mantuvo el valor predeterminado) y FlexiLayout Studio sigue emparejando el FlexiLayout, incluso sin el elemento indicado. Si agrega else {Quality: 0;} al código, la sentencia se ejecuta para todas las hipótesis (incluida la hipótesis nula) y el emparejamiento del FlexiLayout se detiene, porque en este elemento la cadena completa de hipótesis también se restablece a 0.

Comparación de los métodos Region() y SimplifiedRegion()

Los métodos Region Region() y Region SimplifiedRegion() devuelven la región de un elemento, pero el método Region Region() devuelve la región exacta:
Captura de pantalla de la región exacta de la hipótesis devuelta por el método Region() en ABBYY FlexiLayout Studio, que sigue los límites de los objetos detectados.
El método Region SimplifiedRegion() devuelve el rectángulo creado a partir de las coordenadas de los límites:
Captura de pantalla de la región rectangular simplificada de la hipótesis devuelta por el método SimplifiedRegion() en ABBYY FlexiLayout Studio, basada en las coordenadas de los límites.