- OCR(광학 문자 인식 : optical character recognition) 이 무엇이죠?
- C# tesseract(테서랙트)를 통해 OCR 만들어보기
OCR(optical character recognition) 광학 문자 인식이 무엇이죠?
이미지로 변환된 것을 다시 텍스트로 인식해 보는 것입니다.
이미지를 복사(Ctrl+C)하여 붙여넣으면 해당하는 텍스트가 아니라 이미지 자체가 복사되는데, 텍스트를 얻고자 할 때 쓰는 것이지요.
C# tesseract를 통해 OCR 만들어보기
C# tesseract 참조를 통해 OCR을 만들어봅시다. 개발환경은 Visual Studio 2019입니다.
참조 > 우클릭 [ NuGet 패키지 관리 ] 로 이동합니다.
프로젝트 > [ NuGet 패키지 관리 ] 로 하셔도 됩니다. (도구 > 패키지 매니저 콘솔) 로 하셔도 된답니다.
tesseract 를 검색해 주세요. [ tesseract / charlesw ] 를 설치합니다. tesseract 에 대한 .NET wrapper 오픈소스입니다.
[ 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가 발생할 것입니다.
테스트 차원에서, 그림판에서 이미지 형식으로 글자를 저장해보겠습니다.
위와 같이 저장한 파일을 테서랙트 엔진으로 텍스트로 변경해보겠습니다.
첫 째 줄 사이의 띄어쓰기는 인식이 안 됐나보군요. 그래도 글자는 모두 인식이 되었답니다.
////////////////////////////////////////////////////////////////////////////////////////////////////
안녕하세요, 여러분.
감사합니다.
범상 드림.
////////////////////////////////////////////////////////////////////////////////////////////////////
아래는 예시 소스코드입니다.
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();
}