pytesseractGoogle’s Tesseract-OCR Engine 용 래퍼입니다. (OCR : Optical Character Recognition, 광학 문자 인식)

 

이를 사용하여 이미지에서 숫자를 추출하는 과정을 정리해 보았습니다. 

 

pytesseract는 pip로 설치만 하고 끝나는 것이 아닌, 환경변수와 Tesseract-OCR의 별도 빌드 과정이 필요합니다. 

 

tesseract-ocr.github.io/tessdoc/Home.html 문서를 참고하여 빌드 후 설치합니다.

 

그리고 "고급 시스템 설정" -> "환경 변수" 에서 시스템 변수 혹은 사용자 변수에 "TESSDATA_PREFIX"라는 변수 이름으로 tesseract가 설치된 위치에 포함된 tessdata 의 전체 경로를 넣어준 후 시스템을 재시작합니다. 이는 윈도우에서는 pytesseract가 해당 시스템에 설치된 tesseract.exe를 실행하는 이때 언어 데이터를 TESSDATA_PREFIX에 설정된 경로에서 읽어오는데, 이를 위해 필요한 설정입니다.

 

추후 tessdata에는 github.com/tesseract-ocr/tessdata 에서 인식을 원하는 언어 데이터를 다운받아 삽입 후 사용할 수 있습니다. 

 

설치 과정이 끝났다는 가정하에 관련 샘플 코드를 작성해 보겠습니다. 

 

아래 샘플 코드는 화면의 특정 영역을 캡쳐하여 해당 영역에 포함된 텍스트 중 숫자만 추출하는 작업을 하는 코드입니다.

from PIL import ImageGrab # 화면의 특정 영역을 이미지로 캡쳐할 때 사용합니다.
from pytesseract import *
pytesseract.tesseract_cmd = "C:\\Program Files (x86)\\Tesseract-OCR\\tesseract.exe" # 설치한 경로를 설정하세요.


def readDigitFromScreen(_rect):
    img = ImageGrab.grab(_rect) # 화면 중 _rect 영역을 이미지로 캡쳐합니다.
    
    digit=''
    try:
        text = image_to_string(img, lang='eng')
        numlist = re.findall("\d", text) # 문자를 한 자씩 확인하며 숫자만을 뽑아옵니다. 한번에 뽑고 싶다면 "\d+" 옵션을 사용하세요.
        for num in numlist:
            digit += num # 숫자는 문자열 형태로 numlist에 저장되니 이를 digit에 묶어줍니다.
    except TesseractNotFoundError: # Tesseract-OCR를 설치하지 않았다면 에러를 발생하고 종료합니다.
        print("you need to install Tesseract-OCR on your system")
        
    return int(digit) # digit에 string 형태로 정리된 문자를 integer로 변환하여 돌려줍니다.

 

최근 툴 제작에는 Python을 공부하면서 사용하고 있는데 C++로 제작할 때 생각하면 ... -0-;;; 편하긴 하네요. 편한만큼 조심해야 할 것들이 많긴 하지만요. :)

 

 

테스트 용 툴 제작하다 재밌어 보여서 동영상만 공개해 봅니다. 

 

Amazon Polly : aws.amazon.com/ko/polly/ , docs.aws.amazon.com/ko_kr/polly/latest/dg/API_Reference.html , pypi.org/project/boto3/

Google Translate API : pypi.org/project/googletrans/

 

엑셀 문서에 한글을 등록한 후 툴에서 오픈해 번역하고 싶은 언어를 추가 후 번역을 시도하면,

Google Translate API로 텍스트로 번역을 하고, Amazon Polly로 음성 파일을 만들어 저장합니다. 

해당 셀을 선택하면 음성 파일을 들을 수 있습니다.

 

 

 

자주 사용하는 툴들을 PyCharm에 External Tools에 연동하는 절차와 사용법을 기록합니다.

 

PyQt5 : pypi.org/project/PyQt5/

Qt Designer : pypi.org/project/PySide2/

PyUIC5 : pypi.org/project/pyqt5-tools/

PyInstaller : pypi.org/project/pyinstaller/

 

아래 내용은 PyCharm 2020.2.x, Python 3.8x와 Windows 10에서 진행된 내용입니다.

 

Qt Designer

Qt Designer는 Window를 디자인하기 위한 툴 입니다. 

 

PySid2를 설치하면 C:\Users\YOURNAME\AppData\Local\Programs\Python\Python38\Lib\site-packages\PySide2 에 설치됩니다.  (YOURNAME는 사용하는 계정으로 바꿔주세요.)

 

File -> Settings -> Tools -> External Tools 에서 + 아이콘을 눌러 툴을 설정합니다. 

 

Name에 "Qt Designer" 입력

Program에 C:\Users\YOURNAME\AppData\Local\Programs\Python\Python38\Lib\site-packages\PySide2\designer.exe 입력

Arguments에 $FilePath$ 입력

