빅데이터 프로그래밍/Python

[Python] 36. [Scraping] 이미지 처리와 텍스트 인식

밍글링글링 2017. 8. 21.
728x90

[01] 이미지 처리와 텍스트 인식

1. Pillow 설치

- 이미지처리 기본 기능을 지원하며 사용이 쉬움.
- http://pillow.readthedocs.org


C:\Users\soldesk>pip install pillow
Collecting pillow
  Downloading Pillow-4.1.0-cp36-cp36m-win_amd64.whl (1.5MB)
    100% ■■■■■■■■■■■■■■■■■■■■ 1.5MB 211kB/s
Collecting olefile (from pillow)
  Downloading olefile-0.44.zip (74kB)
    100% ■■■■■■■■■■■■■■■■■■■■ 81kB 5.3MB/s
Installing collected packages: olefile, pillow
  Running setup.py install for olefile ... done
Successfully installed olefile-0.44 pillow-4.1.0
 
2. 이미지에 블러 효과 주기

[실행 화면]

블러 이미지 출력
▷ tesseract.basicImage.py
- 이미지는 http://pillow.readthedocs.org 사이트에서 다운받습니다.
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-

from PIL import Image, ImageFilter

kitten = Image.open("python.png")
blurryKitten = kitten.filter(ImageFilter.GaussianBlur)
blurryKitten.save("python_blurred.jpg")
blurryKitten.show()


-------------------------------------------------------------------------------------
 
 
  
  

3. Tesseract(테서렉트) 설치
- 광학 문자 인식(Optical character recognition: OCR) 라이브러리
- https://github.com/tesseract-ocr/tesseract/wiki -> Downloads
 -> https://github.com/tesseract-ocr/tesseract/wiki/4.0-with-LSTM#400-alpha-for-windows 접속
     Windows Installer made with MinGW-w64 링크 클릭 'tesseract-ocr-setup-4.00.00dev.exe' 다운로드
 -> 'C:\Tesseract-OCR' 폴더에 설치 (기본 경로에 설치하면 보안 관련 에러 발생함)
    
 
4. Numpy 설치
- 수치 계산을위한 Python 패키지


F:\201701_python\ws_python\scraping\crawler1>pip install numpy
Collecting numpy
  Downloading numpy-1.12.1-cp36-none-win_amd64.whl (7.7MB)
    100% ■■■■■■■■■■■■■■■■■■■■ 7.7MB 114kB/s
Installing collected packages: numpy
Successfully installed numpy-1.12.1
  
  
5. pytesseract  설치

C:\Users\soldesk>pip install pytesseract
Collecting pytesseract
  Downloading pytesseract-0.1.6.tar.gz (149kB)
    100% ■■■■■■■■■■■■■■■■■■■■ 153kB 1.6MB/s
Installing collected packages: pytesseract
  Running setup.py install for pytesseract ... done
Successfully installed pytesseract-0.1.6
 
 
6. pytesseract 한글 처리

https://pypi.python.org/pypi/pytesseract
  접속하여 파일을 다운받습니다.
- C:\Python36\Lib\site-packages\pytesseract 폴더에 'pytesseract.py' 파일을 덮어씁니다.
 
 
 
[02] OCR 실습
1. 윈도우 콘솔에서의 인식 테스트
1) 이미지에서 영문 인식

C:\Tesseract-OCR>tesseract ocr_eng.jpg stdout -l eng > ocr_eng.txt
Existing System
 
The existing tesseract-OCR supports English language as
default and also supports languages like Dutch, Spanish, Italian,
French and German. All these languages are trained to
tesseract OCR, but languages like Tamil, Malayalam are not
much trained to OCR. There are no GUI available for tesseract
in tamil and training tesseract is a big task which an
intermediate persons too feel complex for training it. Since
Tesseract OCR Engine is command line Tool, usage of OCR is
much less.
 
 
2) 이미지에서 한글 인식
C:\Tesseract-OCR>tesseract ocr_kor.jpg stdout -l kor > ocr_kor.txt
보 도 될 뉴 스 의 크 기 와 방 향 을 정하는 것 은 기 본 적 으 로 는 기 자 이 지 만 . 이 에 못지 않게 큰
영 향 력 을 행 사 하는 것이 ' 데 스크 즉 각 언 론 사 의 팀 장 이 나 부 장 또는 국 장 들 이 다 . 따 라서
회 사 와 조 직 의 규 모 가 커지면 커질 수록 홍보 담 당 자 나 홈 보 책 임 자 , 나 아 가 서는 680 가
언 론 사 의 간 부 와 접 속 해 관 제 를 항 성 하는 것이 낄 요하.
언 론 인 에게는 예 의 를 갖고 대 하 고 늘 도 와 주는 자 세 가 되어 있다는 것 을 보 여 주 고.
마 감 시간 이 전 에 자 료 나 사 진 을 제 공 해 주는 것을 절 칙 으로 할 때 언 론 인 은 그
홍 보 담 당 자 를 믿고 함께 일 을 하게 되 는 것 이다.
기 자 에게 언론 보 도 를 교 정 하면서 자신 없 는 태 도 를 갖는 것은 언 론 과 진 해 지 는 데 방 해 가
된 다 . 언 룬 의 중 요 한 임 무 가운데 하 나 가 보도 요정 을 받 아 들 이 고 이 것 이 뉴 스 가 치 가
있는지 판 단 하 고 기 사 화 하는 것 이 다 . 기 자 와 진 해 지 려면 진 화 력 을 갖고 활 기 자게
대 화 하도록 노 력 해 야 한 다 . 만 나 자 마자 쉽게 서 먹 서 먹 함 을 지을 수 있는 진 화 력 과
명 랑 함 은 홍보 담 당 자 가 갖 주어야 할 중요한 덕 목 이다.
홍보 담 당 자 는 기 자 와 상 대 를 할 때 낫 설 고 서 먹 서 멱 한 관 계 를 빨리 끝 내고
터 놓고 대 화 를 나눌 수 있어야 한다. 그 러 려 면 기 자 와 만 나 거나 전 화 를 할 때에는
오랜만에 만 났 더라도 바로 며칠 전에 만난 친 구 인 것처럼 반 가 워 하고 기 자 가
거 리 감 을 느끼지 않도록 노력해야 한다. 그렇다고 해 서 지나치게 경솔한
사 람 이라는 느 낌 을 주는 것은 좋지 않다.
 
 
2. local 이미지 인식
- ocr.py 파일을 'C:\Tesseract-OCR' 복사후 실행합니다.


 
[실행 화면]
1) 영문 이미지 인식

 

