pyocr.builders.LineBoxBuilder를 사용해서 문자 인식(tool.image_to_string) 한 결과는 행 단위로 인식한 문자와 그에 대응하는 이미지 영역의 위치 정보를 포함하고 있습니다. 이 영역의 위치 정보를 가지고 원래의 이미지에 사각형 라인을 표시하면 이미지의 어떤 영역을 문자 인식했는지 알 수 있습니다. 이 글에서는 LineBoxBuilder의 이해를 돕기 위해 간단한 샘플 프로그램을 작성, 시연해 보겠습니다.
Tesseract 설치하기, PyOCR 설치하기는 이전 글 python PyOCR 문자 인식 프로그램 작성 DigitBuilder를 참조 하십시오.
샘플 프로그램 작성
한글 문자 인식 프로그램을 테스트하기 위한 오른쪽 이미지를 test_kor.png이름으로 로컬 드라이브 (예:C:¥testocr¥test_kor.png)에 저장합니다.
다음 소스를 드라이브 (예:C:¥testocr¥testocr_kor_line.py)에 저장합니다.
소스 내용 설명
- 10-11행 : testocr_kor_line.py가 저장되어있는 디렉토리를 현재 작업 디렉토리로 변경합니다. 자세한 설명은 python 프로그램 .py파일 경로로 현재 작업 디렉토리 변경하기를 참조 하십시오
- 13-15행 : “C:\\Program Files\\Tesseract-OCR”가 시스템 환경 변수 %PATH%에 등록되어 있지 않다면 추가 합니다.
- 17-22행 : Tesseract-ocr의 설치에서 문제가 발생했거나 시스템 환경 변수 %PATH%에 설치 경로가 추가 되어있지 않았다면 “OCR tool is not found in path(Tesseract-ocr의 설치 경로)” 메시지를 출력하고 프로그램이 에러 종료됩니다. 그렇지 않다면 OCR tool을 취득해 다음으로 진행합니다.
- 24-30행 : test_kor.png 이미지 파일을 읽고 LineBoxBuilder(행 단위로 문자 인식)를 사용해 ‘kor’ 문자로 변환합니다.
- 32행 : 행 단위 문자 인식 영역에 사각형 라인을 표시할 이미지를 메모리로 배치합니다.
- 34행 : 행 단위 문자 인식 결과를 저장할 editor 리스트(배열)을 선언합니다.
- 35행 : 줄 바꿈을 위한 변수를 선언합니다.
- 37행 : 행 단위 문자 인식 영역의 좌표를 화면에 출력합니다. 형식은 (왼쪽 상단의(x, y), 오른쪽 하단의(x, y)) 와 같습니다.
- 38-40행 : 행 단위 문자 인식 결과는 줄 바꿈을 고려하지 않습니다. 그래서 행 단위 문자 인식 영역 좌표의 오른쪽 하단 y축 위치가 일정 폭 이상 커진다면 줄 바꿈 하도록 하고 있습니다. 줄 바꿈 코드를 editor 리스트(배열)에 추가합니다.
- 41행 : 행 단위 문자 인식 결과를 editor 리스트(배열)에 추가 합니다.
- 42행 : 행 단위 문자 인식 영역을 cv2.rectangle사용하여 Green (0, 255, 0)색 과 선 굵기 1로 사각형 선을 만듭니다.
- 44행 : 행 단위 문자 인식 결과는 editor 리스트(배열)에 행 별로 저장됩니다. join를 사용해 연결된 문자열로 변경합니다. 그리고 일본어는 띄어쓰기가 없기 때문에 replace를 사용해 모든 공백을 삭제합니다.
- 46행 : 문자 인식의 행 단위 영역을 사각형 라인으로 표시한 이미지를 화면에 표시합니다.
표시 결과는 오른쪽 화면과 같습니다. - 47-48행 :아무 키나 누르면 이미지를 닫습니다.
실행 및 결과 확인
다음과 같이 python 또는 py 명령을 실행하여 그 결과를 화면에 출력합니다. 물론 100%의 인식율은 기대하기 어렵습니다.
C:¥testocr>python testocr_kor_line.py
((20, 26), (939, 51))
((21, 68), (939, 95))
((21, 110), (680, 135))
((21, 194), (939, 221))
((21, 236), (937, 263))
((21, 278), (752, 303))
교육부와시도교육청은'코로나19'감염예방및확산방지를위해온국민이힘을모으는
가운데,유아,학생과교직원의건강과안전을최우선적으로보호하기위해2020학년도
개학을3월2일에서3월9일로1주일연기하기로결정하였습니다.
이에따라맞벌이가정등가정내에서돌봄이어려운유치원,초등학교,특수학교학생들
대상으로긴급하게돌봄수요가있는경우,코로나19감염병예방관련위생수칙준수및
시설방역강화등을통해안전한환경에서긴급돌봄을제공하고자합니다.