스케줄 관리 프로젝트 회고록

김태성·2022년 4월 13일
0
post-thumbnail

환경

OpenCV와 PyTesseract 설치
PyTesseract 설치 전에 안정적인 개발환경을 위해서 OCR을 위한 Python 가상환경을 만들고 진행 하는것이 좋다

가상환경에서 작업하는 이유와 방법

테스트 - OCR 적용해보기

먼저 샘플 이미지에 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)

샘플 이미지를 보면,

profile
@flip_404

0개의 댓글