OCV

1 개요

학습한 문자 정보를 바탕으로 이미지 내에서의 텍스트를 추출하고 검증합니다.

2 알고리즘 상세 설명

OCR 알고리즘에서 학습하거나, 글꼴 파일의 문자 정보를 Load 하여 인식, 검사합니다.
규칙적이고 고정된 글꼴과 레이아웃을 가진 이미지에 최적화되어있습니다.

높은 처리 속도를 제공하기위해 내재화된 병렬화 처리 기능을 제공합니다. 멀티스레드, SIMD 를 제공하며 복잡한 설정없이 알고리즘이 자체적으로 판단하여 기본으로 가장 높은 처리속도의 설정으로 바로 실행이 가능하여 손쉽게 사용이 가능합니다, 또한 설비에서 발생할 수 있는 제한된 스레드 사용, 저사양PC의 SIMD사용제한 등에 SetProcessingUnit API를 통해 손쉽게 원하는 리소스 방식으로 사용이 가능합니다.

Source 이미지 검사 결과
Source 이미지 검사 결과
Source 이미지 검사 결과
Source 이미지 검사 결과

3 파라미터 설정 및 사용 방법

[i] 기본적인 동작의 경우, 별도의 파라미터 설정없이 가능합니다.
[ii] 사용자의 최적화된 결과를 제공하기위한 다양한 하이퍼 파라미터를 제공합니다. 해당 파라미터는 설정할 의무가 없으나 설비 혹은 개발에 최적화된 처리속도와 정밀한 결과를 얻기 위해 적절한 파라미터 값을 설정한다면 더 효과적인 결과를 얻을 수 있습니다.

3.1 학습 문자 정보 Load 및 관리

OCV 알고리즘 사용 전 반드시 OCR 알고리즘에서 학습한 문자 정보 또는 글꼴 파일(.TTF, .TTC)을 Load 해야합니다. 글꼴 파일을 Load 하는게 아닐 경우 OCR 메뉴얼을 먼저 보시는 것을 추천드립니다.

COCV ocv; // 알고리즘 객체

ocv.LoadFontData(L"C:/Users/Public/Documents/FLImaging/ExampleImages/OCV/Font_A-Z_0-9.flocr"); // flocr 파일 Load (TTF, TTC 파일도 가능합니다.)
const CFLImage* pFliFontData = ocv.GetFontData(); // 문자 정보 조회
CFLImage fliFontData = new CFLImage(); // Font 데이터 이미지
COCV ocv = new COCV(); // 알고리즘 객체

ocv.LoadFontData("C:/Users/Public/Documents/FLImaging/ExampleImages/OCV/Font_A-Z_0-9.flocr"); // flocr 파일 Load (TTF, TTC 파일도 가능합니다.)
ocv.GetFontData(ref fliFontData); // 문자 정보 조회
fliFontData = CFLImage() # Font 데이터 이미지
ocv = COCV() # 알고리즘 객체

ocv.LoadFontData('C:/Users/Public/Documents/FLImaging/ExampleImages/OCV/Font_A-Z_0-9.flocr') # flocr 파일 Load (TTF, TTC 파일도 가능합니다.)
ocv.GetFontData(fliFontData) # 문자 정보 조회

LoadFont() - OCR 알고리즘에서 Learn, 저장한 파일을 Load 합니다.
GetFontData() - Load 한 문자 정보가 있는 이미지를 얻습니다. 각 페이지마다 하나의 학습된 문자에 대한 Figure, 매핑 정보를 조회할 수 있습니다. OCR 알고리즘의 'GetLearnedImage()' 결과와 동일합니다.
DeleteFontData() - 인덱스 번호 또는 문자를 입력하여 문자 정보를 삭제합니다.
ClearFontData() - 모든 문자 정보를 삭제합니다.

Font Data Font Data
Font Data Font Data
Fig. Load 된 문자 정보

OCR 에서 학습한 문자 정보가 잘 Load 된 것 같습니다. 앞으로는 해당 정보를 기준으로 검사가 진행됩니다.

3.2 인식 관련 설정

OCV 알고리즘에서 인식을 위한 설정과 Preview 기능의 경우 OCR 알고리즘과 완전히 동일합니다. OCR 의 메뉴얼을 먼저 보시는 것을 추천드립니다.

