파이썬 Tesseract - 프로젝트 설명
OCR 추출 부터 이어지는 머신러닝을 활용한 프로젝트 두번 째 포스팅 입니다.
제가 진행하는 프로젝트는 SMS로 수신되는 다양한 이미지 스팸(SPAM) 광고 문자(이미지)를 분석해서
텍스트를 분석 -> 출력 후 -> 데이터 정제 -> 기계학습 -> 데이터 확인(스팸 종류 및 여부) 확인
순서로 진행할 예정입니다.
오늘 정리 예정인 내용은 지난 시간에 이어서 Tesseract 사용 부분을 파이썬 코드로 변환해서 앞으로
연동 예정인 Pandas, Numpy 등에 대비할 예정입니다.
5회 정도의 포스팅으로 연재를 이어나갈 예정이며, 하단의 예제를 쉽게 따라하실 수 있게 정리하겠습니다.
이전 포스팅을 차근차근 읽어보시면 더욱 도움이 되실걸로 생각이 됩니다. - 관련 포스팅
Tessaract - 파이썬 설치
우선 Tessaract 를 파이썬에서 사용하기 위해서는 아래와 같은 명령어로 설치합니다.
그 전에 저번 포스팅에 설명드렸듯이 Tessaract 가 미리 설치되어 환경변수에 설정되어 있어야 합니다.
본 설정은 Windows10 (x64)에 아나콘다(Anaconda3), Python 3.6 환경에서 설정했습니다.
명령어 : pip install pillow
pip install pytesseract
아래 예제 소스는 이미지에서 한글 + 영문, 영문, 한글 등을 추출 후 콘솔에서 출력 합니다.
그 후에 해당 내용을 텍스트 파일로 저장하는 내용도 추가되어 있습니다.
ocr_to_string_blog.py
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 from PIL import Image #pip install pillowfrom pytesseract import * #pip install pytesseractimport configparserimport os #Config Parser 초기화config = configparser.ConfigParser()#Config File 읽기config.read(os.path.dirname(os.path.realpath(__file__)) + os.sep + 'envs' + os.sep + 'property.ini') #이미지 -> 문자열 추출def ocrToStr(fullPath, outTxtPath, fileName, lang='eng'): #디폴트는 영어로 추출 #이미지 경로 img = Image.open(fullPath) txtName = os.path.join(outTxtPath,fileName.split('.')[0]) #추출(이미지파일, 추출언어, 옵션) #preserve_interword_spaces : 단어 간격 옵션을 조절하면서 추출 정확도를 확인한다. #psm(페이지 세그먼트 모드 : 이미지 영역안에서 텍스트 추출 범위 모드) #psm 모드 : https://github.com/tesseract-ocr/tesseract/wiki/Command-Line-Usage outText = image_to_string(img, lang=lang, config='--psm 1 -c preserve_interword_spaces=1') print('+++ OCT Extract Result +++') print('Extract FileName ->>> : ', fileName, ' : <<<-') print('\n\n') #출력 print(outText) #추출 문자 텍스트 파일 쓰기 strToTxt(txtName, outText) #문자열 -> 텍스트파일 개별 저장def strToTxt(txtName, outText): with open(txtName + '.txt', 'w', encoding='utf-8') as f: f.write(outText) #메인 시작if __name__ == "__main__": #텍스트 파일 저장 경로 outTxtPath = os.path.dirname(os.path.realpath(__file__))+ config['Path']['OcrTxtPath'] #OCR 추출 작업 메인 for root, dirs, files in os.walk(os.path.dirname(os.path.realpath(__file__)) + config['Path']['OriImgPath']): for fname in files: fullName = os.path.join(root, fname) #한글+영어 추출(kor, eng , kor+eng) ocrToStr(fullName, outTxtPath, fname,'kor+eng') cs
- 6번 라인 : 다양한 운영체제 및 실행 환경 변경 대비 위한 configParser 임포트
- 9번 라인 : 운영체제에 맞는 패스 접근자를 활용해서 property.ini 파일 로드- 12번 라인 : 가장 중요한 이미지에서 텍스트를 출력하는 부분(주석 확인)- 32번 라인 : 텍스트 추출 후 -> 콘솔 출력 -> 텍스트 파일 저장 처리 함수- 41번 라인 : 텍스트 파일이 저장 될 경로 로드- 44번 라인 : 현재 실행 파일 기준 하위 폴더에 있는 모든 이미지를 순회하며 추출하는 반복문- 48번 라인 : 옵션 값으로 한글+영문 지정 후 OCR 시작
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | from PIL import Image #pip install pillow from pytesseract import * #pip install pytesseract import configparser import os #Config Parser 초기화 config = configparser.ConfigParser() #Config File 읽기 config.read(os.path.dirname(os.path.realpath(__file__)) + os.sep + 'envs' + os.sep + 'property.ini') #이미지 -> 문자열 추출 def ocrToStr(fullPath, outTxtPath, fileName, lang='eng'): #디폴트는 영어로 추출 #이미지 경로 img = Image.open(fullPath) txtName = os.path.join(outTxtPath,fileName.split('.')[0]) #추출(이미지파일, 추출언어, 옵션) #preserve_interword_spaces : 단어 간격 옵션을 조절하면서 추출 정확도를 확인한다. #psm(페이지 세그먼트 모드 : 이미지 영역안에서 텍스트 추출 범위 모드) #psm 모드 : https://github.com/tesseract-ocr/tesseract/wiki/Command-Line-Usage outText = image_to_string(img, lang=lang, config='--psm 1 -c preserve_interword_spaces=1') print('+++ OCT Extract Result +++') print('Extract FileName ->>> : ', fileName, ' : <<<-') print('\n\n') #출력 print(outText) #추출 문자 텍스트 파일 쓰기 strToTxt(txtName, outText) #문자열 -> 텍스트파일 개별 저장 def strToTxt(txtName, outText): with open(txtName + '.txt', 'w', encoding='utf-8') as f: f.write(outText) #메인 시작 if __name__ == "__main__": #텍스트 파일 저장 경로 outTxtPath = os.path.dirname(os.path.realpath(__file__))+ config['Path']['OcrTxtPath'] #OCR 추출 작업 메인 for root, dirs, files in os.walk(os.path.dirname(os.path.realpath(__file__)) + config['Path']['OriImgPath']): for fname in files: fullName = os.path.join(root, fname) #한글+영어 추출(kor, eng , kor+eng) ocrToStr(fullName, outTxtPath, fname,'kor+eng') | cs |
- 6번 라인 : 다양한 운영체제 및 실행 환경 변경 대비 위한 configParser 임포트
- 9번 라인 : 운영체제에 맞는 패스 접근자를 활용해서 property.ini 파일 로드
property.ini
property.ini
123456 [Bigdata Ocr Extract]Version= 1.0 [Path]OriImgPath= \\resource\\orc_ori_imageOcrTxtPath= \\resource\\ocr_result_txt cs
- 1번 라인 : 프로그램 버전 명시
- 5번 라인 : 추출 할 원본 이미지 경로- 6번 라인 : 추출 된 텍스트 파일이 저장 될 경로
1 2 3 4 5 6 | [Bigdata Ocr Extract] Version= 1.0 [Path] OriImgPath= \\resource\\orc_ori_image OcrTxtPath= \\resource\\ocr_result_txt | cs |
- 5번 라인 : 추출 할 원본 이미지 경로
파이썬 configParser 패키지의 추가적인 상세 설명은 이 곳을 참고해 주세요.
파이썬 configParser 패키지의 추가적인 상세 설명은 이 곳을 참고해 주세요.
Tessaract - OCR 이미지 텍스트 추출 테스트
실제 소스코드 실행 및 OCR 추출 화면
저번 포스팅에서 설명드린 psm, interword_spaces 등의 옵션 값 조절을 통해서 한글, 영문, 한글+영문
조합으로 구성되어 있는 이미지에 대해서 상당히 만족할 만한 OCR 추출 결과를 보여주고 있습니다.
마무리
오늘은 상단에서 순서대로 설명한대로 이미지에서 텍스트를 추출하는 OCR 라이브러리인 tesseract를
설치 후 영문, 한글, 한글+영문 이미지에서 텍스트를 추출해 보는 기능을 파이썬 코드로 작성했습니다.
추출 후 기계 학습에 맞게 텍스트를 정제 및 가공하는 과정에서 조금 더 시간이 소요 될 걸로 예상됩니다.
다음시간에는 파이썬 코드를 활용해서 추출 된 텍스트를 가공 및 정제 하는 코드를 작성해보겠습니다.
특수문자, 띄어쓰기 등에 대해서 규칙에맞게 할 예정이며, 또 이를 학습에 자주 사용되는 파일 형식인
CSV파일 형식으로 저장해보겠습니다.
다음포스팅에서 계속해서 연재를 이어나가도록 하겠습니다. 감사합니다.
소스코드 다운로드 : python_bigdata.zip
'빅데이터 & 분석 > Machine Learning' 카테고리의 다른 글
파이썬(Python) - Scikit Learn 의사결정트리(Decision Tree) 시각화 예제 (8) | 2018.12.14 |
---|---|
파이썬(Python) - 머신러닝 프로젝트(최종) - 나이브 베이즈 스팸 필터링 (26) | 2018.09.23 |
파이썬(Python) - 머신러닝 프로젝트(4) - mLab 호스팅 활용 MongoDB 연동 (4) | 2018.09.09 |
파이썬(Python) - 머신러닝 프로젝트(3) - 문자열 가공 및 TXT 및 CSV 저장 (9) | 2018.07.27 |
파이썬(Python) - 머신러닝 프로젝트(1) - OCR 이미지 문자열 추출(Tesseract) (7) | 2018.07.15 |