[MFC] Windows 10 OCR 만들기 : OCR 적용하기(tesseract)

 일단 화면 구성은 아래와 같이 하였다.

왼쪽 이미지 리스트에서 파일을 선택하면 가운데 이미지가 나오고 오른쪽에 텍스트가 나오도록

그리고 아래쪽은 동작에 따른 로그를 출력할 계획이다.


우선은 프로젝트를 생성해주고 이전에 챙겨놨던 것들을 포함시켜 준다.


사실 안되는 것들때문에 이것 저것 추가하다보니 다 추가해버렸는데 이젠 모르겠다 ㅎㅎ

라이브러리들도 챙겨 넣고! 죄다 넣었다!!

 

 

Ctranslator.h


#pragma once
#include "tesseract/baseapi.h"
#include "leptonica/allheaders.h"
#include "opencv2/opencv.hpp"

class CTranslator
{
private:
    tesseract::TessBaseAPI* _Api;
    tesseract::Tesseract* m_API;

public:
    CTranslator();
    ~CTranslator();

    void CreateTesseract();
    bool Translate(cv::Mat Img, CString& strOut);
};

이왕 만드는거 클래스로 ㅋㅋ

근데 여기 C++ 소스는 배경화면이 안변하네 파이썬 소스는 뒤에 검게 변하더니...

CTranslator::CTranslator()
{
    _Api = nullptr;
    CreateTesseract();
}

생성자에서 초기화하는 함수 호출!

void CTranslator::CreateTesseract()
{
    if(_Api == nullptr)
        _Api = new tesseract::TessBaseAPI();
    
    TCHAR chFilePath[256] = { 0, };
    GetModuleFileName(NULL, chFilePath, 256);
    CString strFolderPath(chFilePath);
    CString strTemp;
    strTemp.Format(_T("%s\\%s"), strFolderPath.Left(strFolderPath.ReverseFind('\\')), _T("tessdata"));

    // Initialize tesseract-ocr with English
    //if (_Api->Init((CStringA)strTemp, "kor+eng", tesseract::OEM_LSTM_ONLY) == -1)
    if (_Api->Init((CStringA)strTemp, "kor+eng"))
    {
        AfxMessageBox(_T("Tesseract Initial ERROR"), MB_OK);
        
        delete _Api;
        _Api = nullptr;
    }
}

여기서 조심할 부분....

예제 소스에는 init 함수를 호출 시 앞에 적힌 주소가 NULL 로 되어있어서 아무 생각 없이 따라했다가 

왜 안되는지 모른채로 한참을 헤맸다.

 
 내가 잘못한건지 tessdata를 실행 폴더에 복사하고 이 경로를 넣어주니 정상적으로 동작하였다.
단 영어만...ㅡㅡ;;

아직까지 한글이 왜 안되는지 모르겠다. 초기화 할때 "kor+eng"을 넣어줘도 안되더라.

일단은 중간 결과


일단 영어는 만족할만한 인식률을 보이고 있다.
 
아래 이미지가 입력한 원본 이미지
 

가운데 이미지가 깨지는 것은 화면에 맞게 이미지를 조절하면서 이미지가 깨지는 현상이 발생하였다.

PNG 이미지는 안 깨지던데....

일단 해결해야 할 문제들이 크게 2가지가 있다.

첫째 한글 인식이 안된다는 것.

데이터 셋이 문제인가 싶어 파이썬으로 된 예제를 다른분 블로그에서 긁어와서 적용해보았는데
 
꽤나 깔끔하게 잘 인식이 되더라.....

구글링을 아무리 해도 한글 인식에 관련된 것 중 C++로 자세하게 된 건 못찾겠더라

혹시 알고 있으신 분은 댓글로 좀 남겨주시길...

둘째 이미지 깨지는 부분....

뭐 이부분은 크게 어렵진 않을듯 한데 문제는 귀차니즘 ㅎㅎ
 
시간이 나는대로 다시 인터넷을 뒤져보고 고치도록 해보자





댓글

이 블로그의 인기 게시물

[Python] 파이썬에서 Opencv를 이용해 웹캠 영상 읽어오기 및 저장

[MFC] 에디트 컨트롤에 계속 문자열 추가하기(List log)

[Python] OpenCv를 이용하여 마우스 위치 가져오기