ocv.EnableAutoSeparation(true); // Auto Separation 적용
ocv.EnableNoiseReduction(true); // 노이즈 감소 적용
ocv.SetCharacterColorType(ECharacterColorType_BlackOnWhite); // 흰색 배경에 검정색 문자로 설정
ocv.SetAngleBias(0.0); // 기준 각도를 0도로 설정
ocv.SetAngleTolerance(30.0); // 허용 범위를 양 옆 30도로 설정
ocv.EnableAutoSeparation(true); // Auto Separation 적용
ocv.EnableNoiseReduction(true); // 노이즈 감소 적용
ocv.SetCharacterColorType(ECharacterColorType.BlackOnWhite); // 흰색 배경에 검정색 문자로 설정
ocv.SetAngleBias(0.0); // 기준 각도를 0도로 설정
ocv.SetAngleTolerance(30.0); // 허용 범위를 양 옆 30도로 설정
ocv.EnableAutoSeparation(True) # Auto Separation 적용
ocv.EnableNoiseReduction(True) # 노이즈 감소 적용
ocv.SetCharacterColorType(ECharacterColorType.BlackOnWhite) # 흰색 배경에 검정색 문자로 설정
ocv.SetAngleBias(0.0) # 기준 각도를 0도로 설정
ocv.SetAngleTolerance(30.0) # 허용 범위를 양 옆 30도로 설정

EnableAutoSeparation() - 이미지에 자체 전처리를 적용하여 이진화를 수행합니다.
SetThresholdValue() - Auto Separation 을 사용하지 않을 경우 입력값을 기준으로 이진화합니다.
EnableNoiseReduction() - 이미지에 노이즈 감소를 적용합니다.
SetCharacterColorType() - 문자의 색상을 설정합니다. Black On White, White on Black, All 모드 중 선택 가능합니다. SetAngleBias() - 기준 각도를 설정합니다.
SetAngleTolerance() - 기준 각도에서 문자가 기울어진 허용 범위를 설정합니다.

3.1.1 인식 관련 보조 키워드


Ignore Example
Labeling
Fig. "!!" 사용 예시

노이즈나 인식하지 않고 싶은 객체가 있을 경우 "!!" 를 이름으로 라벨링하여 처리되지 않게 할 수 있습니다.

3.3 검사 관련 설정

3.3.1 문자열 매칭 기능

Label Figure 또는 ROI 기능을 사용하여 입력한 문자열과 동일하게 인식되었는지 검사할 수 있습니다. OCR 알고리즘의 이미지와 동일한 이미지에서 검사를 진행해보겠습니다.

CFLImage fliSource;
CFLFigureArray flfaROI1;

fliSource.Load(L"C:/Users/Public/Documents/FLImaging/ExampleImages/OCR/OCR_Learn.flif"); // Source 이미지 로드
flfaROI1.Load(L"C:/Users/Public/Documents/FLImaging/ExampleImages/OCV/Menual_ROI 1.fig"); // ROI 로드

ocv.SetSourceImage(fliSource); // Source 이미지 입력
ocv.SetSourceROI(flfaROI1); // 검사할 위치에 정답 문자열로 이름이 지정된 ROI 를 설정합니다.
ocv.SetWritingDirection(EWritingDirection_LeftToRight); // 왼쪽에서 오른쪽 방향으로 각 문자를 매핑합니다.
ocv.Execute(); // 검사 진행
CFLImage fliSource = new CFLImage();
CFLFigureArray flfaROI1 = new CFLFigureArray();

fliSource.Load("C:/Users/Public/Documents/FLImaging/ExampleImages/OCR/OCR_Learn.flif"); // Source 이미지 로드
flfaROI1.Load("C:/Users/Public/Documents/FLImaging/ExampleImages/OCV/Menual_ROI 1.fig"); // ROI 로드

ocv.SetSourceImage(fliSource); // Source 이미지 입력
ocv.SetSourceROI(flfaROI1); // 검사할 위치에 정답 문자열로 이름이 지정된 ROI 를 설정합니다.
ocv.SetWritingDirection(EWritingDirection.LeftToRight); // 왼쪽에서 오른쪽 방향으로 각 문자를 매핑합니다.
ocv.Execute(); // 검사 진행
fliSource = CFLImage()
flfaROI1 = CFLFigureArray()

