> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Reconnaître les coches

> Reconnaissez des coches individuelles et des groupes de coches avec ABBYY FineReader Engine à l’aide des types de blocs BT_Checkmark / BT_CheckmarkGroup et du module de licence OMR.

<Note>
  Les exemples C# s'appliquent uniquement à FRE for Windows.
</Note>

ABBYY FineReader Engine 12 prend en charge deux types de blocs pour les coches : coche et groupe de coches. Un bloc de groupe de coches est un ensemble de blocs de type coche. Ces types de blocs ont les constantes correspondantes BT\_Checkmark et BT\_CheckmarkGroup dans l'énumération [BlockTypeEnum](/fr/fine-reader/engine/api-reference/enumerations/blocktypeenum). Les objets [CheckmarkBlock](/fr/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock) et [CheckmarkGroup](/fr/fine-reader/engine/api-reference/layout-related-objects/checkmarkgroup) permettent d'accéder aux blocs de ces types. Pour obtenir ces objets, vous devez utiliser les méthodes correspondantes de l'objet [Block](/fr/fine-reader/engine/api-reference/layout-related-objects/block).

<Warning>
  Pour reconnaître les coches, vous devez disposer d'une licence ABBYY FineReader Engine prenant en charge le module [OMR](/fr/fine-reader/engine/licensing/modules#omr).
</Warning>

Vous pouvez reconnaître des coches individuelles ainsi que des groupes de coches.

Une case à cocher correspond à un objet CheckmarkBlock. Les états possibles d'une case à cocher sont les suivants : cochée, non cochée, corrigée. Ils correspondent à [CheckmarkCheckStateEnum](/fr/fine-reader/engine/api-reference/enumerations/checkmarkcheckstateenum). Une coche corrigée est une coche placée dans la case à cocher, puis barrée par l'utilisateur.

<div id="detecting-checkmarks-on-the-image">
  ## Détection des coches sur l’image
</div>

