EasyOCR - 텍스트 읽기
EasyOCR 광학 문자 인식 라이브러리는 짧은 텍스트 예 : 일련 번호, 부품 번호 및 날짜)를 읽습니다.
EasyOCR은 글꼴 파일(사전 정의 OCR-A, OCR-B, Semi 표준 글꼴 또는 기타 학습된 글꼴)과 함께 잘못 인쇄되거나 깨지거나 뭉친 문자도 크기에 관계없이 인식할 수 있는 템플릿 일치 알고리즘을 사용합니다.
문자 인식에는 다음 4단계가 적용됩니다.
![]() |
![]() |
![]() |
![]() |
1. 원시 이미지 | 2. 개체 분할 | 3. 문자 격리 | 4. 문자 인식 |

필요할 경우 문자를 학습하여 글꼴 파일을 만들 수 있습니다.
문자가 한 번에 하나씩 제출되면 EasyOCR에서 이를 분석하여 글꼴이라 부르는 문자의 데이터베이스를 구축합니다. 각 문자에는 숫자 코드(일반적으로 ASCII 코드)가 있으며, 문자는 한 문자 클래스에 속합니다(인식 프로세스에서 사용될 수 있음).
글꼴 파일은 다음과 같이 만들어집니다.
- NewFont를 선택하면 현재 글꼴이 지워집니다.
- LearnPattern 또는 LearnPatterns는 소스 이미지에서 글꼴에 패턴을 추가합니다.
패턴은 FindAllChars 프로세스에서 할당된 색인 값에 따라 정렬됩니다.
글꼴 내의 패턴은 기본적으로 너비 5픽셀, 높이 9픽셀의 작은 픽셀 배열로 저장됩니다. 학습 전에 PatternWidth 및 PatternHeight 매개변수를 사용하여 이 크기를 변경할 수 있습니다. - RemovePattern는 불필요한 패턴을 제거합니다(옵션).
- Save(저장)는 매개변수 값: NoiseArea, MaxCharWidth, MaxCharHeight, MinCharWidth, MinCharHeight, CharSpacing, TextColor와 함께 글꼴의 내용을 디스크 파일에 씁니다.

- 블롭을 분석하고 두 가지 분할 모드 중 하나를 사용하여 문자와 그 윤곽 상자를 찾습니다.
- keep objects(개체 유지) 모드: 한 블롭이 한 문자에 해당합니다.
- repaste objects(개체 다시 붙여넣기) 모드: 블롭이 공칭 크기의 문자로 그룹화됩니다. 이 기능은 문자가 깨졌거나 여러 부분으로 이루어진 경우에 유용합니다. 블롭이 한 문자로 간주하기에 너무 클 경우, CutLargeChars를 사용하여 자동으로 분할될 수 있습니다.
블롭 그룹화를 통한 문자 분할
2. 필터를 통해 너무 크거나 너무 작은 불필요한 특징이 제거됩니다.
3. EasyOCR에서 문자 이미지를 처리하여 크기를 윤곽 상자에 맞게 정규화하고, 관련 특징을 추출하여 글꼴 파일에 저장합니다. 글꼴 내의 패턴은 PatternWidth와 PatternHeight(기본값 너비 5픽셀, 높이 9픽셀)로 정의되는 픽셀 배열로 저장됩니다.

학습 및 인식 도중 분할 매개변수가 동일해야 합니다. 적절한 분할은 인식률을 높여줍니다.
- Threshold(임계값) 매개변수를 사용하여 텍스트를 배경에서 분리할 수 있습니다.
너무 높은 값을 지정하면 흰 배경에서 검정색 문자가 두꺼워지고 병합이 일어날 수 있으며, 너무 작은 값은 부품이 사라지게 만듭니다.
조명 조건이 매우 변화가 심하다면, 자동 임계값 적용이 적절한 선택입니다.
너무 높은 임계값(왼쪽), 임계값 조정(가운데), 너무 낮은 임계값(오른쪽)
- NoiseArea: 이 값보다 면적이 작은 블롭은 폐기됩니다. 작은 문자 특징(예: "i" 문자 위의 점)이 보존되도록 하십시오.
- MaxCharWidth, MaxCharHeight: 최대 문자 크기. 블롭이 이 치수의 사각형에 맞지 않으면 폐기되거나 수직 절단선을 사용하여 여러 부분으로 분할됩니다. 여러 블롭이 이 치수의 사각형에 맞을 경우 함께 그룹화됩니다.
- MinCharWidth, MinCharHeight: 최소 문자 크기. 한 블롭 또는 블롭 그룹이 이 치수의 사각형에 맞을 경우 폐기됩니다.
- CharSpacing: 인접한 문자 사이 가장 좁은 간격의 너비. 이 값이 MaxCharWidth보다 크다면 아무런 영향이 없습니다.
두 문자 사이의 간격이 이보다 넓다면, 서로 다른 문자로 취급됩니다. 이 기능은 얇은 문자가 잘못 서로 그룹화되는 것을 방지합니다. - RemoveBorder: 이미지/ROI 에지에 가까운 블롭은 일반적으로 문자 인식에 활용할 수 없습니다. 기본적으로 그러한 블롭은 폐기됩니다.