fliSource.Load('C:/Users/Public/Documents/FLImaging/ExampleImages/OCR/OCR_Learn.flif') # Source 이미지 로드
flfaROI1.Load('C:/Users/Public/Documents/FLImaging/ExampleImages/OCV/Menual_ROI 1.fig') # ROI 로드

ocv.SetSourceImage(fliSource) # Source 이미지 입력
ocv.SetSourceROI(flfaROI1) # 검사할 위치에 정답 문자열로 이름이 지정된 ROI 를 설정합니다.
ocv.SetWritingDirection(EWritingDirection.LeftToRight) # 왼쪽에서 오른쪽 방향으로 각 문자를 매핑합니다.
ocv.Execute() # 검사 진행

SetWritingDirection() - 문자의 정렬 방향을 설정합니다. Execute() - 검사를 진행합니다.

ROI, 정렬 방향을 설정하고 검사를 진행합니다. 입력한 Figure Name 과 동일한 문자가 매칭되었는지 검사합니다.

ROI
ROI

ROI 가 입력되지 않을 경우 매칭 기능 없이 전체 이미지에 대해 검사합니다

COCV::EVerificationState eVerificationResult = ocv.GetResultVerificationState(); // 전체 검사 결과

int64_t i64ResultCount = ocv.GetResultCount(); // 추출한 문자 개수
std::vector<COCV::COCVVerificationCharacterInfo> vctOcvInfo; // 인식 문자들의 검사 결과를 저장하는 벡터

for(int64_t i = 0; i < i64ResultCount; i++)
{
	COCV::COCVVerificationCharacterInfo ocvInfo; // 문자의 검사 결과를 담는 객체 선언
	ocv.GetResultVerificationCharactersInfo(i, ocvInfo); // 인덱스마다 문자의 검사 결과 얻기
	printf("Input Character: %s, Recognized Character: %s, %s\n", ocvInfo.GetRecognizedCharacter().GetBuffer(), ocvInfo.flsInputCharacter.GetBuffer(), ocvInfo.bCorrectCharacter ? "Correct" : "Wrong"); // 각각의 매칭 여부 출력
	vctOcvInfo.push_back(ocvInfo); // 벡터에 저장
}
COCV.EVerificationState eVerificationResult = ocv.GetResultVerificationState(); // 전체 검사 결과

long i64ResultCount = ocv.GetResultCount(); // 추출한 문자 개수
List<COCV.COCVVerificationCharacterInfo> liOcvInfo = new List<COCV.COCVVerificationCharacterInfo>(); // 인식 문자들의 검사 결과를 저장하는 리스트

for(long i = 0; i < i64ResultCount; i++)
{
	COCV.COCVVerificationCharacterInfo ocvInfo = new COCV.COCVVerificationCharacterInfo(); // 문자의 검사 결과를 담는 객체 선언
	ocv.GetResultVerificationCharactersInfo(i, ref ocvInfo); // 인덱스마다 문자의 검사 결과 얻기
	Console.WriteLine("Input Character: {0}, Recognized Character: {1}, {2}", ocvInfo.GetRecognizedCharacter(), ocvInfo.flsInputCharacter, ocvInfo.bCorrectCharacter ? "Correct" : "Wrong"); // 각각의 매칭 여부 출력
	liOcvInfo.Add(ocvInfo); // 리스트에 저장
}
eVerificationResult = ocv.GetResultVerificationState() # 전체 검사 결과

i64ResultCount = ocv.GetResultCount() # 추출한 문자 개수
liOcvInfo = new List[COCV.COCVVerificationCharacterInfo]() # 인식 문자들의 검사 결과를 저장하는 리스트

for i in range(i64ResultCount):
	ocvInfo = COCV.COCVVerificationCharacterInfo() # 문자의 검사 결과를 담는 객체 선언
	ocv.GetResultVerificationCharactersInfo(i, ocvInfo) # 인덱스마다 문자의 검사 결과 얻기
	print("Input Character: {0}, Recognized Character: {1}, {2}".format(ocvInfo.GetRecognizedCharacter(), ocvInfo.flsInputCharacter, "Correct" if ocvInfo.bCorrectCharacter else "Wrong")) # 각각의 매칭 여부 출력
	liOcvInfo.Add(ocvInfo) # 리스트에 저장

