Heim >Backend-Entwicklung >Python-Tutorial >Rufen Sie pytesseract unter Python auf, um einen Website-Bestätigungscode zu identifizieren

Rufen Sie pytesseract unter Python auf, um einen Website-Bestätigungscode zu identifizieren

高洛峰
高洛峰Original
2018-05-15 09:26:383331Durchsuche

1. Einführung in Pytesseract

Pytesseract neueste Version 0.1.6

Python-Tesseract ist ein Wrapper für Googles Tesseract-OCR.

Es ist auch als

eigenständiges Aufrufskript für Tesseract nützlich, da es alle Bildtypen lesen kann,
die von der Python Imaging Library unterstützt werden, einschließlich JPEG, PNG, GIF, BMP, TIFF,
und andere, während tesseract-ocr standardmäßig nur TIFF und BMP unterstützt.
Außerdem druckt Python-tesseract bei Verwendung als Skript den erkannten
Text, anstatt ihn in eine Datei zu schreiben. Unterstützung für Konfidenzschätzungen und
Bounding-Box-Daten sind für zukünftige Versionen geplant.

Übersetzen Sie die allgemeine Idee:

a. Python-tesseract ist ein unabhängiges Paket, das auf Googles Tesseract-OCR basiert;

b. Die Funktion von Python-tesseract besteht darin, Text in Bilddateien zu erkennen und das Erkennungsergebnis als Rückgabeparameter zurückzugeben.

c. Standardmäßig unterstützt Python-tesseract Bilder im TIFF- und BMP-Format PIL kann JPEG, GIF, PNG und andere Bildformate unterstützen;

2. Pytesseract-Installation

INSTALLATION:

Voraussetzungen:

* Python-Tesseract erfordert Python 2.5 oder höher oder Python 3.

* Sie benötigen die Python Imaging Library (PIL). Unter Debian/Ubuntu ist dies
das Paket „python-imaging“ oder „python3-imaging“ für Python3.
* Installieren Sie google tesseract-ocr von
Sie müssen in der Lage sein, den Tesseract-Befehl als „tesseract“ aufzurufen. Wenn dies
nicht der Fall ist, beispielsweise weil sich tesseract nicht in Ihrem PATH befindet, werden Sie dies tun
müssen die Variable „tesseract_cmd“ oben in „tesseract.py“ ändern.
Unter Debian/Ubuntu können Sie das Paket „tesseract-ocr“ verwenden.

Installation über pip:


Siehe die [Pytesseract-Paketseite]

```

$> sudo pip install pytesseract

Übersetzung:

a. Python-tesseract unterstützt Python2 .5 und höhere Version;

b. Python-tesseract muss PIL (Python Imaging Library) installieren, um mehr Bildformate zu unterstützen;

c Installationspaket.

Zusammenfassend gilt das Pytesseract-Prinzip:

1. Wie im vorherigen Blogbeitrag erwähnt, kann die Ausführung der Befehlszeile tesseract.exe 1.png output -l eng chinesische Zeichen in 1.png erkennen . Und geben Sie die Erkennungsergebnisse an „output.txt“ aus Retoure machen.

2. Verwenden Sie pytesseract

VERWENDUNG:

```

> ; aus PIL import Image

> import pytesseract

> print(pytesseract.image_to_string('test.png'))
> 'test-european.jpg'),))

Sie können sehen:

1. Der Kerncode ist die Funktion image_to_string, die auch die Parameter -l eng und -psm unterstützt .

Verwendung:

image_to_string(Image.open('test.png'),lang="eng" config="-psm 7")

2 Bild heißt, daher wird PIL benötigt. Tatsächlich unterstützt tesseract.exe selbst JPEG, PNG und andere Bildformate.

Beispielcode zur Identifizierung des Bestätigungscodes einer öffentlichen Website (bitte machen Sie keine schlechten Dinge. Nachdem ich immer wieder darüber nachgedacht habe, verstecke ich schließlich den Domainnamen der Website. Versuchen wir es mit anderen Websites. ..):

3. Pytesseract-Codeoptimierung

Wenn das obige Programm auf der Windows-Plattform ausgeführt wird, blinkt ein schwarzes Konsolenfenster, was nicht sehr benutzerfreundlich ist .

pytesseract.py (Verzeichnis C:Python27Libsite-packagespytesseract) wurde leicht geändert, um den obigen Prozess auszublenden.

#-*-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()
# geändert durch Zhongtang Konsolenfenster ausblenden

# neuer Code

IS_WIN32 = 'win32' in str(sys.platform).lower()

if IS_WIN32:

Startup Info = subprocess .STARTUPINFO()

Startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW

Startupinfo.wShowWindow = subprocess.SW_HIDE

proc = subprocess.Popen(command,
stderr=subprocess.PIPE,startupinfo=startupinfo)
'''
# alter Code
proc = subprocess.Popen(command,
stderr=subprocess.PIPE)
'''
# geändertes Ende

für Zur Vereinfachung für Anfänger wird auch pytesseract.py veröffentlicht, und Experten können es ignorieren.


Das Obige...

Die obige Methode zum Aufrufen von Pytesseract zur Identifizierung des Bestätigungscodes einer Website unter Python ist der gesamte vom Herausgeber freigegebene Inhalt, den ich hoffentlich liefern kann Ich hoffe auch, dass jeder die chinesische PHP-Website unterstützt.

Weitere Artikel zum Aufruf von Pytesseract zur Identifizierung eines Website-Bestätigungscodes unter Python finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn