이미지에서 텍스트를 추출하는 OCR, 만들어보기

    올해에는 단연코 ChatGPT 열풍이라 할 수 있겠지만, 올해 비록 영상 조작 논란으로 말이 많지만 멀티모달의 가능성을 열어주고, 앞으로 무궁무진한 서비스가 열릴 것으로 예상되는 구글의 제미나이(Gemini) 서비스로 인해서 자연어처리(NLP)라는 항목을 벗어나 멀티모달의 영역으로 갈 것이라 예상이 된다.

     

    블로그에서 유튜브로 넘어가듯, ChatGPT에서 영상처리로 가는 것은 필연적일 것이며 집에 있는 카메라등과 스피커 등을 통해서 앞으로 수많은 의사소통이 이루어지지 않을까 예상된다. 우선 OCR을 Tesseract를 사용하여 만든적(정확히는 사용한적)이 있긴 하지만, 블로그에 정리를 한적이 없는 것 같아서 이렇게 포스팅 하도록 한다.

     

    이미지에서 텍스트를 추출하는 OCR, 만들어보기


    OCR(Optical Character Recognition)이란?

    OCR은 광학문자 인식(Optical Character Recognition) 이라는 의미로, 이미지에서 텍스트를 인식하고 추출하는 기술을 말하며, 스캔한 문서, 사진 속 텍스트, 손으로 쓴 글씨 등을 디지털 텍스트 형태로 변환을 시킨다.

     

    OCR의 원리는 이미지를 우선 스캔하고, 스캔된 이미지에서 텍스트와 비텍스트를 구분하며, 텍스트의 경우 문자 인식 알고리즘으로 알파벳, 숫자, 한글 등으로 인식을 하게 된다. 여기에 추가적으로 문맥 분석이라는 것을 이용하여 단어와 문장의 문맥을 파악하여 정확도를 높이는 작업등을 보강할 수 있다.

     

     

    OCR 만들어보기

    Python으로 만들 것이며, OCR 역시 학습이라는 과정을 통해 만들어진 모델이 필요하다. 즉, OCR 역시 일반적으로는 머신러닝이기 때문에 다른 언어로 만들 생각은 일단 하지 못했다.

     

    Python은 대표적으로 구글의 Tesseract-OCR 엔진의 pytesseract라는 라이브러리를 사용하여 만드는 것이 보편적이다.

     

    Tesseract 약력

    Tesseract는 원래 1985년부터 1994년까지 영국 브리스톨의 Hewlett-Packard Laboratories와 미국 Greeley 콜로라도의 Hewlett-Packard Co에서 개발되었으며, 1996년에 Windows로 이식하기 위해 몇 가지 추가 변경이 이루어졌고, 1998년에 일부 C++화되었습니다. 2005년 Tesseract HP에서 오픈소스로 공개했습니다. 2006년부터 2018년 11월까지 Google에서 개발했습니다.
    메이저 버전 5는 현재 안정적인 버전이며 2021년 11월 30일 릴리스 5.0.0 으로 시작되었습니다. 최신 마이너 버전과 버그 수정 버전은 GitHub 에서 사용할 수 있습니다 .

     

    라이브러리 설치

    (kogpt) D:\Project\steel\python>pip install Pillow
    Requirement already satisfied: Pillow in d:\anaconda3\envs\kogpt\lib\site-packages (9.4.0)
    
    (kogpt) D:\Project\steel\python>pip install pytesseract
    Collecting pytesseract
      Downloading pytesseract-0.3.10-py3-none-any.whl (14 kB)
    Requirement already satisfied: packaging>=21.3 in d:\anaconda3\envs\kogpt\lib\site-packages (from pytesseract) (23.0)
    Requirement already satisfied: Pillow>=8.0.0 in d:\anaconda3\envs\kogpt\lib\site-packages (from pytesseract) (9.4.0)
    Installing collected packages: pytesseract
    Successfully installed pytesseract-0.3.10

     

    우선 사용하기 위해서는 파이썬 이미지 라이브러리인 Pillow를 설치 한 후, Pytesseract 역시 설치를 한다.

     

     

    Tesseract OCR 엔진 설치

    라이브러리를 모두 설치하였다면, 이제 엔진을 설치해야 하는데 윈도우에서 작업을 하는 사람은 Tesseract GitHub로 검색을 하거나 아래 링크로 접속한 후 설치 프로그램을 받는다

     

     

    Home

    Tesseract Open Source OCR Engine (main repository) - UB-Mannheim/tesseract

    github.com

     

     

     

     

    위와 같이 tesseract-ocr-w64-setup-x.x.x.x.exe 파일을 다운로드 한 후, 실행을 시킨다

     

    컴포넌츠 선택(사실상 언어)

     

     

    설치 후, Next를 누르다보면, 컴포넌츠를 설치하는 스텝이 나오는데 원래는 한국어만 체크하는게 나을지 모르겠지만 일단 모든 언어를 모두 선택하였다.

     

    설치 진행중

     

     

    누구는 오래 걸렸다 이야기를 하였지만, 1분안에 모두 설치가 되었다. 

     

    Tesseract 설치 확인

    설치 위치는 C:/Program Files/Tesseract-OCR에 설치가 되었고, 설치가 제대로 되었는지 확인을 위해서 아래와 같이 쉘 명령어를 날렸다.

     

    C:\Program Files\Tesseract-OCR>tesseract
    Usage:
      tesseract --help | --help-extra | --version
      tesseract --list-langs
      tesseract imagename outputbase [options...] [configfile...]
    
    OCR options:
      -l LANG[+LANG]        Specify language(s) used for OCR.
    NOTE: These options must occur before any configfile.
    
    Single options:
      --help                Show this help message.
      --help-extra          Show extra help for advanced users.
      --version             Show version information.
      --list-langs          List available languages for tesseract engine.
    
    C:\Program Files\Tesseract-OCR>tesseract --version
    tesseract v5.3.3.20231005
     leptonica-1.83.1
      libgif 5.2.1 : libjpeg 8d (libjpeg-turbo 2.1.4) : libpng 1.6.40 : libtiff 4.6.0 : zlib 1.2.13 : libwebp 1.3.2 : libopenjp2 2.5.0
     Found AVX2
     Found AVX
     Found FMA
     Found SSE4.1
     Found libarchive 3.7.2 zlib/1.3 liblzma/5.4.4 bz2lib/1.0.8 liblz4/1.9.4 libzstd/1.5.5
     Found libcurl/8.3.0 Schannel zlib/1.3 brotli/1.1.0 zstd/1.5.5 libidn2/2.3.4 libpsl/0.21.2 (+libidn2/2.3.3) libssh2/1.11.0
    
    C:\Program Files\Tesseract-OCR>

     

    테서렉트 버전은 5.3.3 이며 최신 빌드는 2023년 10월 5일자로 제대로 실행이 되는 것을 확인 하였으니, 이제 Tesseract를 어디서든 사용하기 위해서 환경 변수 설정을 하도록 한다.

     

     

    환경 변수 설정

     

     

    윈도우 실행 칸에서 "시스템 환경" 까지만 입력하면, 위와 같이 시스템 환경 변수 편집 어플리케이션이 뜨는데 해당 앱을 실행한다.

     

     

     

    고급 탭으로 이동한 후, 하단에 있는 환경 변수 메뉴를 선택한다.

     

     

     

    시스템 변수 영역에서 변수값이 Path로 되어 있는 것을 선택한 후, "편집" 버튼을 선택한다.

     

     

     

    수많은 환경 변수값이 있을텐데, 여기서 새로 만들기를 누른 후, 테서렉트 OCR 엔진이 설치된 폴더 풀패스를 입력한다.

    입력이 완료되었다면, 확인, 확인, 확인 등을 해서 모두 창을 닫는다.

     

     

    윈도우에서 CMD 창을 열고, tesseract 를 실행하였을 때 위와 같이 어느 곳에서든 실행이 되면 환경 변수가 정상적으로 입력이 된 상태이다.

     

     

    Python에서 OCR 실행, 코드

    테서렉트 라이브러리도 설치를 하였고, 테서렉트 엔진인 Tesseract-OCR 을 설치 완료하였다면, 이제 파이썬으로 실행을 해보도록 한다.

     

    from PIL import Image
    import pytesseract
    
    # 이미지 파일 위치
    image_path = 'C:/Project/ocr/20231214_142722.jpg'
    
    # 이미지 로드
    image = Image.open(image_path)
    
    # 테서렉트를 사용하여 OCR 수행 (한글+영어)
    text = pytesseract.image_to_string(image, lang='kor+eng')
    
    # 추출된 텍스트 출력
    print(text)

     

    설치 기간의 긴 것과 달리 실행은 매우 심플한데, OCR 추출을 위해 현재 가지고 있는 명함으로 테스트를 해보니

     

    파트장을 wey로 인식하거나, LAB을 L 4&8로 인식하는 문제만 있을 뿐 나머지 정보는 완벽히 추출이 되었다. 아무래도 이건 폰트 탓으로 생각이 되는데, 추가 학습이 가능한 구조이다보니 추가 학습으로 대응을 할 것인지 잘못 추출된 문자를 기반으로 변형 시킬 것인지는 고민을 해봐야 될 것 같다.

    댓글

    Designed by JB FACTORY