GetResultVerificationState() - 전체 검사 결과를 반환합니다. 모든 문자가 Verified 일 경우에만 Verified 를 반환합니다.
GetResultCount() - 검사한 문자의 개수를 얻습니다.
GetResultVerificationCharactersInfo() - 입력한 인덱스의 문자 검사 결과를 얻습니다.

모든 인식 문자가 입력 문자가 일치함을 확인할 수 있습니다. 만약 입력 문자와 일치하지 않는 다면 해당 문자에 대해 Fail 처리됩니다.

Verification Result 1 Verification Result 2
Verification Result 1 Verification Result 2
Fig. OCV 검사 결과 1

단순한 문자열 매칭이 아닌 정규표현식으로도 검사 가능합니다.

ocv.EnableRegularExpression(true); // 정규식으로 매칭
ocv.Execute(); // 검사 진행
ocv.EnableRegularExpression(true); // 정규식으로 매칭
ocv.Execute(); // 검사 진행
ocv.EnableRegularExpression(True) # 정규식으로 매칭
ocv.Execute() # 검사 진행
Verification Result 3
Verification Result 3
Fig. OCV 검사 결과 2 (정규식)

3.3.2 검사 항목 세팅

각각의 Inspection Item(검사 항목) 에 대해 검사 여부를 설정할 수 있습니다.

CFLImage fliAnomaly;
CFLRect<double> flrROI2;

fliAnomaly.Load(L"C:/Users/Public/Documents/FLImaging/ExampleImages/OCV/Menual_Anomaly.flif"); // Source 이미지 로드
flrROI2.Load(L"C:/Users/Public/Documents/FLImaging/ExampleImages/OCV/Menual_ROI 2.fig"); // ROI 로드

ocv.SetSourceImage(fliAnomaly); // Source 이미지 입력
ocv.SetSourceROI(flrROI2); // ROI 입력
ocv.EnableRegularExpression(false); // 문자열 매칭

ocv.EnableAbsoluteLightingInspection(false); // 학습 데이터 기준 밝기 검사 여부 설정
ocv.EnableAbsoluteContrastInspection(false); // 학습 데이터 기준 대비 검사 여부 설정
ocv.EnableRelativeLightingInspection(true); // 주변 문자 기준 밝기 검사 여부 설정
ocv.EnableRelativeContrastInspection(true); // 주변 문자 기준 대비 검사 여부 설정
ocv.EnableScaleInspection(true); // 크기 검사 여부 설정
ocv.EnableRotationInspection(true); // 회전 검사 여부 설정
ocv.EnableBlankSpaceWidthInspection(true); // 인접한 문자와의 공백 길이 검사 여부 설정

ocv.SetSigma(3.0); // Sigma 값 설정

ocv.Execute(); // 검사 진행
CFLImage fliAnomaly = new CFLImage();
CFLRect<double> flrROI2 = new CFLRect<double>();

fliAnomaly.Load("C:/Users/Public/Documents/FLImaging/ExampleImages/OCV/Menual_Anomaly.flif"); // Source 이미지 로드
flrROI2.Load("C:/Users/Public/Documents/FLImaging/ExampleImages/OCV/Menual_ROI 2.fig"); // ROI 로드

ocv.SetSourceImage(ref fliAnomaly); // Source 이미지 입력
ocv.SetSourceROI(flrROI2); // ROI 입력
ocv.EnableRegularExpression(false); // 문자열 매칭

ocv.EnableAbsoluteLightingInspection(false); // 학습 데이터 기준 밝기 검사 여부 설정
ocv.EnableAbsoluteContrastInspection(false); // 학습 데이터 기준 대비 검사 여부 설정
ocv.EnableRelativeLightingInspection(true); // 주변 문자 기준 밝기 검사 여부 설정
ocv.EnableRelativeContrastInspection(true); // 주변 문자 기준 대비 검사 여부 설정
ocv.EnableScaleInspection(true); // 크기 검사 여부 설정
ocv.EnableRotationInspection(true); // 회전 검사 여부 설정
ocv.EnableBlankSpaceWidthInspection(true); // 인접한 문자와의 공백 길이 검사 여부 설정