2) 한글 이미지 인식
C:\Tesseract-OCR>python ocr.py ocr_kor.jpg kor
보 도 될 뉴 스 의 크 기 와 방 향 을 정하는 것 은 기 본 적 으 로 는 기 자 이 지
만 . 이 에 못지 않 게 큰
명 향 력 을 행 사 하는 것이 : 데 스크 즉 각 언 론 사 의 팀 장 이 나 부 장 또는
국 장 들 이 다 . 따 라서
회 사 와 조 직 의 규 모 가 커지면 커질 수록 총 보 담 당 자 나 홈 보 책 임 자 ,
나 아 가 서는 680 가
언 론 사 의 간 부 와 접 속 해 관 제 를 항 성 하는 것이 낄 요 하다.
 
안 론 인 에게는 예 의 를 갖고 대 하 고 늘 도 와 주는 자 세 가 되어 있다는 것 을
보 여 주 고.
 
마 감 시간 이 전 에 자 료 나 사 진 을 제 공 해 주는 것을 철 칙 으로 할 때 언 론
인 은 그
총 보 담 당 자 를 믿고 함께 일 을 하게 되 는 것 이다.
 
기 자 에게 언론 보 도 를 교 청 하 면 서 자신 없 는 태 도 들 갖는 것은 언 론 과
진 해 지 는 데 방 해 가
 
된 다 . 언 론 의 중 요 한 임 무 가운데 하 나 가 보도 요정 을 받 아 들 이 고 이
것 이 뉴 스 가 지 가
 
있는지 판 단 하 고 기 사 화 하는 것 이 다 . 기 자 와 진 해 지 려면 진 화 력 을
갖고 촬 기 자 게
 
대 화 하도록 노력해야 한 다 . 만 나 자 마자 쉽게 서 먹 서 멱 함 을 지을 수 있 는
 진 화 력 과
 
명 랑 함 은 홍보 담 당 자 가 갓 주 어 야 할 중요한 덕 목 이다.
 
홍보 담 당 자 는 기 자 와 상 대 를 할 때 낫 설 고 서 먹 서 먹 한 관 계 를 빨리
끝 내고
터 놓고 대 화 를 나눌 수 있어야 한다. 그 러 려 면 기 자 와 만 나 거나 전 화 를
할 때에는
오랜만에 만 났 더라도 바로 며 질 전에 만난 친 구 민 것처럼 반 가 워 하고 기 자
가
거 리 감 을 느끼지 않도록 노력해야 한다. 그렇다고 해 서 지나치게 경솔한
사 람 이라는 느 낌 을 주는 것은 종지 않다.
 
 
▷ tesseract.ocr.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-

import sys
from PIL import Image
from pytesseract import image_to_string
import os

def OCR(imgfile, language):
    img = Image.open(imgfile)
    text = image_to_string(img, lang=language)
    print(text)
    
    os.chdir('C:/Tesseract-OCR')  # 현재 기준 폴더 변경

    fw = open(imgfile[:-4] + '.txt', 'w')
    fw.write(text)
    fw.close()

OCR(sys.argv[1], sys.argv[2])



-------------------------------------------------------------------------------------
 
 
  
3. web page 이미지 인식
- io.StringIO: 메모리 상에서 파일처럼 인식을 시켜주는 모듈

 
[실행 화면]
1) 영문 이미지 인식

python ocr_web.py http://soldeskit3.cafe24.com/python/ocr_eng.jpg eng 

2) 한글 이미지 인식
▷ tesseract.ocr_web.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-

import sys
from PIL import Image
from pytesseract import image_to_string
import os
from io import StringIO
from urllib.request import urlretrieve

# http://image.kyobobook.co.kr/images/book/xlarge/698/x9788968484698.jpg

def OCR(imgurl, language):
    url_list = str(imgurl).split('/')
    # print(url_list)
    length = len(url_list)
    save_file = url_list[-1]
    print(save_file)
    urlretrieve(imgurl, save_file)
    img = Image.open(save_file)
    text = image_to_string(img, lang=language)
    print(text)
    
    os.chdir('C:/Tesseract-OCR')  # 현재 기준 폴더 변경
    
    fw = open(save_file[:-4] + '.txt', 'w')
    text = str(text).strip();
    fw.write(text)
    fw.close()
    
OCR(sys.argv[1], sys.argv[2])


-------------------------------------------------------------------------------------
 
 

728x90

댓글