python에서 tesseract 사용하기

2020. 4. 25. 21:27일상

그제 tesseract을 통해 사진에서 글 추출에 성공했고

오늘은 python에서 tesseract를 사용하여 한 폴더 내의 사진 파일을 계속해서 추출하여 한 문서에 저장하는 것이 목표다

 

import pytesseract
from PIL import Image

#시작 시 사진 시작, 끝 번호 입력받기
startNum = int(input("시작 번호는? : "))
endNum = int(input("끝 번호는? : "))

totalNum = endNum - startNum + 1
#전체 사진 수만큼 반복
num = []
for i in range(0,totalNum, 1):
    num.append(startNum + i)
    #밑 " "에 사진이 저장되어 있는 주소 삽입.
    path = "c:\\Users\\hi\\autopic\\num{}.jpg".format(num[i])

    pytesseract.pytesseract.tesseract_cmd = r"C:\\Program Files\\Tesseract-OCR\\tesseract.exe"

    img = Image.open(path)

    #이미지에서 글 뽑아내기
    text = pytesseract.image_to_string(img, lang='eng', config='--psm 1')

	#파일로 저장하기
    f = open('c:\\Users\\hi\\autopic\\output.txt', mode ='a', encoding = 'utf-8')

	#output.txt에 계속해서 저장하기 단 N.4처럼 번호를 붙여 구분하기
    print("\n\nN.{}\n".format(num[i])+text, file = f)

    f.close()

그래서 이렇게 썼다.

약 4시간 정도 소요됐다... 파이썬 분명히 특강으로 들었는데..

 

저거 하는 와중에 생겼던 오류들

1. FileNotFoundError: [Errno 2] No such file or directory:

뜻은 사진이나 디렉터리 저장되어 있는 주소 삽입할 때 자꾸 참고할 사진이 없음

이 코드 쓰는데 난리 났었다

path = "c:\\Users\\hi\\autopic\\num{}.jpg".format(num[i])

해결하는 방법으로는.. 

첫 번째. 정확한 주소를 쓴다. 제일 쉬운 방법은 해당 사진(폴더)이 위치한 곳으로 들어가 주소창을 직접 긁는 게 편하다. 

그리고 파일의 정확한 형식을 써야 한다. 나처럼 png라고 잘못 써서 고민하고 앉아 있으면 나중에 분노가 씨게 온다.

두 번째. \을 하나만 쓰지 말고 \\ 두 개 써본다. 

세 번째. path = r"~~~"로 앞에 r을 붙여본다.

 

2. UnicodeEncodeError: 'cp949' codec can't encode ~

유니코드 오류다. 이거를 해결하기 위해서는 encoding을 utf-8로 설정해야 한다.

f = open('c:\\Users\\hi\\autopic\\output.txt', mode ='a', encoding = 'utf-8')

이것처럼 뒤에 encoding을 추가해야 한다.

 

그 외...

사실 저 1번 오류 때문에 시간 다 잡아먹었다. 나중에 내가 jpg를 png로 써서 그 난리가 난 거를 확인하자마자 쓰러질 뻔했다

 

그리고... 알고 보니 알집 pdf?를 사용하면 대량으로 OCR이 가능하다고 봤다

.....

공부했다고 치고...

'일상' 카테고리의 다른 글

tesseract 사용해보자  (0) 2020.04.23