ocv.SetSigma(3.0); // Sigma 값 설정

ocv.Execute(); // 검사 진행
fliAnomaly = CFLImage()
flrROI2 = CFLRect[Double]()

fliAnomaly.Load("C:/Users/Public/Documents/FLImaging/ExampleImages/OCV/Menual_Anomaly.flif") # Source 이미지 로드
flrROI2.Load("C:/Users/Public/Documents/FLImaging/ExampleImages/OCV/Menual_ROI 2.fig") # ROI 로드

ocv.SetSourceImage(fliAnomaly) # Source 이미지 입력
ocv.SetSourceROI(flrROI2) # ROI 입력
ocv.EnableRegularExpression(False) # 문자열 매칭

ocv.EnableAbsoluteLightingInspection(False) # 학습 데이터 기준 밝기 검사 여부 설정
ocv.EnableAbsoluteContrastInspection(False) # 학습 데이터 기준 대비 검사 여부 설정
ocv.EnableRelativeLightingInspection(True) # 주변 문자 기준 밝기 검사 여부 설정
ocv.EnableRelativeContrastInspection(True) # 주변 문자 기준 대비 검사 여부 설정
ocv.EnableScaleInspection(True) # 크기 검사 여부 설정
ocv.EnableRotationInspection(True) # 회전 검사 여부 설정
ocv.EnableBlankSpaceWidthInspection(True) # 인접한 문자와의 공백 길이 검사 여부 설정

ocv.SetSigma(3.0) # Sigma 값 설정

ocv.Execute() # 검사 진행

EnableAbsoluteLightingInspection() - 해당 항목에 체크할 경우 학습 데이터와 비교하여 문자와 그 주변 배경의 전체적인 밝기 유사성을 검사합니다.
EnableAbsoluteContrastInspection() - 해당 항목에 체크할 경우 학습 데이터와 비교하여 문자와 그 주변 배경의 대비(밝기 차이) 유사성을 검사합니다.
EnableRelativeLightingInspection() - 해당 항목에 체크할 경우 정렬된 주변 문자와 비교하여 문자와 그 주변 배경의 전체적인 밝기에 대한 이상치를 검사합니다.
EnableRelativeContrastInspection() - 해당 항목에 체크할 경우 정렬된 주변 문자와 비교하여 문자와 그 주변 배경의 대비(밝기 차이)에 대한 이상치를 검사합니다.
EnableScaleInspection() - 해당 항목에 체크할 경우 정렬된 주변 문자와 비교하여 문자의 크기에 대한 이상치를 검사합니다.
EnableRotationInspection() - 해당 항목에 체크할 경우 정렬된 주변 문자와 비교하여 문자의 회전 각도에 대한 이상치를 검사합니다.
EnableBlankSpaceWidthInspection() - 해당 항목에 체크할 경우 인접한 문자와의 공백 길이에 대한 이상치를 검사합니다.

SetSigma() - 이상치 판별 시 적용되는 가중치를 설정합니다. 입력값이 낮을수록 더 엄격하게 검사합니다.

eVerificationResult = ocv.GetResultVerificationState(); // 전체 검사 결과

i64ResultCount = ocv.GetResultCount(); // 추출한 문자 개수
vctOcvInfo.clear(); // 결과 벡터 Claer

for(int64_t i = 0; i < i64ResultCount; i++)
{
	COCV::COCVVerificationCharacterInfo ocvInfo; // 문자의 검사 결과를 담는 객체 선언
	ocv.GetResultVerificationCharactersInfo(i, ocvInfo); // 인덱스마다 문자의 검사 결과 얻기
	printf("Recognized Character: %s, Relative Contrast: %s, Scale: %s, Rotation: %s\n", ocvInfo.GetRecognizedCharacter().GetBuffer(), ocvInfo.eRelativeContrastState == 1 ? "Verified" : "Fail", ocvInfo.eScaleState == 1 ? "Verified" : "Fail", ocvInfo.eRotationState == 1 ? "Verified" : "Fail"); // 각각의 검사 결과 출력
	vctOcvInfo.push_back(ocvInfo); // 벡터에 저장
}
eVerificationResult = ocv.GetResultVerificationState(); // 전체 검사 결과

