Os exemplos em C# se aplicam somente ao FRE for Windows.
Detectando marcas de seleção na imagem
Código C#
Código C#
- Reconhecendo um grupo de marcas de seleção
- Reconhecendo uma única marca de seleção
- Aprendendo a reconhecer marcas de seleção de tipo personalizado
Reconhecimento de um grupo de marcas de seleção
- definir corretamente o tipo de marca de seleção, porque as marcas de seleção do tipo CMT_Circle e CMT_Square têm uma borda preta, que precisa ser levada em conta ao calcular a porcentagem;
- especificar a região exata da marca de seleção, porque a porcentagem de pixels pretos será calculada em toda a região e, se áreas irrelevantes forem incluídas nela, a estimativa poderá ser prejudicada.
- Crie um objeto FRDocument a partir de uma imagem com um grupo de marcas de seleção. Por exemplo, você pode usar o método CreateFRDocumentFromImage do objeto Engine.
- Obtenha a página com a imagem das marcas de seleção da coleção de páginas do documento (IFRDocument::Pages) — use as propriedades e os métodos da coleção FRPages.
- Obtenha o objeto Layout, que corresponde a essa página, por meio da propriedade IFRPage::Layout.
- Para cada grupo de marcas de seleção:
- Crie um objeto Region usando o método IEngine::CreateRegion e adicione retângulos a ele usando o método IRegion::AddRect.
- Crie um objeto Block do tipo grupo de marcas de seleção e adicione-o à coleção de blocos do layout (ILayout::Blocks) usando o método ILayoutBlocks::AddNew (use a constante BT_CheckmarkGroup e o objeto Region criado como parâmetros de entrada. O método também exige o índice do bloco no layout como terceiro parâmetro de entrada).
- Obtenha o objeto CheckmarkGroup (use o método IBlock::GetAsCheckmarkGroup).
- Para cada marca de seleção no grupo:
- Crie o objeto Region usando o método IEngine::CreateRegion e adicione retângulos a ele com o método IRegion::AddRect.
- Crie um novo bloco de caixa de seleção no grupo usando o método ICheckmarkGroup::AddNew (use o objeto Region criado como parâmetro de entrada).
- Obtenha o objeto CheckmarkBlock (use o método IBlock::GetAsCheckmarkBlock) e defina os parâmetros necessários (CheckmarkType, IsCorrectionEnabled).
- Defina os parâmetros necessários do grupo de marcas de seleção (MinimumCheckedInGroup, MaximumCheckedInGroup).
- Para reconhecer as marcas de seleção, use qualquer um dos métodos de reconhecimento disponíveis, como IFRPage::Recognize, IFRPage::RecognizeBlocks, IFRDocument::Recognize, IFRDocument::RecognizePages, etc.
Código C#
Código C#
Reconhecendo uma única marca de seleção
- Crie um objeto FRDocument a partir de uma imagem com uma marca de seleção. Por exemplo, você pode usar o método CreateFRDocumentFromImage do objeto Engine.
- Obtenha a página com a imagem das marcas de seleção na coleção de páginas do documento (IFRDocument::Pages) — use as propriedades e os métodos da coleção FRPages.
- Obtenha o objeto Layout correspondente a essa página por meio da propriedade IFRPage::Layout.
- Crie o objeto Region usando o método IEngine::CreateRegion e adicione retângulos a ele usando o método IRegion::AddRect.
- Crie um objeto Block do tipo marca de seleção e adicione-o à coleção de blocos do layout (ILayout::Blocks) usando o método ILayoutBlocks::AddNew (use a constante BT_Checkmark e o objeto Region criado como parâmetros de entrada).
- Obtenha o objeto CheckmarkBlock (use o método IBlock::GetAsCheckmarkBlock) e defina os parâmetros necessários (CheckmarkType, IsCorrectionEnabled).
- Para reconhecer a marca de seleção, use qualquer um dos métodos de reconhecimento disponíveis, como IFRPage::Recognize, IFRPage::RecognizeBlocks, IFRDocument::Recognize, IFRDocument::RecognizePages, etc.
Código C#
Código C#
Como reconhecer marcas de seleção de tipo personalizado
- Encontre uma imagem com algumas marcas de seleção não marcadas do tipo que você deseja reconhecer. Pode ser a imagem de um formulário em branco que contenha essas marcas de seleção.
- Crie um objeto FRDocument a partir dessa imagem. Por exemplo, você pode usar o método CreateFRDocumentFromImage do objeto Engine.
- Obtenha a página com a imagem das marcas de seleção na coleção de páginas do documento (IFRDocument::Pages) — use as propriedades e os métodos da coleção FRPages.
- Obtenha o objeto Layout correspondente a essa página por meio da propriedade IFRPage::Layout.
- Especifique a região e o tipo de cada bloco de caixa de seleção na página:
- Crie o objeto Region usando o método IEngine::CreateRegion e adicione a ele os retângulos da região da marca de seleção usando o método IRegion::AddRect.
- Crie um objeto Block do tipo marca de seleção e adicione-o à coleção de blocos do layout (ILayout::Blocks) usando o método ILayoutBlocks::AddNew (use a constante BT_Checkmark e o objeto Region criado como parâmetros de entrada).
- Obtenha o objeto CheckmarkBlock (use o método IBlock::GetAsCheckmarkBlock) e defina sua propriedade CheckmarkType como CMT_Custom.
- Treine o FineReader Engine para reconhecer esse tipo de marca de seleção: chame o método LearnCheckmarks do objeto FRPage.
- Como resultado, a propriedade TrainingData do objeto CheckmarkBlock que você criou antes do treinamento conterá informações sobre o tipo personalizado de marca de seleção. Agora, essas informações podem ser usadas para reconhecer outras marcas de seleção do mesmo tipo. Você pode salvá-las em um arquivo ou na memória usando o método SaveToMemory (somente Windows) ou o método SaveToFile do objeto CheckmarkTrainingData.
- Crie objetos FRDocument a partir das imagens que contêm marcas de seleção desse tipo, especifique blocos de marcas de seleção nas páginas e defina o tipo de marca de seleção como CMT_Custom. O procedimento é descrito nas etapas 2 a 5.
- Inicialize a propriedade TrainingData de cada objeto CheckmarkBlock com o objeto CheckmarkTrainingData obtido durante o treinamento. Por exemplo, você pode copiar o objeto usando o método CopyFrom ou carregá-lo de um arquivo ou da memória usando o método LoadFromMemory (somente Windows) ou o método LoadFromFile do objeto CheckmarkTrainingData.
- Chame qualquer um dos métodos de reconhecimento do objeto FRDocument ou FRPage, por exemplo, o método IFRDocument::Recognize.
- As propriedades BlackThreshold e SuspiciousDistance do objeto CheckmarkBlock permitem ajustar ainda mais as configurações se você não estiver satisfeito com os resultados do reconhecimento. Após o treinamento, os valores padrão dessas propriedades são substituídos por valores que devem funcionar na maioria dos casos. Quando você carrega o objeto CheckmarkTrainingData para um bloco de marca de seleção, os valores dessas propriedades também são carregados. Você pode testar diferentes valores para essas propriedades e reconhecer novamente as marcas de seleção (repetindo a etapa 10) e, quando encontrar a melhor configuração, salvar o objeto CheckmarkTrainingData novamente e usar o novo objeto para reconhecer as marcas de seleção do seu tipo personalizado.