Working directory에 $ProjectFileDir$ 를 입력

 

등록이 완료되면 Tools -> External Tools 메뉴에서 Qt Designer를 확인할 수 있습니다. 

 

PyUIC5 

Qt Designer로 제작된 .ui 파일을 .py 파일로 변환해주는 툴입니다.

 

File -> Settings -> Tools -> External Tools 에서 + 아이콘을 눌러 툴을 설정합니다. 

 

Name에 "Ui2Py" 입력

Program에 C:\Users\YOURNAME\AppData\Local\Programs\Python\Python38\Scripts\pyuic5.exe 입력 (YOURNAME는 사용하는 계정으로 바꿔주세요.)

Arguments에 $FileName$ -o $FileNameWithoutExtension$.py 입력

Working directory에 $ProjectFileDir$ 를 입력

UI 파일을 열고 마우스 우측 버튼을 눌러 External Tools 메뉴에서 Ui2Py를 선택하면 ui파일을 py 파일로 변환합니다.

 

PyInstaller 

프로젝트를 단독으로 실행 가능한 파일로 만들어주는 툴입니다. 

 

File -> Settings -> Tools -> External Tools 에서 + 아이콘을 눌러 툴을 설정합니다. 

 

Name에 "PyInstaller" 입력

Program에 C:\Users\YOURNAME\AppData\Local\Programs\Python\Python38\Scripts\pyinstaller.exe 입력 (YOURNAME는 사용하는 계정으로 바꿔주세요.)

Arguments에 --onefile --windowed $FilePath$ 입력 (콘솔 응용 프로그램일 경우 --windowed 옵션을 삭제하시면 됩니다.)

Working directory에 $ProjectFileDir$ 를 입력

등록이 완료되면 Tools -> External Tools 메뉴에서 PyInstaller를 선택해 실행하면 빌드가 진행됩니다. 빌드 후 프로젝트 폴더에 dist 폴더가 생성되고 그 안에 실행 가능한 파일이 생성됩니다. 

 

프로젝트에 어떤 모듈을 설치했는지에 따라 간혹 "Failed to execute script ... " 라는 에러 메세지가 뜨면서 실행되지 않는 경우가 발생할 수 있습니다. 

 

이때는 --windowed 옵션을 제거 후 터미널 화면에서 실행해보면 어떤 모듈을 찾을 수 없어 실행이 안되는지 확인이 가능합니다.

 

이 문제가 발생하는 이유는 PyCharm의 경우 빌드환경을 툴에서 프로젝트 별로 운영하기 때문인데, 이는 해당 프로젝트에 venv로 시작하는 폴더명이 있는 것을 통해 알 수 있습니다. 

 

PyCharm에서 프로젝트를 만들면 기본적인 venv 폴더를 만들어 운영하며, 프로젝트에 설치한 모든 모듈들은 해당 프로젝트에만 종속적으로 설치됩니다. 설치 위치는 해당프로젝트폴더\venv\Lib\site-packages 입니다.

 

pyinstaller는 기본 설치 환경인 C:\Users\YOURNAME\AppData\Local\Programs\Python\Python38\Lib\site-packages 에서 모듈을 찾아 프로젝트에 포함시키기 때문에 PyCharm에서 프로젝트에 종속적으로 설치된 모듈의 경우는 찾을 수 없습니다. 

 

이를 해결하기 위해서는 터미널에서 다시 한번 관련 모듈을 설치한 후 재빌드하면 문제가 해결됩니다.

 

 

PyCharm 2020.1.x 이후 버전에 Packages 설치를 위한 저장소 설정에 문제가 있는지 패키지 리스트가 보이지 않네요.

 

찾아보니 daumkakao에서 저장소를 제공해서 pip 의 저장소 설정 변경 방법을 정리해 둡니다. 

 

저장소가 http로 되어 있어 몇 가지 세팅이 필요합니다.

 

 

우선 File -> Settings -> Project:your_project_name -> Project Interpreter 에서 '+' 기호를 누른 후 패키지 리스트가 잘 나오면 그냥 설치하시면 됩니다. ^^

 

만약 패키지 리스트가 안보인다면 하단의 "Manage Repositories"를 눌러 설정된 저장소를 삭제 후 "http://ftp.daumkakao.com/pypi/simple/"를 추가해 주세요.

이제 아래와 같은 패키지 리스크를 보실 수 있습니다. 그런데 저장소가 https가 아닌 http라서 trusted-host 옵션을 별도로 설정해야 설치가 가능합니다. 

 

원하는 패키지를 선택 후 우측 하단의 "Options" 버튼을 눌러 활성화 후 --trusted-host ftp.daumkakao.com 을 입력 후 인스톨 버튼을 누르시면 원하는 패키지를 정상적으로 설치하실 수 있습니다. 

(https는 아직 지원하지 않는 듯 하네요. 불편하지만 그래도 지원해줘서 무한 감사할 따름입니다. ^^)

 

+ Recent posts