i64ResultCount = ocv.GetResultCount(); // 추출한 문자 개수
liOcvInfo.Clear(); // 결과 리스트 Claer

for(long i = 0; i < i64ResultCount; i++)
{
	COCV.COCVVerificationCharacterInfo ocvInfo = new COCV.COCVVerificationCharacterInfo(); // 문자의 검사 결과를 담는 객체 선언
	ocv.GetResultVerificationCharactersInfo(i, ref ocvInfo); // 인덱스마다 문자의 검사 결과 얻기
	Console.WriteLine("Recognized Character: {0}, Relative Contrast: {1}, Scale: {2}, Rotation: {3}", ocvInfo.GetRecognizedCharacter(), ocvInfo.eRelativeContrastState == COCV.EVerificationState.OK ? "Verified" : "Fail", ocvInfo.eScaleState == COCV.EVerificationState.OK ? "Verified" : "Fail", ocvInfo.eRotationState == COCV.EVerificationState.OK ? "Verified" : "Fail"); // 각각의 검사 결과 출력
	liOcvInfo.Add(ocvInfo); // 리스트에 저장
}
eVerificationResult = ocv.GetResultVerificationState() # 전체 검사 결과

i64ResultCount = ocv.GetResultCount() # 추출한 문자 개수
liOcvInfo.Clear() # 결과 리스트 Claer

for i in range(i64ResultCount):
	ocvInfo = COCV.COCVVerificationCharacterInfo() # 문자의 검사 결과를 담는 객체 선언
	ocv.GetResultVerificationCharactersInfo(i, ocvInfo) # 인덱스마다 문자의 검사 결과 얻기
	print("Recognized Character: {0}, Relative Contrast: {1}, Scale: {2}, Rotation: {3}".format(ocvInfo.GetRecognizedCharacter(), "Verified" if ocvInfo.eRelativeContrastState == COCV.EVerificationState.OK else "Fail", "Verified" if ocvInfo.eScaleState == COCV.EVerificationState.OK else "Fail", "Verified" if ocvInfo.eRotationState == COCV.EVerificationState.OK else "Fail")) # 각각의 검사 결과 출력
	liOcvInfo.Add(ocvInfo) # 리스트에 저장
Source Verification Result Verification Result
Source Verification Result Verification Result
Fig. OCV 검사 결과 3

각각의 검사 항목에 대해 이상치를 가지는 문자가 검출됨을 확인할 수 있습니다.

3.3.3 Quility 검사

인식된 문자의 모양에 대한 정밀한 에러를 측정할 수 있습니다. Intrusion 또는 Extrusion 의 비율로 Quility 지표를 계산합니다.

CFLImage fliA;

fliA.Load(L"C:/Users/Public/Documents/FLImaging/ExampleImages/OCV/A_Demaged3.flif"); // Source 이미지 로드

ocv.SetSourceImage(fliA); // Source 이미지 입력
ocv.SetSourceROI(nullptr); // ROI 없음

ocv.EnableIntrusionInspection(true); // Intrusion 검사 여부 설정
ocv.EnableExtrusionInspection(true); // Extrusion 검사 여부 설정
ocv.SetMinimumQualityErrorHeight(12.); // Intrusion 또는 Extrusion 을 충족하는 최소 높이 설정
ocv.SetMinimumQualityErrorIter(12.); // Intrusion 또는 Extrusion 을 충족하는 최소 반복 횟수 설정
ocv.SetMinimumQuality(0.8); // 최소 Quality 점수 설정

ocv.Execute(); // 검사 진행

eVerificationResult = ocv.GetResultVerificationState(); // 전체 검사 결과

COCV::COCVVerificationCharacterInfo ocvInfo; // 문자의 검사 결과를 담는 객체 선언
ocv.GetResultVerificationCharactersInfo(0, ocvInfo); // 0번 인덱스 문자의 검사 결과 얻기
CFLFigureArray flfaIntrusion = ocvInfo.flfaIntrusion; // Intrusion 
CFLFigureArray flfaExtrusion = ocvInfo.flfaExtrusion; // Extrusion
printf("Quality: %lf", ocvInfo.f64Quality); // Quality 점수 출력
CFLImage fliA = new CFLImage();

