Los ejemplos de C# son aplicables solo a FRE para Windows.
Detección de marcas de verificación en la imagen
Las marcas de verificación pueden detectarse en la imagen durante el análisis del layout. Para habilitar la detección de marcas de verificación, establezca la propiedad IPageAnalysisParams::DetectCheckmarks en TRUE. Una vez finalizado el análisis, el layout contendrá un objeto CheckmarkBlock por cada marca de verificación encontrada en la imagen. No se agruparán en CheckmarkGroup. El tipo de marca de verificación se detectará automáticamente. Después de llamar a un método que realiza el reconocimiento (por ejemplo, IFRDocument::Recognize), o si utiliza un único método para el procesamiento completo (por ejemplo, IFRDocument::Process), se completarán los resultados del reconocimiento de marcas de verificación.Código C#
Código C#
- Reconocimiento de un grupo de marcas de verificación
- Reconocimiento de una sola marca de verificación
- Aprender a reconocer marcas de verificación de tipo personalizado
Reconocimiento de un grupo de marcas de verificación
En un grupo de marcas de verificación, puede especificar un número mínimo y un número máximo de casillas marcadas en el grupo (MinimumCheckedInGroup y MaximumCheckedInGroup, respectivamente). Estos valores pueden configurarse mediante el objeto CheckmarkGroup y se utilizarán durante el reconocimiento. Todas las marcas de verificación de un mismo grupo deben tener los mismos valores en las propiedades IsCorrectionEnabled y CheckmarkType. El estado de la marca de verificación se calcula en función del porcentaje de píxeles negros de la región. Este porcentaje es el más bajo en una marca sin seleccionar, mayor en una marca seleccionada y el más alto en una marca corregida. Por lo tanto, para obtener un resultado de reconocimiento correcto, es fundamental:- establecer correctamente el tipo de marca de verificación, porque las marcas de tipo CMT_Circle y CMT_Square tienen un contorno negro que debe tenerse en cuenta al calcular el porcentaje;
- especificar la región exacta de la marca de verificación, porque el porcentaje de píxeles negros se calculará en toda la región y, si la región incluye áreas irrelevantes, la estimación puede empeorar.
- Cree un objeto FRDocument a partir de una imagen que contenga un grupo de marcas de verificación. Por ejemplo, puede usar el método CreateFRDocumentFromImage del objeto Engine.
- Obtenga la página con la imagen de las marcas de verificación de la colección de páginas del documento (IFRDocument::Pages); para ello, use las propiedades y los métodos de la colección FRPages.
- Obtenga el objeto Layout correspondiente a esta página mediante la propiedad IFRPage::Layout.
- Para cada grupo de marcas de verificación:
- Cree un objeto Region mediante el método IEngine::CreateRegion y agréguele rectángulos con el método IRegion::AddRect.
- Cree un objeto Block del tipo grupo de marcas de verificación y agréguelo a la colección de bloques del layout (ILayout::Blocks) mediante el método ILayoutBlocks::AddNew (use la constante BT_CheckmarkGroup y el objeto Region creado como parámetros de entrada. El método también requiere como tercer parámetro de entrada el índice del bloque en el layout).
- Obtenga el objeto CheckmarkGroup (use el método IBlock::GetAsCheckmarkGroup).
- Para cada marca de verificación del grupo:
- Cree el objeto Region con el método IEngine::CreateRegion y agréguele rectángulos con el método IRegion::AddRect.
- Cree un nuevo bloque de marca de verificación en el grupo con el método ICheckmarkGroup::AddNew (use el objeto Region creado como parámetro de entrada).
- Obtenga el objeto CheckmarkBlock (use el método IBlock::GetAsCheckmarkBlock) y establezca los parámetros necesarios (CheckmarkType, IsCorrectionEnabled).
- Establezca los parámetros necesarios del grupo de marcas de verificación (MinimumCheckedInGroup, MaximumCheckedInGroup).
- Para reconocer las marcas de verificación, use cualquiera de los métodos disponibles que permiten realizar el reconocimiento, como IFRPage::Recognize, IFRPage::RecognizeBlocks, IFRDocument::Recognize, IFRDocument::RecognizePages, etc.
Código C#
Código C#
Reconocer una sola marca de verificación
- Cree un objeto FRDocument a partir de una imagen con una marca de verificación. Por ejemplo, puede usar el método CreateFRDocumentFromImage del objeto Engine.
- Obtenga la página con la imagen de la marca de verificación de la colección de páginas del documento (IFRDocument::Pages); use las propiedades y los métodos de la colección FRPages.
- Obtenga el objeto Layout correspondiente a esta página mediante la propiedad IFRPage::Layout.
- Cree el objeto Region con el método IEngine::CreateRegion y añádale rectángulos con el método IRegion::AddRect.
- Cree un objeto Block de tipo marca de verificación y agréguelo a la colección de bloques del layout (ILayout::Blocks) con el método ILayoutBlocks::AddNew (use la constante BT_Checkmark y el objeto Region creado como parámetros de entrada).
- Obtenga el objeto CheckmarkBlock (use el método IBlock::GetAsCheckmarkBlock) y establezca los parámetros necesarios (CheckmarkType, IsCorrectionEnabled).
- Para reconocer la marca de verificación, use cualquiera de los métodos de reconocimiento disponibles, como IFRPage::Recognize, IFRPage::RecognizeBlocks, IFRDocument::Recognize, IFRDocument::RecognizePages, etc.
Código C#
Código C#
Aprender a reconocer marcas de verificación personalizadas
ABBYY FineReader Engine puede reconocer marcas de verificación de los tipos estándar: marcas de verificación dentro de cuadrados, marcas de verificación sobre un fondo vacío y marcas de verificación dentro de círculos (consulte las constantes de CheckmarkTypeEnum). Como puede ver en la descripción de las constantes de la enumeración CheckmarkTypeEnum, hay otro tipo de marca de verificación que se puede reconocer: CMT_Custom. Está destinado a marcas de verificación no estándar. Si las imágenes que va a reconocer contienen marcas de verificación no estándar, puede entrenar FineReader Engine para reconocer este tipo de marcas. Para reconocer marcas de verificación no estándar:- Busque una imagen con algunas marcas de verificación sin marcar del tipo que desea reconocer. Puede ser una imagen de un formulario vacío que contenga esas marcas.
- Cree un objeto FRDocument a partir de esta imagen. Por ejemplo, puede usar el método CreateFRDocumentFromImage del objeto Engine.
- Obtenga la página con la imagen de las marcas de verificación de la colección de páginas del documento (IFRDocument::Pages); use las propiedades y los métodos de la colección FRPages.
- Obtenga el objeto Layout correspondiente a esta página mediante la propiedad IFRPage::Layout.
- Especifique la región y el tipo de cada bloque de marca de verificación de la página:
- Cree el objeto Region mediante el método IEngine::CreateRegion y agréguele los rectángulos de una región de marca de verificación con el método IRegion::AddRect.
- Cree un objeto Block de tipo marca de verificación y agréguelo a la colección de bloques del layout (ILayout::Blocks) mediante el método ILayoutBlocks::AddNew (use la constante BT_Checkmark y el objeto Region creado como parámetros de entrada).
- Obtenga el objeto CheckmarkBlock (use el método IBlock::GetAsCheckmarkBlock) y establezca su propiedad CheckmarkType en CMT_Custom.
- Entrene FineReader Engine para que reconozca este tipo de marcas de verificación: llame al método LearnCheckmarks del objeto FRPage.
- Como resultado, la propiedad TrainingData del objeto CheckmarkBlock que creó antes del entrenamiento contendrá información sobre el tipo personalizado de marca de verificación. Esta información podrá utilizarse para reconocer otras marcas de verificación del mismo tipo. Puede guardarla en un archivo o en memoria mediante el método SaveToMemory (solo Windows) o el método SaveToFile del objeto CheckmarkTrainingData.
- Cree objetos FRDocument a partir de las imágenes que contengan marcas de verificación de este tipo, especifique bloques de marcas de verificación en las páginas y establezca el tipo de marca de verificación en CMT_Custom. El procedimiento se describe en los pasos 2 a 5.
- Inicialice la propiedad TrainingData de cada objeto CheckmarkBlock con el objeto CheckmarkTrainingData obtenido durante el entrenamiento. Por ejemplo, puede copiar el objeto mediante el método CopyFrom o cargarlo desde un archivo o desde la memoria mediante el método LoadFromMemory (solo Windows) o el método LoadFromFile del objeto CheckmarkTrainingData.
- Llame a cualquiera de los métodos de reconocimiento del objeto FRDocument o FRPage; por ejemplo, al método IFRDocument::Recognize.
- Las propiedades BlackThreshold y SuspiciousDistance del objeto CheckmarkBlock le permiten ajustar aún más la configuración si no está satisfecho con los resultados del reconocimiento. Después del entrenamiento, los valores predeterminados de estas propiedades se sustituyen por valores que deberían funcionar en la mayoría de los casos. Cuando carga el objeto CheckmarkTrainingData para un bloque de marcas de verificación, también se cargan los valores de estas propiedades. Puede probar a cambiar los valores de estas propiedades y volver a reconocer las marcas de verificación (repitiendo el paso 10) y, cuando haya encontrado la mejor configuración, volver a guardar el objeto CheckmarkTrainingData y usar el nuevo objeto para reconocer las marcas de verificación de su tipo personalizado.
