OpenCV와 PyTesseract 설치
PyTesseract 설치 전에 안정적인 개발환경을 위해서 OCR을 위한 Python 가상환경을 만들고 진행 하는것이 좋다
먼저 샘플 이미지에 tesseract-ocr을 적용하여 값이 어떻게 도출되는지 확인하였다.
(🔽 sample image)
(🔽 result)
from PIL import Image
from pytesseract import *
#테서랙트 적용
img = Image.open('./test_img.png')
text = pytesseract.image_to_string(img,lang='eng')
print(text)
결과는 예상대로 좋지 않았다.
제대로 문자인식을 하지못하는 이유: image의 수 많은 column과 row들로 인해 이들을 포함하여 문자인식을 하기 떄문이라고 생각했다.
= 행과 열을 지우는 전처리 과정 필요
(🔽 Canny edge detection을 통한 에지 검출)
(🔽 Canny edge detection을 통한 직선 검출)
(🔽 검출한 직선부분 지우기)
from pytesseract import *
import cv2
import sys
import numpy as np
# 이미지 로드
src = cv2.imread('test_img.png', cv2.IMREAD_GRAYSCALE)
# 이미지 로드 실패시 종료
if src is None:
print('Image load failed!')
sys.exit()
# 에지 검출
edges = cv2.Canny(src, 50, 150)
# 직선 성분 검출
lines = cv2.HoughLinesP(edges, 1, np.pi / 180., 180, minLineLength=50, maxLineGap=5)
# 컬러 영상으로 변경 (영상에 빨간 직선을 그리기 위해)
dst1 = cv2.cvtColor(edges, cv2.COLOR_GRAY2BGR)
dst2 = cv2.cvtColor(edges, cv2.COLOR_GRAY2BGR)
if lines is not None: # 라인 정보를 받았으면
for i in range(lines.shape[0]):
pt1 = (lines[i][0][0], lines[i][0][1]) # 시작점 좌표 x,y
pt2 = (lines[i][0][2], lines[i][0][3]) # 끝점 좌표, 가운데는 무조건 0
cv2.line(dst1, pt1, pt2, (0, 255, 0), 2, cv2.LINE_AA)
cv2.line(dst2, pt1, pt2, (0, 0, 0), 3, cv2.LINE_AA)
cv2.imshow('edges', edges)
cv2.imshow('dst1', dst1)
cv2.imshow('dst2', dst2)
cv2.waitKey()
cv2.destroyAllWindows()
이제 이렇게 전처리된 이미지에 OCR을 적용시키면
(🔽 sample image)
샘플 이미지를 보면,