문자가 글꼴이라 불리는 일련의 패턴과 비교됩니다. 문자와 글꼴 내 패턴 사이의 최적 일치 항목을 찾으면 문자가 인식됩니다. 문자를 찾은 후에는 일치 확인을 위해 크기가 정규화됩니다(사전 정의된 사각형 안에 맞도록 확장됨). 정규화된 문자가 글꼴 데이터베이스에 있는 각 정규화 템플릿과 비교되며, 최적 일치 항목이 반환됩니다
- Load(로드): 사전 기록된 글꼴을 디스크에서 읽습니다.
- BuildObjects: 이미지가 개체 또는 블롭(연결된 성분)으로 분할되어 문자를 찾기가 쉬워집니다. 문자의 정확한 위치를 알고 있다면 이 단계는 건너뛸 수 있습니다. 문자 격리 프로세스를 건너뛴 경우, AddChar 및 EmptyChars에 문자의 알려진 위치를 지정해야 합니다.
- FindAllChars: 문자로 간주되는 개체를 선택하고, 위에서 아래 그 다음 왼쪽에서 오른쪽으로 정렬합니다.
- ReadText: 일치 작업을 수행하고 표식 구조가 고정되어 있거나 문자 집합 필터가 제공된 경우 문자를 필터링합니다.
Character recognition(문자 인식): 문자가 글꼴이라 불리는 패턴 집합과 비교됩니다.
최적 일치 항목이 사전 정의된 사각형에 맞도록 신장되며 글꼴 데이터베이스 내의 정규화된 템플릿과 비교됩니다.
문자 집합 필터는 비교할 문자의 범위를 제한함으로써 인식 신뢰성과 작업 시간을 개선할 수 있습니다. 예를 들어, 두 대문자에 이어 마지막이 항상 짝수인 다섯 숫자로 구성된 표식이 있다면, 각 문자에 클래스(최대 32 클래스)를 할당한 다음 인식 시점에 두 대문자, 짝수 또는 홀수 네 개, 짝수 하나의 클래스를 허용하도록 문자 필터를 설정할 수 있습니다.
2 ~ 4 단계를 마음대로 반복하여 다른 이미지 또는 ROI를 처리할 수 있습니다. Recognize(인식) 메서드 또한 사용할 수 있습니다.
CharGetOrgX, CharGetOrgY, CharGetWidth, CharGetHeight 등을 사용하여 감지된 문자의 기하학적 위치와 같은 추가 정보를 입수할 수도 있습니다.
CompareAspectRatio는 좁고 넓은 문자 사이의 차이에 따라 문자 및 글꼴 비교가 민감하게 반응하도록 만듭니다. 이 기능은 크기 정규화 이후 문자가 서로 비슷하게 보일 때 인식률을 높여줍니다.

- MaxCharWidth, MaxCharHeight: 블롭이 이 치수의 사각형 안에 맞지 않을 경우, 인식 가능한 문자가 아니라고 간주되며(너무 큼) 폐기됩니다. 더구나, 여러 블롭이 이 치수의 사각형에 맞을 경우 함께 그룹화되어 하나의 문자를 이룹니다. 바깥쪽 사각형 크기는 작은 안전 여백으로 확대되었을 때 글꼴에서 가장 큰 문자가 포함될 수 있도록 선택해야 합니다.
- MinCharWidth, MinCharHeight: 블롭 또는 블롭 그룹이 이 치수의 사각형 안에 맞을 경우, 인식 가능한 문자가 아니라고 간주되며(너무 작음) 폐기됩니다. 안쪽 사각형 크기는 작은 안전 여백으로 축소되었을 때 글꼴에서 가장 작은 문자가 포함될 수 있도록 선택해야 합니다.
- RemoveNarrowOrFlat: 작은 문자가 좁거나 또는 평평할 경우 폐기됩니다. 기본적으로 문자가 좁으면서 동시에 평평하면 폐기됩니다.
- CharSpacing: 두 블롭이 이 값보다 넓은 수직 간격으로 분리된 경우, 서로 다른 문자에 속하는 것으로 간주됩니다. 이 기능은 바깥쪽 사각형 안에 맞는 얇은 문자의 그룹화를 방지하는 데 유용합니다. 이 값은 인접한 문자 사이의 가장 작은 간격 너비로 설정해야 합니다. 이 값을 크게 설정하면(MaxCharWidth보다 크게) 아무런 영향이 없습니다.
- CutLargeChars: 한 블롭 또는 블롭 그룹이 MaxCharWidth보다 크다면 폐기됩니다. 이 기능을 활성화하면 블롭이 맞추는 데 필요한 만큼 분할되며, 분할된 블롭 사이에 삽입해야 하는 공백의 양은 RelativeSpacing으로 설정됩니다. 이는 서로 맞닿은 문자를 분할하기 위한 기능입니다.
- RelativeSpacing: CutLargeChars 모드를 활성한 경우, 이 값을 설정하면 블롭의 분할된 부분에 삽입해야 하는 공백의 양을 지정할 수 있습니다.
올바르지 않은 인식 설정

다음 인식 매개변수를 조정하여 인식율을 최적화할 수 있습니다.
- Keep objects(개체 유지) 모드: 한 문자가 한 블롭이며, 블롭을 그룹화하려는 시도가 이루어지지 않으므로, 손상된 문자를 처리할 수 없고 액센트나 점과 같은 작은 특징이 최소 문자 크기 기준에 따라 폐기될 수 있습니다.
- Repaste objects(개체 다시 붙여넣기) 모드: 블롭이 최대 문자 크기에 맞고 수직 간격에 의해 분리되지 않은 경우 블롭이 그룹화되어 고유 문자를 형성하므로, 액센트와 점이 보존됩니다.