fliA.Load("C:/Users/Public/Documents/FLImaging/ExampleImages/OCV/A_Demaged3.flif"); // Source 이미지 로드

ocv.SetSourceImage(ref fliA); // Source 이미지 입력
ocv.SetSourceROI(null); // ROI 없음

ocv.EnableIntrusionInspection(true); // Intrusion 검사 여부 설정
ocv.EnableExtrusionInspection(true); // Extrusion 검사 여부 설정
ocv.SetMinimumQualityErrorHeight(12); // Intrusion 또는 Extrusion 을 충족하는 최소 높이 설정
ocv.SetMinimumQualityErrorIter(12); // Intrusion 또는 Extrusion 을 충족하는 최소 반복 횟수 설정
ocv.SetMinimumQuality(0.8); // 최소 Quality 점수 설정

ocv.Execute(); // 검사 진행

eVerificationResult = ocv.GetResultVerificationState(); // 전체 검사 결과

COCV.COCVVerificationCharacterInfo ocvInfo2 = new COCV.COCVVerificationCharacterInfo(); // 문자의 검사 결과를 담는 객체 선언
ocv.GetResultVerificationCharactersInfo(0, ref ocvInfo2); // 0번 인덱스 문자의 검사 결과 얻기
CFLFigureArray flfaIntrusion = ocvInfo2.flfaIntrusion; // Intrusion 
CFLFigureArray flfaExtrusion = ocvInfo2.flfaExtrusion; // Extrusion
Console.WriteLine("Quality: {0}", ocvInfo2.f64Quality.ToString()); // Quality 점수 출력
fliA = CFLImage()

fliA.Load("C:/Users/Public/Documents/FLImaging/ExampleImages/OCV/A_Demaged3.flif") # Source 이미지 로드

ocv.SetSourceImage(fliA) # Source 이미지 입력
ocv.SetSourceROI(None) # ROI 없음

ocv.EnableIntrusionInspection(True) # Intrusion 검사 여부 설정
ocv.EnableExtrusionInspection(True) # Extrusion 검사 여부 설정
ocv.SetMinimumQualityErrorHeight(12) # Intrusion 또는 Extrusion 을 충족하는 최소 높이 설정
ocv.SetMinimumQualityErrorIter(12) # Intrusion 또는 Extrusion 을 충족하는 최소 반복 횟수 설정
ocv.SetMinimumQuality(0.8) # 최소 Quality 점수 설정

ocv.Execute() # 검사 진행

eVerificationResult = ocv.GetResultVerificationState() # 전체 검사 결과

ocvInfo2 = new COCV.COCVVerificationCharacterInfo() # 문자의 검사 결과를 담는 객체 선언
ocv.GetResultVerificationCharactersInfo(0, ocvInfo2) # 0번 인덱스 문자의 검사 결과 얻기
flfaIntrusion = ocvInfo2.flfaIntrusion # Intrusion 
flfaExtrusion = ocvInfo2.flfaExtrusion # Extrusion
print("Quality: {0}", ocvInfo2.f64Quality) # Quality 점수 출력

EnableIntrusionInspection() - 해당 항목에 체크할 경우 학습 데이터와 비교하여 문자의 Intrusion(안으로 파인 부분) 을 검사합니다.
EnableExtrusionInspection() - 해당 항목에 체크할 경우 학습 데이터와 비교하여 문자의 Extrusion(밖으로 돌출된 부분) 을 검사합니다.
SetMinimumQualityErrorHeight() - Intrusion 또는 Extrusion 을 충족하는 최소 높이를 설정합니다.
SetMinimumQualityErrorIter() - Intrusion 또는 Extrusion 을 충족하는 최소 반복 횟수를 설정합니다.
SetMinimumQuality() - Quaility 의 최소 점수를 설정합니다. 입력값 기준으로 검증 여부가 결정됩니다.

Source Verification Result
Source Verification Result
Fig. Quaility 검사 결과