이미지에 있는 문자를 문자열로 반환하는 코드를 파이썬으로 짜보도록 하자.
OCR은 Optical Character Recognition의 약자로 사람이 쓰거나 기계로 인쇄한 문자의 영상을 이미지 스캐너로 획득하여 기계가 읽을 수 있는 문자로 변환하는 것을 뜻한다.
오늘 파이썬에서 사용할 라이브러리는 pytesseract이다.
테서랙트(Tesseract)는 다양한 운영 체제를 위한 광학 문자 인식 엔진이다. 이 소프트웨어는 Apache License, 버전 2.0,에 따라 배포되는 무료 소프트웨어이며 2006년부터 Google에서 개발을 후원했다.
Colab을 사용할 것이고, Colab에서 기본적으로 지원되는 라이브러리가 아니기 때문에 설치가 필요하다.
Colab이 아니라 PC에서 작업 중이라면 코드 내용이 다를 수 있으니 다른 블로그를 참고하자.
그냥 빨리 해보고 싶다면 이 글을 보고 따라해보자.
tesseract 설치는 설치는 아래 링크를 보고 따라하면 된다.
나머지 라이브러리들은 colab에 기본 설치가 되어있으므로 따로 설치할 필요가 없다.
[딥러닝 첫걸음] Colab에서 tesseract-ocr 라이브러리 사용하려면
설치가 완료됐다면 아래 숫자를 읽어주는 코드를 짜보겠다. (복붙해보겠다.)
필요한 라이브러리들을 불러온다.
pytesseract, OpenCV(cv2), os, PIL, 그리고 코랩에서 cv2 imshow를 하기 위한 녀석까지 불러들인다.
import pytesseract
import cv2
import os
from PIL import Image
from google.colab.patches import cv2_imshow
colab에서 cv2_imshow를 써야되는 이유는 여기를 참고하자.
#이미지를 불러와 gray 스케일로 변환해 준다.
image = cv2.imread('number.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#pytesseract에서는 numpy array를 읽지 못하고 file을 읽기 때문에 os로 파일을 불러들여야 한다.
filename = "{}.png".format(os.getpid())
cv2.imwrite(filename, gray)
#pytesseract의 image to string을 써준다.
#숫자니까 lang = 'None'으로
text = pytesseract.image_to_string(Image.open(filename), lang = None)
os.remove(filename)
#결과를 보자.
print(text)
cv2_imshow(image)
이렇게 숫자를 읽어버렸다. 참 쉽죠!!!!
뿌듯뿌듯.
더 자세히 알고 싶은가?
Pytesseract 공식 도큐먼트 내용을 한글로 가져와봤다. 아래를 참고하자.
pytesseract
Python-tesseract는 Python 용 광학 문자 인식 (OCR) 도구입니다. 즉, 이미지에 포함 된 텍스트를 인식하고 "읽습니다".
Python-tesseract는 Google의 Tesseract-OCR Engine 용 Wrapper 입니다 . 또한 jpeg, png, gif, bmp, tiff 등을 포함하여 Pillow 및 Leptonica 이미징 라이브러리에서 지원하는 모든 이미지 유형을 읽을 수 있으므로 tesseract에 대한 독립 실행 형 호출 스크립트로도 유용합니다. 또한 스크립트로 사용되는 경우 Python-tesseract는 인식 된 텍스트를 파일에 쓰는 대신 인쇄합니다.
기능
- get_languages Tesseract OCR에서 현재 지원하는 모든 언어를 반환합니다.
- get_tesseract_version 시스템에 설치된 Tesseract 버전을 반환합니다.
- image_to_string Tesseract OCR 처리에서 수정되지 않은 출력을 문자열로 반환합니다.
- image_to_boxes 인식 된 문자와 해당 상자 경계를 포함하는 결과를 반환합니다.
- image_to_data 상자 경계, 신뢰도 및 기타 정보가 포함 된 결과를 반환합니다. Tesseract 3.05 이상이 필요합니다. 자세한 내용은 Tesseract TSV 문서 를 확인하십시오.
- image_to_osd 방향 및 스크립트 감지에 대한 정보가 포함 된 결과를 반환합니다.
- image_to_alto_xml Tesseract의 ALTO XML 형식의 형식으로 결과를 반환합니다.
- run_and_get_output Tesseract OCR에서 원시 출력을 반환합니다. tesseract로 전송되는 매개 변수를 좀 더 제어 할 수 있습니다.
매개 변수
image_to_data (image, lang = None, config = '', nice = 0,
output_type = Output.STRING, timeout = 0, pandas_config = None)
- image 객체 또는 문자열-Tesseract에서 처리 할 이미지의 PIL 이미지 / NumPy 배열 또는 파일 경로입니다. 파일 경로 대신 객체를 전달하면 pytesseract는 암시 적으로 이미지를 RGB 모드 로 변환 합니다 .
- lang String-Tesseract 언어 코드 문자열입니다. 지정되지 않은 경우 기본값은 eng입니다 ! 여러 언어의 예 : lang = 'eng + fra'
- config String- pytesseract 함수를 통해 사용할 수없는 추가 사용자 지정 구성 플래그 입니다. 예 : config = '-psm 6'
- nice Integer-Tesseract 실행에 대한 프로세서 우선 순위를 수정합니다. Windows에서는 지원되지 않습니다. Nice는 유닉스와 유사한 프로세스의 우수성을 조정합니다.
- output_type 클래스 속성-출력 유형을 지정하며 기본값은 string 입니다. 지원되는 모든 유형의 전체 목록은 pytesseract.Output 클래스 의 정의를 확인하세요 .
- timeout Integer 또는 Float-OCR 처리를위한 기간 (초). 그 후 pytesseract가 종료되고 RuntimeError가 발생합니다.
- pandas_config Dict- Output.DATAFRAME 유형 에만 해당됩니다 . pandas.read_csv에 대한 사용자 지정 인수가있는 사전 . image_to_data 의 출력을 사용자 정의 할 수 있습니다 .
CLI 사용법 :
$ ( env ) > pytesseract [ -l lang ] image_file
원본 링크는 여기
그 외 옵션
명령어 창에 아래와 같이 쳐보자. 매우 다양한 옵션들이 보인다.
단순 OCR 뿐 아니라, LSTM engine을 조합하고, OSD 만쓴다거나 한글자만 읽는다는 등 많은 옵션이 있다. 잘 활용해야 할 듯.
!tesseract --help-extra
OCR options:
--tessdata-dir PATH Specify the location of tessdata path.
--user-words PATH Specify the location of user words file.
--user-patterns PATH Specify the location of user patterns file.
-l LANG[+LANG] Specify language(s) used for OCR.
-c VAR=VALUE Set value for config variables.
Multiple -c arguments are allowed.
--psm NUM Specify page segmentation mode.
--oem NUM Specify OCR Engine mode.
NOTE: These options must occur before any configfile.
Page segmentation modes:
0 Orientation and script detection (OSD) only.
1 Automatic page segmentation with OSD.
2 Automatic page segmentation, but no OSD, or OCR.
3 Fully automatic page segmentation, but no OSD. (Default)
4 Assume a single column of text of variable sizes.
5 Assume a single uniform block of vertically aligned text.
6 Assume a single uniform block of text.
7 Treat the image as a single text line.
8 Treat the image as a single word.
9 Treat the image as a single word in a circle.
10 Treat the image as a single character.
11 Sparse text. Find as much text as possible in no particular order.
12 Sparse text with OSD.
13 Raw line. Treat the image as a single text line,
bypassing hacks that are Tesseract-specific.
OCR Engine modes: (see https://github.com/tesseract-ocr/tesseract/wiki#linux)
0 Legacy engine only.
1 Neural nets LSTM engine only.
2 Legacy + LSTM engines.
3 Default, based on what is available.
Single options:
-h, --help Show minimal help message.
--help-extra Show extra help for advanced users.
--help-psm Show page segmentation modes.
--help-oem Show OCR Engine modes.
-v, --version Show version information.
--list-langs List available languages for tesseract engine.
--print-parameters Print tesseract parameters.
하나하나 재료가 모아지는 기분이다.
계속 해 나가자.
'개발 이야기 > 머신러닝, 딥러닝' 카테고리의 다른 글
[딥러닝 첫걸음] Object Detection 모델의 성능평가 방법 mAP(mean average precision) 쉽게 쉽게 알아보자 (1) | 2021.05.03 |
---|---|
[딥러닝 첫걸음] OpenCV - dilate, erode (수학적 형태학) 쉽게 이해하고 넘어가기 (0) | 2021.03.11 |
[딥러닝 첫걸음] Colab에서 tesseract-ocr 라이브러리 사용하려면 (0) | 2021.03.11 |
[딥러닝 첫걸음] Colab, Jupyter notebook에서 PIL 명령어 show로는 이미지가 안열리는 현상 해결 (2) | 2021.03.10 |
[딥러닝 첫걸음] Matplotlib 데이터 시각화 공부하기 (0) | 2021.03.09 |
댓글