CS/컴퓨터비전

[Tesseract] Tesseract 설치 및 예제

nowkoes 2023. 7. 8. 15:29

Tesseract 개발 환경 구축

개요

 Tesseract이미지에서 텍스트를 인식하는 OCR (Optical Character Recognition) 엔진으로, Google에서 개발하였고 오픈 소스로 공개되어 있다. 이로 인해 개발자는 다양한 애플리케이션에 Tesseract를 활용하여 이미지 내의 텍스트를 인식하고 이를 활용할 수 있다. 이번 시간에는 window 환경에서 visual studio를 이용하여 텍스트를 추출해 보는 시간을 갖도록 하자.


설치 방법

출처: https://github.com/UB-Mannheim/tesseract/wiki

 

 다음 사이트에 들어가서 window 64 bit용 실행용 프로그램 tesseract-ocr-w64-setup 파일을 설치한 후, 실행시킨다. 여기서 한국어 지원 패키지를 설치하고 싶다면 컴포넌트를 고를 때 Additional language data 쪽의 Korean을 추가해 주면 된다.

 

 설치가 완료되었으면 커맨드 창에서 git clone 명령을 사용해서 vcpkg 패키지를 가져오고, 부트스트랩 스크립트를 실행한다. 

git clone https://github.com/microsoft/vcpkg
.\bootstrap-vcpkg.bat

 

 그리고 tesseract 라이브러리를 설치하면 된다. 설치가 생각보다 오래 걸린다. 이때 프로젝트 구성을 x64로 해야 하며, x86 환경에서 사용하고 싶다면, vcpkg install tesseract를 명령하면 된다.

vcpkg install tesseract:x64-windows

 

 그 후 vcpkg를 우리가 사용하는 visual studio와 연동하기 위해 다음 명령어를 실행하면 된다.

vcpkg integrate install


예제

출처: https://namu.wiki/w/%EA%B5%AC%EA%B8%80?from=Google

 

 설치가 완료되었으면, 간단한 이미지 파일에서 해당 사진에서 텍스트를 추출하는 예제를 작성해 보자. 

 

#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
#include <iostream>

int main()
{
    char* outText;
    tesseract::TessBaseAPI* api = new tesseract::TessBaseAPI();

    if (api->Init(NULL, "kor")) {
        std::cerr << "Could not initialize tesseract." << std::endl;
        exit(1);
    }

    Pix* image = pixRead("example.png");
    api->SetImage(image);

    outText = api->GetUTF8Text();
    std::cout << "OCR output:\n" << outText << std::endl;

    api->End();
    delete[] outText;
    pixDestroy(&image);
}

 

 이 코드는 이미지 파일 example.png에서 텍스트를 추출하고 그 결과를 출력하는 코드다. 필자는 코드를 처음 작성했을 때 다음과 같이 ./kor.traineddata 같은 트레이닝 데이터 파일을 찾을 수 없다고 떴다. 이는 Tesseract가 kor.traineddata와 같은 트레이닝 데이터 파일을 필요로 하는데, 이러한 환경 변수가 설정되어 있지 않기 때문이다. 

 

 따라서 이 문제를 해결하기 위해 TESSDTA_PREFIX 환경 변수를 설정해야 한다. 이 환경 변수는 Tessract가 언어 데이터 파일을 찾는 디렉터리를 가리킨다. 이러한 트레이닝 데이터 파일들은 Tesseract 설치 디렉터리 아래에 tessdata라는 이름의 디렉터리에 일반적으로 위치해 있다. 이 디렉터리의 경로를 찾아 환경 변수에 설정해야 한다. 

 

 

 먼저 제어판에서 고급 시스템 설정으로 이동하여 다음 환경 변수 버튼을 클릭하자.

 

 

 여기서 변수 이름에 TESSDATA_PREFIX를 입력하고, 변수 값에 tessdata 디렉터리의 절대 경로를 입력한다.

 

 

 그리고 Tesseract의 Github 저장소에서 직접 언어 데이터 파일을 다운로드하여 tessdata 디렉터리에 설치해 준다. 

 

 

 만약 코드를 실행했을 때 한글이 깨져 보인다면 UTF-8 인코딩 설정이 되어있지 않은 것이므로, 다음과 같은 코드를 추가하면 된다.

 

#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
#include <iostream>
#include <string>
#include <windows.h>

int main()
{
    SetConsoleOutputCP(CP_UTF8); // 추가된 부분
    setvbuf(stdout, nullptr, _IOFBF, 1000); // 추가된 부분

    char* outText;
    tesseract::TessBaseAPI* api = new tesseract::TessBaseAPI();

    if (api->Init(NULL, "kor")) {
        std::cerr << "Could not initialize tesseract." << std::endl;
        exit(1);
    }

    Pix* image = pixRead("example.png");
    api->SetImage(image);

    outText = api->GetUTF8Text();
    std::cout << "OCR output:\n" << outText << std::endl;

    api->End();
    delete[] outText;
    pixDestroy(&image);
}

 

 텍스트에서 공백이 원활하게 출력되지 않는 것은 Tesseract가 한글을 처리하는 데 있어 조금 더 정밀한 설정을 요구하기 때문이다. 이번 시간에는 텍스트를 인식하는 것을 목표로 하였으니 이러한 세팅에 대해서는 다음시간에 알아보도록 하자.

반응형