C# 샘플은 Windows용 FRE에서만 적용됩니다.
이미지에서 체크 표시 감지하기
C# 코드
C# 코드
체크 표시 그룹 인식
- 체크 표시 유형을 올바르게 설정해야 합니다. CMT_Circle 및 CMT_Square 유형의 체크 표시는 검은색 테두리가 있으므로, 비율을 계산할 때 이를 고려해야 합니다.
- 체크 표시의 영역을 정확하게 지정해야 합니다. 검은색 비율은 전체 영역을 기준으로 계산되므로, 관련 없는 영역이 포함되면 추정 정확도가 떨어질 수 있습니다.
- 체크 표시 그룹이 있는 이미지에서 FRDocument 객체를 생성합니다. 예를 들어, Engine 객체의 CreateFRDocumentFromImage 메서드를 사용할 수 있습니다.
- 문서의 페이지 컬렉션(IFRDocument::Pages)에서 체크 표시 이미지가 있는 페이지를 가져옵니다. FRPages 컬렉션의 속성과 메서드를 사용합니다.
- IFRPage::Layout 속성을 통해 이 페이지에 해당하는 Layout 객체를 가져옵니다.
- 각 체크 표시 그룹에 대해 다음을 수행합니다.
- IEngine::CreateRegion 메서드를 사용하여 Region 객체를 만들고, IRegion::AddRect 메서드를 사용해 여기에 사각형을 추가합니다.
- 체크 표시 그룹 유형의 Block 객체를 만든 다음, ILayoutBlocks::AddNew 메서드를 사용하여 이를 레이아웃 블록 컬렉션(ILayout::Blocks)에 추가합니다(입력 매개변수로 BT_CheckmarkGroup 상수와 생성한 Region 객체를 사용합니다. 또한 이 메서드는 세 번째 입력 매개변수로 레이아웃 내 블록 인덱스를 필요로 합니다).
- CheckmarkGroup 객체를 가져옵니다(IBlock::GetAsCheckmarkGroup 메서드 사용).
- 그룹의 각 체크 표시마다 다음을 수행합니다.
- IEngine::CreateRegion 메서드를 사용해 Region 객체를 만들고, IRegion::AddRect 메서드로 여기에 사각형을 추가합니다.
- ICheckmarkGroup::AddNew 메서드를 사용해 그룹에 새 체크 표시 블록을 만듭니다(생성한 Region 객체를 입력 매개변수로 사용).
- CheckmarkBlock 객체를 가져온 다음(IBlock::GetAsCheckmarkBlock 메서드 사용), 필요한 매개변수(CheckmarkType, IsCorrectionEnabled)를 설정합니다.
- 체크 표시 그룹에 필요한 매개변수(MinimumCheckedInGroup, MaximumCheckedInGroup)를 설정합니다.
- 체크 표시를 인식하려면 IFRPage::Recognize, IFRPage::RecognizeBlocks, IFRDocument::Recognize, IFRDocument::RecognizePages 등 인식을 수행하는 사용 가능한 메서드 중 하나를 사용합니다.
C# 코드
C# 코드
단일 체크 표시 인식하기
- 체크 표시가 있는 이미지로부터 FRDocument 객체를 생성합니다. 예를 들어 Engine 객체의 CreateFRDocumentFromImage 메서드를 사용할 수 있습니다.
- 문서의 페이지 컬렉션(IFRDocument::Pages)에서 체크 표시 이미지가 있는 페이지를 가져옵니다. 이때 FRPages 컬렉션의 속성과 메서드를 사용합니다.
- IFRPage::Layout 속성을 통해 해당 페이지에 대응하는 Layout 객체를 가져옵니다.
- IEngine::CreateRegion 메서드로 Region 객체를 생성하고, IRegion::AddRect 메서드로 여기에 사각형을 추가합니다.
- 체크 표시 유형의 Block 객체를 생성한 다음, ILayoutBlocks::AddNew 메서드를 사용해 레이아웃 블록 컬렉션(ILayout::Blocks)에 추가합니다(입력 매개변수로 BT_Checkmark 상수와 생성한 Region 객체를 사용).
- CheckmarkBlock 객체를 가져온 후(IBlock::GetAsCheckmarkBlock 메서드 사용) 필요한 매개변수(CheckmarkType, IsCorrectionEnabled)를 설정합니다.
- 체크 표시를 인식하려면 IFRPage::Recognize, IFRPage::RecognizeBlocks, IFRDocument::Recognize, IFRDocument::RecognizePages 등 사용 가능한 인식 메서드 중 하나를 사용합니다.
C# 코드
C# 코드
사용자 지정 유형의 체크 표시 인식 학습
- 인식하려는 유형의 체크 표시 중 선택되지 않은 것이 몇 개 있는 이미지를 찾습니다. 체크 표시가 포함된 빈 양식의 이미지여도 됩니다.
- 이 이미지로부터 FRDocument 객체를 만듭니다. 예를 들어 Engine 객체의 CreateFRDocumentFromImage 메서드를 사용할 수 있습니다.
- 문서의 페이지 컬렉션(IFRDocument::Pages)에서 체크 표시 이미지가 있는 페이지를 가져옵니다. 이를 위해 FRPages 컬렉션의 속성과 메서드를 사용합니다.
- IFRPage::Layout 속성을 통해 이 페이지에 해당하는 Layout 객체를 가져옵니다.
- 페이지에 있는 각 체크 표시 블록의 영역과 유형을 지정합니다.
- IEngine::CreateRegion 메서드를 사용해 Region 객체를 만들고, IRegion::AddRect 메서드로 체크 표시 영역의 사각형을 여기에 추가합니다.
- 체크 표시 유형의 Block 객체를 만든 다음, ILayoutBlocks::AddNew 메서드를 사용해 레이아웃 블록 컬렉션(ILayout::Blocks)에 추가합니다(입력 매개변수로 BT_Checkmark 상수와 생성한 Region 객체를 사용).
- CheckmarkBlock 객체를 가져온 다음(IBlock::GetAsCheckmarkBlock 메서드 사용) CheckmarkType 속성을 CMT_Custom으로 설정합니다.
- FineReader 엔진이 이 유형의 체크 표시를 인식하도록 학습시킵니다. FRPage 객체의 LearnCheckmarks 메서드를 호출합니다.
- 그러면 학습 전에 생성한 CheckmarkBlock 객체의 TrainingData 속성에 사용자 지정 체크 표시 유형에 대한 정보가 저장됩니다. 이제 이 정보는 같은 유형의 다른 체크 표시를 인식하는 데 사용할 수 있습니다. CheckmarkTrainingData 객체의 SaveToMemory 메서드(Windows만 해당) 또는 SaveToFile 메서드를 사용하여 이 정보를 파일이나 메모리에 저장할 수 있습니다.
- 이 유형의 체크 표시가 포함된 이미지에서 FRDocument 객체를 생성하고, 페이지에서 체크 표시 블록을 지정한 다음 체크 표시 유형을 CMT_Custom으로 설정합니다. 이 절차는 2단계부터 5단계에 설명되어 있습니다.
- 각 CheckmarkBlock 객체의 TrainingData 속성을 학습 중에 얻은 CheckmarkTrainingData 객체로 초기화합니다. 예를 들어, CopyFrom 메서드를 사용해 객체를 복사하거나, CheckmarkTrainingData 객체의 LoadFromMemory 메서드(Windows만 해당) 또는 LoadFromFile 메서드를 사용해 파일이나 메모리에서 로드할 수 있습니다.
- FRDocument 또는 FRPage 객체의 인식 메서드 중 하나를 호출합니다. 예를 들어 IFRDocument::Recognize 메서드가 있습니다.
- 인식 결과가 만족스럽지 않으면 CheckmarkBlock 객체의 BlackThreshold 및 SuspiciousDistance 속성을 사용해 설정을 추가로 조정할 수 있습니다. 학습 후에는 이러한 속성의 기본값이 대부분의 경우에 적절하게 작동할 것으로 예상되는 값으로 대체됩니다. 체크 표시 블록에 대해 CheckmarkTrainingData 객체를 로드하면 이러한 속성의 값도 함께 로드됩니다. 이 속성들의 값을 변경한 후 체크 표시를 다시 인식하도록(10단계 반복) 테스트해 볼 수 있으며, 최적의 구성을 찾으면 CheckmarkTrainingData 객체를 다시 저장하고 새 객체를 사용해 사용자 지정 유형의 체크 표시를 인식할 수 있습니다.
