OCR (광학문자인식, Optical Character Recognition)
- 텍스트가 포함된 이미지에서 텍스트를 인식하는 것
- 보통 과속단속 카메라로 차량 사진을 찍어 차량 번호를 인식하는 것에 사용된다
Tesseract (테서랙트)
- 다양한 운영 체제를 위한 OCR 엔진
- 유니코드(UTF-8)를 지원하며 기본적으로 100개 이상의 언어를 인식할 수 있음
- GitHub 저장소의 tessdata에서 각 언어별 학습 데이터를 다운로드 할 수 있음
https://github.com/tesseract-ocr/tessdata
#1 프로젝트 생성
Visual Studio에서 WinForm(.NET Framework) 프로젝트를 하나 생성해 주고,
다음과 같이 Form UI를 디자인해준다.
#2 NuGet Package 다운로드
NuGet Package 관리에 들어가서 Tesseract 검색 후 해당 패키지를 설치한다.
#3 tessdata 다운로드
위 Github 페이지에서 tessdata를 다운로드하여서 프로젝트 Debug 폴더에 저장해 준다.
tessdata 안의 파일들은 traineddata로 학습된 데이터이며, 파일명 앞에 각 언어들을 표시했다.
필요한 언어 학습 데이터만 다운로드하여 사용해도 된다.
영문 : eng.traineddata
한글 : kor.traineddata
중국어-간자체 : chi_sim.traineddata
#4 테스트 코드 작성
Visual Studio로 돌아와서 테스트 코드를 작성한다.
코드가 짧아서 아래 전체 코드를 첨부합니다.
Tesseract를 사용하기 위해 using 구문을 추가해 주고,
버튼 클릭 이벤트를 등록하여, 이미지 파일을 가져오고 테스트를 추출하여 텍스트박스에 입력하도록 했다.
위의 OCRprocess 함수에서 위에서 tessdata를 저장해줬던 경로 (Debug\tessdata)를 지정해 주고,
TesseractEngine을 이용하여 OCR을 실행한다.
표시된 두 번째 인자는 추출한 언어를 지정해 주는 것으로 영문은 "eng", 한글은 "kor", 중국어간자체는 "chi_sim"으로
tessdata의 학습데이터 앞의 언어 표기문을 적어주면 된다.
여러 개의 언어를 한 번에 추출하고 싶다면 "kor+eng"처럼 적어줄 수 있다.
#5 테스트
요즘 즐겨 듣는 노래인 Meghan Trainor의 Made You Look 가사를 가져와봤다.
이미지를 가져와서 OCR 한 결과를 오른쪽 텍스트박스에 뿌려주게 했는데
영문은 잘 되는 것을 볼 수 있었다.
다만, 한글과 중국어 결과는 조금 아쉬웠다.
요즘은 네이버나 파파고 등등에서 제공하는 OCR이 기능도 좋고 잘 되는데,
대부분에서 일정량 이상 사용하게 되면 유료로 기능을 제공하기 때문에
아쉬운 대로라도 Tesseract를 사용하는 것은 나쁘지 않은 것 같다.
'IT > C#' 카테고리의 다른 글
[C#] Double Trackbar User Control 만들기 (2) | 2023.01.12 |
---|---|
[C#] Form UI Control 사이즈 일괄 변경하기 FHD to UHD(4K) (0) | 2022.12.29 |
[C#] Excel Data Ctrl+C Ctrl+V to DataGridView (0) | 2022.11.17 |
[C#] ZedGraph Labeling (0) | 2022.11.17 |
[C#] Array나 List에 같은 값 또는 연속된 int 값 채우기 (feat. Enumerable Range & Repeat) (0) | 2022.10.28 |