tesseract-ocr 3.02 을 활용한 문자 인식 예제
1. OCR 이란???
광학 문자 인식(Optical Character Recognition) 위키백과 중에서...
OCR이란 인쇄된 문서나 손으로 쓴 글씨 등에서 텍스트(문자)를 추출하여 문자인식이 가능하도록 하는 기술입니다.
이미지의 해상도 및 품질에 따라 인식률이 달라지며, 세계 각국의 언어를 추출할 수 있습니다.
쉽게 말해서 이미지(그림파일)등에 있는 텍스트(문자)들을 추출하여 텍스트로 변경하는 것이라고 생각하면 됩니다.
사진출처 : http://www.athento.com/en/ocr/
2. Tesseract-ocr 컴파일을 통한 라이브러리 생성
tesseract-ocr 을 이용하여 OCR 프로젝트를 사용하기 위해서는 tesseract-ocr 라이브러리를 먼저 생성하여야 사용자 프로젝트 예제에 적용이 가능합니다.
본 과정은 tesseract-ocr 라이브러리를 생성하기 위해서 일련의 과정을 안내합니다.
tesseract-ocr은 구글 코드 홈페이지에서 다운로드 받으실 수 있습니다.
https://code.google.com/p/tesseract-ocr/
구글 코드 다운로드 페이지에서 소스코드를 별도로 다운로드 받아서 진행하는 방법과 exe 설치파일로 바이너리와 소스파일을 자동으로 다운로드받아 설치하는 방법이 있는데, 본 글에서는 exe 설치파일로 진행해 보도록 하겠습니다.
위 사진과 같이 tesseract-ocr-setup-3.02.02.exe 파일을 다운로드 받고 아래와 같이 설치를 진행합니다.
<기본 설치 경로로 설치를 진행합니다>
<개발관련 파일에 체크하고, 추가 언어 설치를 위해 하단에서 korean을 선택합니다>
<설치를 진행하면서 환경변수와 관련 라이브러리 및 추가 언어들을 자동으로 다운로드 및 설치 진행합니다>
자 설치가 완료되었으면 tesseract-ocr의 라이브러리를 컴파일하여 생성할 차례입니다. 해당 라이브러리가 있어야 프로젝트에 가져다 쓸 수 있습니다.
탐색기를 열어 설치된 경로 아래의 vs2008 프로젝트를 실행합니다. (필자는 vs2013으로 프로젝트 마이그레이션하여 진행하였습니다)
C:\Program Files (x86)\Tesseract-OCR\tesseract-ocr\vs2008\tesseract.sin
(1) 일단 먼저 솔루션 구성을 DLL_Debug에서 DLL_Release로 변경합니다.
(2) 그 다음 왼쪽 솔루션 탐색기 프로젝트에서 libtesseract302 에서 프로젝트 속성으로 들어갑시다.
(3) c/c++ - 일반 - 추가 포함 디렉터리를 아래와 같이 변경합니다.
필자의 설치경로는 C:\Program Files (x86)\Tesseract-OCR 입니다.
설치경로\tesseract-ocr\api
설치경로\tesseract-ocr\ccmain
설치경로\tesseract-ocr\ccutil
설치경로\tesseract-ocr\ccstruct
설치경로\tesseract-ocr\classify
설치경로\tesseract-ocr\cube
설치경로\tesseract-ocr\cutil
설치경로\tesseract-ocr\dict
설치경로\tesseract-ocr\image
설치경로\tesseract-ocr\neural_networks\runtime
설치경로\tesseract-ocr\textord
설치경로\tesseract-ocr\viewer
설치경로\tesseract-ocr\wordrec
.
설치경로\include
설치경로\include\leptonica
설치경로\tesseract-ocr\vs2008\port
(4) 링커 - 일반 - 추가 라이브러리 디렉터리를 아래와 같이 변경합니다.
설치경로\lib
(5) 솔루션 탐색기 프로젝트중 libtesseract302 의 source file 중 equationdetect.cpp 파일을 열고 ctrl + G에서 250 라인을 넣고 이동하여 아래와 같이 수정합니다.
수정 코드
static const STRING kCharsToEx[] = { "'", "`", ".", ",", "" };
(6) libtesseract302 프로젝트 오른쪽 마우스 메뉴에서 빌드를 눌러 컴파일을 진행합니다.
모든 컴파일이 완료되면 설치폴더\tesseract-ocr\vs2008\DLL_Release 에 libtesseract302.dll , libtesseract302.lib 파일이 생성됩니다.
3. Tesseract-ocr 프로젝트 예제 따라하기
visual studio를 열어 간단히 콘솔프로젝트로 새로운 프로젝트를 생성하고 아래와 같이 소스를 복사하여 붙혀넣습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include "stdafx.h" #include <allheaders.h> #include <baseapi.h> using namespace std; using namespace tesseract; #pragma comment(lib, "liblept168") #pragma comment(lib, "libtesseract302") int _tmain(int argc, _TCHAR* argv[]) { char *outText; // const char *path = ".\\tessdata"; TessBaseAPI *api = new TessBaseAPI(); // Initialize tesseract-ocr with English, without specifying tessdata path if (api->Init(NULL, "eng")) { fprintf(stderr, "Could not initialize tesseract.\n"); exit(1); } // Open input image with leptonica library Pix *image = pixRead("C:/a.png"); api->SetImage(image); // Get OCR result // text print outText = api->GetUTF8Text(); printf("OCR output:\n%s", outText); // text output file FILE*fp = fopen("c:\\a.txt", "wb"); fputs(outText, fp); fclose(fp); // Destroy used object and release memory api->End(); delete[] outText; pixDestroy(&image); return 0; } |
(1) 프로젝트 속성에서 c/c++ - 일반 - 추가 포함 디렉터리를 아래와 같이 변경합니다.
설치경로\tesseract-ocr\api
설치경로\tesseract-ocr\ccmain
설치경로\tesseract-ocr\ccutil
설치경로\tesseract-ocr\ccstruct
설치경로\tesseract-ocr\classify
설치경로\tesseract-ocr\cube
설치경로\tesseract-ocr\cutil
설치경로\tesseract-ocr\dict
설치경로\tesseract-ocr\image
설치경로\tesseract-ocr\neural_networks\runtime
설치경로\tesseract-ocr\textord
설치경로\tesseract-ocr\viewer
설치경로\tesseract-ocr\wordrec
.
설치경로\include
설치경로\include\leptonica
설치경로\tesseract-ocr\vs2008\port
(2) 링커 - 일반 - 추가 라이브러리 디렉터리를 아래와 같이 변경합니다.
설치경로\lib
설치경로\tesseract-ocr\vs2008\Debug_Release
프로젝트를 빌드후 실행합니다.
<테스트 이미지 파일>
<실행 결과>
<결과 파일>
참고 사이트
http://kyubuem.tistory.com/51
http://blog.secmem.org/489
'프로그래밍 언어 > C++' 카테고리의 다른 글
[VS] MSBuild.Community.Tasks.Targets 프로젝트를 찾을 수 없습니다. (0) | 2015.07.08 |
---|---|
WTL에서 ATL 단순개체 추가할 수 없는 경우 해결방법 (0) | 2015.06.27 |
[C++0x] range based for loop (0) | 2014.04.03 |
regex 정규필터식 간단 구문 예제 (0) | 2014.01.16 |
CRT의 디버그 기능으로 메모리 누수 디버깅하기 (Memory Leak) (9) | 2014.01.15 |