>  기사  >  백엔드 개발  >  웹사이트 확인 코드를 식별하려면 Python에서 pytesseract를 호출하세요.

웹사이트 확인 코드를 식별하려면 Python에서 pytesseract를 호출하세요.

高洛峰
高洛峰원래의
2018-05-15 09:26:383301검색

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=&#39;%s/CommonPage/Code.aspx?%s&#39; %(self.baseUrl,random.random())
      #拼接验证码本地文件名
      filename= &#39;%s.png&#39; %(i)
      filename= os.path.join(self.curPath,filename)
      jpgdata,jpgheader = self.urllib2Navigate(randomUrlNew)
      if len(jpgdata)<= 0 :
        print u&#39;获取验证码出错!\n&#39;
        return False
      f = open(filename, &#39;wb&#39;)
      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 중국어 웹사이트에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.