zoukankan      html  css  js  c++  java
  • tesserocr与pytesseract模块的使用

    1.tesserocr的使用

    #从文件识别图像字符
    In [7]: tesserocr.file_to_text('image.png')
    Out[7]: 'Python3WebSpider
    
    '
    
    #查看tesseract已安装的语言包
    In [8]: tesserocr.get_languages()
    Out[8]: ('/usr/share/tesseract/tessdata/', ['eng'])
    
    #从图片数据识别图像字符
    In [9]: tesserocr.image_to_text(im)
    Out[9]: 'Python3WebSpider
    
    '
    
    #查看版本信息
    In [10]: tesserocr.tesseract_version()
    Out[10]: 'tesseract 3.04.00
     leptonica-1.72
      libgif 4.1.6(?) : libjpeg 6b (libjpeg-turbo 1.2.90) : libpng 1.5.13 : libtiff 4.0.3 : zlib 1.2.7 : libwebp 0.3.0
    '

    2.pytesseract使用

    功能:

    • get_tesseract_version  返回系统中安装的Tesseract版本。
    • image_to_string  将图像上的Tesseract OCR运行结果返回到字符串
    • image_to_boxes  返回包含已识别字符及其框边界的结果
    • image_to_data  返回包含框边界,置信度和其他信息的结果。需要Tesseract 3.05+。有关更多信息,请查看Tesseract TSV文档
    • image_to_osd  返回包含有关方向和脚本检测的信息的结果。

    参数:

    image_to_data(image, lang=None, config='', nice=0, output_type=Output.STRING)

    • image object  图像对象
    • lang String,Tesseract  语言代码字符串
    • config String  任何其他配置为字符串,例如:config='--psm 6'
    • nice Integer  修改Tesseract运行的处理器优先级。Windows不支持。尼斯调整了类似unix的流程的优点。
    • output_type  类属性,指定输出的类型,默认为string。有关所有支持类型的完整列表,请检查pytesseract.Output类的定义。
    from PIL import Image
    import pytesseract
    
    #如果PATH中没有tesseract可执行文件,请指定tesseract路径
    pytesseract.pytesseract.tesseract_cmd='C:Program Files (x86)Tesseract-OCR\tesseract.exe'
    
    #打印识别的图像的字符串
    print(pytesseract.image_to_string(Image.open('test.png')))
    
    #指定语言识别图像字符串,eng为英语
    print(pytesseract.image_to_string(Image.open('test-european.jpg'), lang='eng'))
    
    #获取图像边界框
    print(pytesseract.image_to_boxes(Image.open('test.png')))
    
    #获取包含边界框,置信度,行和页码的详细数据
    print(pytesseract.image_to_data(Image.open('test.png')))
    
    #获取方向和脚本检测
    print(pytesseract.image_to_osd(Image.open('test.png'))

    图像识别简单应用

     一般图像处理验证,需要通过对图像进行灰度处理、二值化后增加图像文字的辨识度,下面是一个简单的对图像验证码识别处理,如遇到复杂点的图像验证码如中间带多条同等大小划线的验证码需要对文字进行乔正切割等操作,但它的识别度也只有百分之30左右,所以得另外想别的办法来绕过验证

    from PIL import Image
    import pytesseract
    
    im = Image.open('66.png')
    #二值化图像传入图像和阈值
    def erzhihua(image,threshold):
        ''':type image:Image.Image'''
        image=image.convert('L')
        table=[]
        for i in range(256):
            if i <  threshold:
                table.append(0)
            else:
                table.append(1)
        return image.point(table,'1')
    
    
    image=erzhihua(im,127)
    image.show()
    
    result=pytesseract.image_to_string(image,lang='eng')
    print(result)

    模拟自动识别验证码登陆:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/7/13 8:58
    # @Author  : Py.qi
    # @File    : login.py
    # @Software: PyCharm
    from selenium import webdriver
    from selenium.common.exceptions import TimeoutException,WebDriverException
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.remote.webelement import WebElement
    from io import BytesIO
    from PIL import Image
    import pytesseract
    import time
    
    user='zhang'
    password='123'
    url='http://10.0.0.200'
    driver=webdriver.Chrome()
    wait=WebDriverWait(driver,10)
    
    #识别验证码
    def acker(content):
        im_erzhihua=erzhihua(content,127)
        result=pytesseract.image_to_string(im_erzhihua,lang='eng')
        return result
    
    #验证码二值化
    def erzhihua(image,threshold):
        ''':type image:Image.Image'''
        image=image.convert('L')
        table=[]
        for i in range(256):
            if i <  threshold:
                table.append(0)
            else:
                table.append(1)
        return image.point(table,'1')
    
    #自动登陆
    def login():
        try:
            driver.get(url)
            #获取用户输入框
            input=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#loginname'))) #type:WebElement
            input.clear()
            #发送用户名
            input.send_keys(user)
            #获取密码框
            inpass=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#password'))) #type:WebElement
            inpass.clear()
            #发送密码
            inpass.send_keys(password)
            #获取验证输入框
            yanzheng=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#code'))) #type:WebElement
            #获取验证码在画布中的位置
            codeimg=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#codeImg'))) #type:WebElement
            image_location = codeimg.location
            #截取页面图像并截取掩码码区域图像
            image=driver.get_screenshot_as_png()
            im=Image.open(BytesIO(image))
            imag_code=im.crop((image_location['x'],image_location['y'],488,473))
            #输入验证码并登陆
            yanzheng.clear()
            yanzheng.send_keys(acker(imag_code))
            time.sleep(2)
            yanzheng.send_keys(Keys.ENTER)
        except TimeoutException as e:
            print('timeout:',e)
        except WebDriverException as e:
            print('webdriver error:',e)
    
    if __name__ == '__main__':
        login()

    原文:https://www.cnblogs.com/-qing-/p/11027821.html

  • 相关阅读:
    倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何把FBD功能块转换成ST语言
    揭秘一个操作灰色关键词牟取暴利的案例
    [原创汉化] 价值990美元的顶级专业数据恢复软件O&O DiskRecovery 11(技术员版)汉化绿色版
    list集合如何对里面的元素进行排序
    jquery datables ajax分页后的点击事件无效是怎么回事
    阿里云自动快照有什么用,如何设置?
    php后台管理员权限相关表结构
    服务器上装了安全狗后远程链接不上怎么解决
    Ehcache配置参数简介
    Spring+EhCache缓存实例
  • 原文地址:https://www.cnblogs.com/linyouyi/p/11429666.html
Copyright © 2011-2022 走看看