Les coches peuvent être détectées sur l’image lors de l’analyse de la mise en page. Pour activer la détection des coches, définissez la propriété [IPageAnalysisParams::DetectCheckmarks](/fr/fine-reader/engine/api-reference/parameter-objects/preprocessing-analysis-recognition-and-synthesis-parameters/pageanalysisparams#detectcheckmarks) sur TRUE.

Une fois l’analyse terminée, la mise en page contiendra un objet [CheckmarkBlock](/fr/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock) pour chaque coche détectée sur l’image. Elles ne seront pas regroupées dans des [CheckmarkGroup](/fr/fine-reader/engine/api-reference/layout-related-objects/checkmarkgroup). Le type de coche sera détecté automatiquement.

Après avoir appelé une méthode qui effectue la reconnaissance (par exemple, [IFRDocument::Recognize](/fr/fine-reader/engine/api-reference/document-related-objects/frdocument/recognize-method)), ou si vous utilisez une méthode unique pour un traitement complet (par exemple, [IFRDocument::Process](/fr/fine-reader/engine/api-reference/document-related-objects/frdocument/process-method)), les résultats de reconnaissance des coches seront disponibles.

<Accordion title="Code C#">
  ```csharp theme={null}
  FREngine.IEngine engine;
  FREngine.IFRDocument frdoc;
  // Nous supposons que le document a été créé et que des images y ont été ajoutées
  // Créez DocumentProcessingParams et définissez les paramètres
  FREngine.IDocumentProcessingParams dpp = engine.CreateDocumentProcessingParams();
  FREngine.IPageProcessingParams ppp = dpp.PageProcessingParams;
  ppp.PageAnalysisParams.DetectCheckmarks = true;
  // Utilisez les paramètres pour le traitement
  frDoc.Process( dpp );
  ```
</Accordion>

Si les résultats de la détection automatique des coches ne vous satisfont pas, ou si vous devez reconnaître des groupes de coches ou des coches personnalisées, indiquez manuellement les zones contenant les coches. Les sections suivantes décrivent différents scénarios :

* [Reconnaissance d’un groupe de coches](/fr/fine-reader/engine/guided-tour/advanced-techniques/recognizing-checkmarks#group)
* [Reconnaissance d’une seule coche](/fr/fine-reader/engine/guided-tour/advanced-techniques/recognizing-checkmarks#single)
* [Apprentissage de la reconnaissance de coches d’un type personnalisé](/fr/fine-reader/engine/guided-tour/advanced-techniques/recognizing-checkmarks#custom)

<div id="recognizing-a-group-of-checkmarks">
  ## Reconnaissance d’un groupe de coches
</div>

Pour un groupe de coches, vous pouvez spécifier le nombre minimal et maximal de coches cochées dans le groupe ([MinimumCheckedInGroup](/fr/fine-reader/engine/api-reference/layout-related-objects/checkmarkgroup#minimumcheckedingroup) et [MaximumCheckedInGroup](/fr/fine-reader/engine/api-reference/layout-related-objects/checkmarkgroup#maximumcheckedingroup), respectivement). Ces valeurs peuvent être définies via l’objet CheckmarkGroup et seront utilisées lors de la reconnaissance.

Toutes les coches d’un même groupe doivent avoir les mêmes valeurs pour les propriétés [IsCorrectionEnabled](/fr/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock#iscorrectionenabled) et [CheckmarkType](/fr/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock#checkmarktype).

L’état de la coche est calculé en fonction du pourcentage de pixels noirs dans la région. Il est le plus faible pour une coche non cochée, plus élevé pour une coche cochée et le plus élevé pour une coche corrigée. Par conséquent, pour obtenir un résultat de reconnaissance correct, il est essentiel de :

* définir correctement le type de coche, car les coches de type CMT\_Circle et CMT\_Square ont un contour noir, dont il faut tenir compte lors du calcul du pourcentage ;
* spécifier avec précision la région de la coche, car le pourcentage de noir est calculé sur l’ensemble de la région, et si celle-ci inclut des zones non pertinentes, l’estimation peut être moins fiable.

Pour reconnaître un groupe de coches :

1. Créez un objet [FRDocument](/fr/fine-reader/engine/api-reference/document-related-objects/frdocument) à partir d’une image contenant un groupe de coches. Par exemple, vous pouvez utiliser la méthode [CreateFRDocumentFromImage](/fr/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createfrdocumentfromimage-method) de l’objet [Engine](/fr/fine-reader/engine/api-reference/engine-object-iengine-interface).

2. Récupérez la page contenant l’image des coches dans la collection de pages du document ([IFRDocument::Pages](/fr/fine-reader/engine/api-reference/document-related-objects/frdocument#pages)) — utilisez les propriétés et les méthodes de la collection [FRPages](/fr/fine-reader/engine/api-reference/document-related-objects/frpages).

3. Récupérez l’objet [Layout](/fr/fine-reader/engine/api-reference/layout-related-objects/layout) correspondant à cette page via la propriété [IFRPage::Layout](/fr/fine-reader/engine/api-reference/document-related-objects/frpage#layout).

4. Pour chaque groupe de coches :

5. Créez un objet [Region](/fr/fine-reader/engine/api-reference/supplementary-objects-and-methods/region) à l’aide de la méthode [IEngine::CreateRegion](/fr/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createlessobjectgreater-methods), puis ajoutez-y des rectangles à l’aide de la méthode [IRegion::AddRect](/fr/fine-reader/engine/api-reference/supplementary-objects-and-methods/region/addrect-method).

6. Créez un objet [Block](/fr/fine-reader/engine/api-reference/layout-related-objects/block) de type groupe de coches et ajoutez-le à la collection des blocs de mise en page (ILayout::Blocks) à l’aide de la méthode [ILayoutBlocks::AddNew](/fr/fine-reader/engine/api-reference/layout-related-objects/layoutblocks/addnew-method) (utilisez la constante BT\_CheckmarkGroup et l’objet Region créé comme paramètres d’entrée. La méthode exige également l’index du bloc dans la mise en page comme troisième paramètre d’entrée).

7. Récupérez l’objet CheckmarkGroup (utilisez la méthode [IBlock::GetAsCheckmarkGroup](/fr/fine-reader/engine/api-reference/layout-related-objects/block/getascheckmarkgroup-method)).

<Warning>
  Il est essentiel de définir correctement le type et la région de la coche pour obtenir un résultat de reconnaissance correct.
</Warning>

5. Pour chaque coche du groupe :

6. Créez l’objet Region à l’aide de la méthode IEngine::CreateRegion et ajoutez-y des rectangles à l’aide de la méthode IRegion::AddRect.

7. Créez un nouveau bloc de coche dans le groupe à l’aide de la méthode [ICheckmarkGroup::AddNew](/fr/fine-reader/engine/api-reference/layout-related-objects/checkmarkgroup/addnew-method) (utilisez l’objet Region créé comme paramètre d’entrée).

8. Récupérez l’objet CheckmarkBlock (à l’aide de la méthode [IBlock::GetAsCheckmarkBlock](/fr/fine-reader/engine/api-reference/layout-related-objects/block/getascheckmarkblock-method)) et définissez les paramètres requis (CheckmarkType, IsCorrectionEnabled).

9. Définissez les paramètres nécessaires du groupe de coches (MinimumCheckedInGroup, MaximumCheckedInGroup).

10. Pour reconnaître les coches, utilisez l’une des méthodes de reconnaissance disponibles, par exemple [IFRPage::Recognize](/fr/fine-reader/engine/api-reference/document-related-objects/frpage/recognize-method), [IFRPage::RecognizeBlocks](/fr/fine-reader/engine/api-reference/document-related-objects/frpage/recognizeblocks-method), [IFRDocument::Recognize](/fr/fine-reader/engine/api-reference/document-related-objects/frdocument/recognize-method), [IFRDocument::RecognizePages](/fr/fine-reader/engine/api-reference/document-related-objects/frdocument/recognizepages-method), etc.

<Accordion title="Code C#">
  ```csharp theme={null}
  ...
  // Récupérer un objet Layout
  FREngine.IFRDocument document = Engine.CreateFRDocumentFromImage("D:\\Sample.tiff", null);
  FREngine.ILayout layout = document.Pages[0].Layout;
  // Définir la région du bloc
  FREngine.IRegion region = Engine.CreateRegion();
  region.AddRect(0, 0, 100, 50);
  // Créer un bloc de type groupe de coches et l’ajouter à la fin de la collection de mise en page
  FREngine.IBlock block = layout.Blocks.AddNew(FREngine.BlockTypeEnum.BT_CheckmarkGroup, region, layout.Blocks.Count);
  FREngine.ICheckmarkGroup checkmarkGroup = block.GetAsCheckmarkGroup();
  // Créer des blocs de type coche
  // et les ajouter au groupe de coches
  for (int i = 0; i < 5; i++)
  {
    FREngine.IRegion checkmarkRegion = Engine.CreateRegion();
    checkmarkRegion.AddRect(10, 10 + i * 20, 90, 10 + (i + 1) * 20);
    FREngine.ICheckmarkBlock checkmark = checkmarkGroup.AddNew(0, checkmarkRegion);
  }
  ...
  ```
</Accordion>

<div id="recognizing-a-single-checkmark">
  ## Reconnaissance d'une seule coche
</div>

1. Créez un objet [FRDocument](/fr/fine-reader/engine/api-reference/document-related-objects/frdocument) à partir d'une image contenant une coche. Par exemple, vous pouvez utiliser la méthode [CreateFRDocumentFromImage](/fr/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createfrdocumentfromimage-method) de l'objet [Engine](/fr/fine-reader/engine/api-reference/engine-object-iengine-interface).
2. Récupérez la page contenant l'image des coches dans la collection de pages du document ([IFRDocument::Pages](/fr/fine-reader/engine/api-reference/document-related-objects/frdocument#pages)) — utilisez les propriétés et méthodes de la collection [FRPages](/fr/fine-reader/engine/api-reference/document-related-objects/frpages).
3. Récupérez l'objet [Layout](/fr/fine-reader/engine/api-reference/layout-related-objects/layout) correspondant à cette page via la propriété [IFRPage::Layout](/fr/fine-reader/engine/api-reference/document-related-objects/frpage#layout).
4. Créez l'objet [Region](/fr/fine-reader/engine/api-reference/supplementary-objects-and-methods/region) à l'aide de la méthode [IEngine::CreateRegion](/fr/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createlessobjectgreater-methods), puis ajoutez-y des rectangles à l'aide de la méthode [IRegion::AddRect](/fr/fine-reader/engine/api-reference/supplementary-objects-and-methods/region/addrect-method).
5. Créez un objet [Block](/fr/fine-reader/engine/api-reference/layout-related-objects/block) de type coche et ajoutez-le à la collection de blocs de mise en page (ILayout::Blocks) à l'aide de la méthode [ILayoutBlocks::AddNew](/fr/fine-reader/engine/api-reference/layout-related-objects/layoutblocks/addnew-method) (utilisez la constante BT\_Checkmark et l'objet Region créé comme paramètres d'entrée).
6. Récupérez l'objet CheckmarkBlock (à l'aide de la méthode [IBlock::GetAsCheckmarkBlock](/fr/fine-reader/engine/api-reference/layout-related-objects/block/getascheckmarkblock-method)) et définissez les paramètres requis (CheckmarkType, IsCorrectionEnabled).

<Warning>
  Il est essentiel de définir correctement le type et la région de la coche afin d'obtenir un résultat de reconnaissance correct.
</Warning>

7. Pour reconnaître la coche, utilisez l'une des méthodes de reconnaissance disponibles, telles que [IFRPage::Recognize](/fr/fine-reader/engine/api-reference/document-related-objects/frpage/recognize-method), [IFRPage::RecognizeBlocks](/fr/fine-reader/engine/api-reference/document-related-objects/frpage/recognizeblocks-method), [IFRDocument::Recognize](/fr/fine-reader/engine/api-reference/document-related-objects/frdocument/recognize-method), [IFRDocument::RecognizePages](/fr/fine-reader/engine/api-reference/document-related-objects/frdocument/recognizepages-method), etc.

<Accordion title="Code C#">
  ```csharp theme={null}
  ...
  // Récupérer un objet Layout
  FREngine.IFRDocument document = Engine.CreateFRDocumentFromImage("D:\\Sample.tiff", null);
  FREngine.ILayout layout = document.Pages[0].Layout;
  // Définir la région du bloc
  FREngine.IRegion region = Engine.CreateRegion();
  region.AddRect(0, 0, 100, 50);
  // Créer un bloc de type case cochée et l'ajouter à la fin de la collection de mise en page
  FREngine.IBlock block = layout.Blocks.AddNew(FREngine.BlockTypeEnum.BT_Checkmark, region, layout.Blocks.Count);
  FREngine.ICheckmarkBlock checkmark = block.GetAsCheckmarkBlock();
  ...
  ```
</Accordion>

<div id="learning-to-recognize-checkmarks-of-custom-type">
  ## Apprendre à reconnaître des coches de type personnalisé
</div>

ABBYY FineReader Engine peut reconnaître des coches de forme standard : des coches dans des carrés, des coches sur un fond vide et des coches dans des cercles (voir les constantes de [CheckmarkTypeEnum](/fr/fine-reader/engine/api-reference/enumerations/checkmarktypeenum)). Comme vous pouvez le voir dans la description des constantes de l’énumération CheckmarkTypeEnum, il existe un autre type de coche pouvant être reconnu : CMT\_Custom. Il est destiné aux coches de type non standard. Si les images que vous souhaitez reconnaître contiennent des coches de type non standard, vous pouvez entraîner FineReader Engine à reconnaître ce type de coches.

Pour reconnaître des coches de type non standard :

1. Recherchez une image contenant des coches non marquées du type que vous souhaitez reconnaître. Il peut s’agir de l’image d’un formulaire vierge contenant ces coches.

2. Créez un objet [FRDocument](/fr/fine-reader/engine/api-reference/document-related-objects/frdocument) à partir de cette image. Par exemple, vous pouvez utiliser la méthode [CreateFRDocumentFromImage](/fr/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createfrdocumentfromimage-method) de l’objet [Engine](/fr/fine-reader/engine/api-reference/engine-object-iengine-interface).

3. Récupérez la page contenant l’image des coches à partir de la collection de pages du document ([IFRDocument::Pages](/fr/fine-reader/engine/api-reference/document-related-objects/frdocument#pages)) à l’aide des propriétés et méthodes de la collection [FRPages](/fr/fine-reader/engine/api-reference/document-related-objects/frpages).

4. Récupérez l’objet [Layout](/fr/fine-reader/engine/api-reference/layout-related-objects/layout) correspondant à cette page via la propriété [IFRPage::Layout](/fr/fine-reader/engine/api-reference/document-related-objects/frpage#layout).

5. Spécifiez la région et le type de chaque bloc de coche sur la page :

6. Créez l’objet [Region](/fr/fine-reader/engine/api-reference/supplementary-objects-and-methods/region) à l’aide de la méthode [IEngine::CreateRegion](/fr/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createlessobjectgreater-methods), puis ajoutez-y les rectangles correspondant à la région de la coche à l’aide de la méthode [IRegion::AddRect](/fr/fine-reader/engine/api-reference/supplementary-objects-and-methods/region/addrect-method).

7. Créez un objet [Block](/fr/fine-reader/engine/api-reference/layout-related-objects/block) de type coche et ajoutez-le à la collection de blocs de mise en page (ILayout::Blocks) à l’aide de la méthode [ILayoutBlocks::AddNew](/fr/fine-reader/engine/api-reference/layout-related-objects/layoutblocks/addnew-method) (utilisez la constante BT\_Checkmark et l’objet Region créé comme paramètres d’entrée).

8. Récupérez l’objet CheckmarkBlock (à l’aide de la méthode [IBlock::GetAsCheckmarkBlock](/fr/fine-reader/engine/api-reference/layout-related-objects/block/getascheckmarkblock-method)) et définissez sa propriété [CheckmarkType](/fr/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock#checkmarktype) sur CMT\_Custom.

<Warning>
  Il est essentiel de définir correctement le type et la région de la coche pour obtenir un résultat de reconnaissance correct.
</Warning>

6. Entraînez FineReader Engine à reconnaître ce type de coches : appelez la méthode [LearnCheckmarks](/fr/fine-reader/engine/api-reference/document-related-objects/frpage/learncheckmarks-method) de l’objet FRPage.
7. Ainsi, la propriété [TrainingData](/fr/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock#trainingdata) de l’objet CheckmarkBlock que vous avez créé avant l’entraînement contiendra des informations sur le type de coche personnalisé. Ces informations pourront alors être utilisées pour reconnaître d’autres coches du même type. Vous pouvez les enregistrer dans un fichier ou en mémoire à l’aide de la méthode [SaveToMemory](/fr/fine-reader/engine/api-reference/supplementary-objects-and-methods/savetomemory-method) (Windows uniquement) ou de la méthode [SaveToFile](/fr/fine-reader/engine/api-reference/supplementary-objects-and-methods/savetofile-method) de l’objet [CheckmarkTrainingData](/fr/fine-reader/engine/api-reference/layout-related-objects/checkmarktrainingdata).
8. Créez des objets FRDocument à partir des images contenant des coches de ce type, spécifiez des blocs de coches sur les pages et définissez le type de coche sur CMT\_Custom. La procédure est décrite aux étapes 2 à 5.
9. Initialisez la propriété TrainingData de chaque objet CheckmarkBlock avec l’objet CheckmarkTrainingData obtenu lors de l’entraînement. Par exemple, vous pouvez copier l’objet à l’aide de la méthode [CopyFrom](/fr/fine-reader/engine/visual-components-reference/supplementary-objects/spellwordcollection/copyfrom-method) ou le charger à partir d’un fichier ou depuis la mémoire à l’aide de la méthode [LoadFromMemory](/fr/fine-reader/engine/api-reference/supplementary-objects-and-methods/loadfrommemory-method) (Windows uniquement) ou de la méthode [LoadFromFile](/fr/fine-reader/engine/api-reference/supplementary-objects-and-methods/loadfromfile-method) de l’objet CheckmarkTrainingData.
10. Appelez l’une des méthodes de reconnaissance de l’objet FRDocument ou FRPage, par exemple la méthode [IFRDocument::Recognize](/fr/fine-reader/engine/api-reference/document-related-objects/frdocument/recognize-method).
11. Les propriétés [BlackThreshold](/fr/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock#blackthreshold) et [SuspiciousDistance](/fr/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock#suspiciousdistance) de l’objet CheckmarkBlock vous permettent d’affiner davantage les paramètres si vous n’êtes pas satisfait des résultats de reconnaissance. Après l’entraînement, les valeurs par défaut de ces propriétés sont remplacées par des valeurs qui devraient fonctionner dans la plupart des cas. Lorsque vous chargez l’objet CheckmarkTrainingData pour un bloc de coches, les valeurs de ces propriétés sont également chargées. Vous pouvez modifier les valeurs de ces propriétés et relancer la reconnaissance des coches (en répétant l’étape 10), puis, lorsque vous avez trouvé la meilleure configuration, enregistrer de nouveau l’objet CheckmarkTrainingData et utiliser le nouvel objet pour reconnaître les coches de votre type personnalisé.

<div id="see-also">
  ## Voir aussi
</div>

[CheckmarkBlock](/fr/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock)

[CheckmarkGroup](/fr/fine-reader/engine/api-reference/layout-related-objects/checkmarkgroup)

[Utilisation de la mise en page et des blocs](/fr/fine-reader/engine/guided-tour/advanced-techniques/working-with-layout-and-blocks)
