[C#] OCR(optical character recognition) tesseract. (광학 문자 인식, 테서랙트)

  • OCR(광학 문자 인식 : optical character recognition) 이 무엇이죠?
  • C# tesseract(테서랙트)를 통해 OCR 만들어보기

OCR(optical character recognition) 광학 문자 인식이 무엇이죠?

이미지로 변환된 것을 다시 텍스트로 인식해 보는 것입니다.

이미지를 복사(Ctrl+C)하여 붙여넣으면 해당하는 텍스트가 아니라 이미지 자체가 복사되는데, 텍스트를 얻고자 할 때 쓰는 것이지요.

C# tesseract를 통해 OCR 만들어보기

C# tesseract 참조를 통해 OCR을 만들어봅시다. 개발환경은 Visual Studio 2019입니다.

참조 추가

참조 > 우클릭 [ NuGet 패키지 관리 ] 로 이동합니다.

프로젝트 NuGet 패키지 관리

프로젝트 > [ NuGet 패키지 관리 ] 로 하셔도 됩니다. (도구 > 패키지 매니저 콘솔) 로 하셔도 된답니다.

tesseract 찾아보기

tesseract 를 검색해 주세요. [ tesseract / charlesw ] 를 설치합니다. tesseract 에 대한 .NET wrapper 오픈소스입니다.

tessdata 추가

[ tessdata ] 폴더를 생성하시고 language data 를 추가해 주세요.
이미지에서 한글(kor) 과 영어(eng) 를 읽을 수 있도록 trained data 파일을 추가하였습니다.
kor_vert 는 한국어, 중국어, 일본어쪽에서 세로형식을 읽을 수 있도록 부차적으로 추가된 파일인 것으로 보여요.

원문은 다음과 같습니다.
'_vert' is trained on text rendered vertically (but the image is rotated so the long edge is still horizontal)
traineddata 파일을 추가하실 때 Copy to output directory는 Always 로 설정해 주세요.
이렇게 하지 않으시면 Tesseract initialization errors가 발생할 것입니다.

그림판 이미지 저장

테스트 차원에서, 그림판에서 이미지 형식으로 글자를 저장해보겠습니다.

OCR TEST

위와 같이 저장한 파일을 테서랙트 엔진으로 텍스트로 변경해보겠습니다.

C# OCR(tesseract) 실행

첫 째 줄 사이의 띄어쓰기는 인식이 안 됐나보군요. 그래도 글자는 모두 인식이 되었답니다.

////////////////////////////////////////////////////////////////////////////////////////////////////

안녕하세요, 여러분.
감사합니다.

범상 드림.

////////////////////////////////////////////////////////////////////////////////////////////////////

아래는 예시 소스코드입니다.

string imgPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\beom.png";            
try
{
    txt1.Text = string.Empty;

    using (var engine = new TesseractEngine("./tessdata", "kor", EngineMode.Default))
    {
        using (var img = Pix.LoadFromFile(imgPath))
        {
            using (var page = engine.Process(img))
            {
                var text = page.GetText();
                txt1.Text = text;                            
            }
        }
    }               
}
catch (Exception ex)
{
    txt1.Text = ex.ToString();
}

댓글