1. pytesseract 소개
1. pytesseract 설명
pytesseract 최신 버전 0.1.6
Python-tesseract는 Google의 Tesseract-OCR을 위한 래퍼입니다.
jpeg, png, gif, bmp, tiff 등을 포함하여 Python Imaging Library에서 지원하는 모든 이미지 유형
을 읽을 수 있으므로
tesseract에 대한 독립 실행형 호출 스크립트
로도 유용합니다. 및 기타 tesseract-ocr은 기본적으로 tiff 및 bmp만 지원합니다.
또한 스크립트로 사용되는 경우 Python-tesseract는
신뢰도 추정을 파일에 쓰는 대신 인식된 텍스트를 인쇄합니다.
경계 상자 데이터는 향후 릴리스에 계획되어 있습니다.
일반 개념을 번역하세요.
a. Python-tesseract는 Google의 Tesseract-OCR을 기반으로 하는 독립 패키지입니다.
b. Python-tesseract의 기능은 이미지 파일의 텍스트를 인식하고 인식 결과를 반환 매개변수로 반환하는 것입니다.
c. Python-tesseract는 기본적으로 tiff 및 bmp 형식의 이미지를 지원합니다. PIL은 jpeg, gif, png 및 기타 이미지 형식을 지원할 수 있습니다.
2. pytesseract 설치
설치:
전제 조건:
* Python-tesseract에는 Python 2.5가 필요합니다. 이상 또는 Python 3.
* Debian/Ubuntu에서는 Python Imaging Library(PIL)가 필요합니다.
python3용 "python-imaging" 또는 "python3-imaging" 패키지입니다.
*
에서 google tesseract-ocr을 설치하세요. tesseract 명령을 "tesseract"로 호출할 수 있어야 합니다.
그렇지 않은 경우(예를 들어 tesseract가 PATH에 없기 때문에)
'tesseract.py' 상단의 " tesseract_cmd" 변수를 변경해야 합니다.
Debian/Ubuntu에서는 "tesseract-ocr" 패키지를 사용할 수 있습니다.
pip를 통해 설치:
[pytesseract 패키지 페이지]
```
$> sudo pip install pytesseract
번역:
a. .5 이상 버전;
b. Python-tesseract는 더 많은 이미지 형식을 지원하기 위해 PIL(Python Imaging Library)을 설치해야 합니다.
c. 설치 패키지.
요약하자면 Pytesseract 원리는 다음과 같습니다.
1. 이전 블로그 게시물에서 언급했듯이 tesseract.exe 1.png 출력 -l eng 명령줄을 실행하면 1.png 한자를 인식할 수 있습니다. 그리고 인식 결과를 output.txt로 출력합니다.
2. Pytesseract는 위 프로세스를 다시 캡슐화하고 자동으로 tesseract.exe를 호출하여 함수의 반환 값으로 output.txt 파일을 읽습니다. 반품하세요.
2. pytesseract 사용
```> import Image
> ; PIL 가져오기 이미지
> import pytesseract
> print(pytesseract.image_to_string(Image.open('test.png')))
> print(pytesseract.image_to_string( 'test-european.jpg'),))
볼 수 있는 내용:
1. 핵심 코드는 -l eng 매개변수와 -psm 매개변수도 지원하는 image_to_string 함수입니다. .
사용법:
image_to_string(Image.open('test.png'),lang="eng" config="-psm 7")
2. Image가 호출되므로 PIL이 필요합니다. 실제로 tesseract.exe 자체는 jpeg, png 및 기타 이미지 형식을 지원합니다.
공공사이트 인증코드 식별을 위한 예시코드 (악한 짓은 하지 마시기 바랍니다. 계속해서 고민하다가 결국 해당 사이트의 도메인 이름을 숨겼습니다. 다른 곳을 찾아보겠습니다. 웹사이트...):
#-*-coding=utf-8-*- __author__='zhongtang' import urllib import urllib2 import cookielib import math import random import time import os import htmltool from pytesseract import * from PIL import Image from PIL import ImageEnhance import re class orclnypcg: def __init__(self): self.baseUrl='http://jbywcg.****.com.cn' self.ht=htmltool.htmltool() self.curPath=self.ht.getPyFileDir() self.authCode='' def initUrllib2(self): try: cookie = cookielib.CookieJar() cookieHandLer = urllib2.HTTPCookieProcessor(cookie) httpHandLer=urllib2.HTTPHandler(debuglevel=0) httpsHandLer=urllib2.HTTPSHandler(debuglevel=0) except: raise else: opener = urllib2.build_opener(cookieHandLer,httpHandLer,httpsHandLer) opener.addheaders = [('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11')] urllib2.install_opener(opener) def urllib2Navigate(self,url,data={}): #定义连接函数,有超时重连功能 tryTimes = 0 while True: if (tryTimes>20): print u"多次尝试仍无法链接网络,程序终止" break try: if (data=={}): req = urllib2.Request(url) else: req = urllib2.Request(url,urllib.urlencode(data)) response =urllib2.urlopen(req) bodydata = response.read() headerdata = response.info() if headerdata.get('Content-Encoding')=='gzip': rdata = StringIO.StringIO(bodydata) gz = gzip.GzipFile(fileobj=rdata) bodydata = gz.read() gz.close() tryTimes = tryTimes +1 except urllib2.HTTPError, e: print 'HTTPError[%s]\n' %e.code except urllib2.URLError, e: print 'URLError[%s]\n' %e.reason except socket.error: print u"连接失败,尝试重新连接" else: break return bodydata,headerdata def randomCodeOcr(self,filename): image = Image.open(filename) #使用ImageEnhance可以增强图片的识别率 #enhancer = ImageEnhance.Contrast(image) #enhancer = enhancer.enhance(4) image = image.convert('L') ltext = '' ltext= image_to_string(image) #去掉非法字符,只保留字母数字 ltext=re.sub("\W", "", ltext) print u'[%s]识别到验证码:[%s]!!!' %(filename,ltext) image.save(filename) #print ltext return ltext def getRandomCode(self): #开始获取验证码 #http://jbywcg.****.com.cn/CommonPage/Code.aspx?0.9409255818463862 i = 0 while ( i<=100): i += 1 #拼接验证码Url randomUrlNew='%s/CommonPage/Code.aspx?%s' %(self.baseUrl,random.random()) #拼接验证码本地文件名 filename= '%s.png' %(i) filename= os.path.join(self.curPath,filename) jpgdata,jpgheader = self.urllib2Navigate(randomUrlNew) if len(jpgdata)<= 0 : print u'获取验证码出错!\n' return False f = open(filename, 'wb') f.write(jpgdata) #print u"保存图片:",fileName f.close() self.authCode = self.randomCodeOcr(filename) #主程序开始 orcln=orclnypcg() orcln.initUrllib2() orcln.getRandomCode()
3. pytesseract 코드 최적화
위 프로그램을 Windows 플랫폼에서 실행하면 검정색 콘솔 창이 깜박이는 것을 볼 수 있는데 이는 별로 친숙하지 않습니다. .
위 프로세스를 숨기기 위해 pytesseract.py(C:Python27Libsite-packagespytesseract 디렉터리)를 약간 수정했습니다.
# zhongtang에 의해 수정됨 콘솔 창 숨기기
# 새 코드IS_WIN32 = 'win32' in str(sys.platform).lower()
if IS_WIN32: 시작 정보 = subprocess .STARTUPINFO()
시작 정보.dwFlags |= subprocess.STARTF_USESHOWWINDOW
시작 정보.wShowWindow = subprocess.SW_HIDE
proc = subprocess.Popen(명령,
stderr=subprocess.PIPE,startupinfo=startupinfo)
'''
# 이전 코드
proc = subprocess.Popen(command,
stderr=subprocess.PIPE)
'''
# 수정됨 끝
초보자들의 편의를 위해 pytesseract.py도 게시되어 있는데, 전문가들은 무시해도 됩니다.
Python에서 웹사이트 인증 코드를 식별하기 위해 pytesseract 호출과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!