반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
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
Archives
Today
Total
관리 메뉴

가끔 보자, 하늘.

윈도우에서 pytesseract 로 이미지에서 숫자 추출하기 본문

개발 이야기/DB, 데이터분석, AI

윈도우에서 pytesseract 로 이미지에서 숫자 추출하기

가온아 2020. 10. 22. 11:38

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-;;; 편하긴 하네요. 편한만큼 조심해야 할 것들이 많긴 하지만요. :)

 

 

반응형