tesserocr与pytesseract模块的使用方法解析

 更新时间:2019年08月30日 08:56:10   作者:linyouyi  
这篇文章主要介绍了tesserocr与pytesseract模块的使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1.tesserocr的使用

#从文件识别图像字符
In [7]: tesserocr.file_to_text('image.png')
Out[7]: 'Python3WebSpider\n\n'

#查看tesseract已安装的语言包
In [8]: tesserocr.get_languages()
Out[8]: ('/usr/share/tesseract/tessdata/', ['eng'])

#从图片数据识别图像字符
In [9]: tesserocr.image_to_text(im)
Out[9]: 'Python3WebSpider\n\n'

#查看版本信息
In [10]: tesserocr.tesseract_version()
Out[10]: 'tesseract 3.04.00\n leptonica-1.72\n 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\n'

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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 最新解决'nvidia-smi' 不是内部或外部命令也不是可运行的程序

    最新解决'nvidia-smi' 不是内部或外部命令也不是可运行的程序

    使用cmd查看电脑显卡的信息,调用nvidia-smi查看显卡使用情况报错,提示'nvidia-smi' 不是内部或外部命令,也不是可运行的程序,本文给大家分享完美解决方案,感兴趣的朋友跟随小编一起看看吧
    2023-01-01
  • Laravel框架表单验证格式化输出的方法

    Laravel框架表单验证格式化输出的方法

    最近在公司的项目开发中使用到了 laravel 框架,采用的是前后端开发的模式。这篇文章主要介绍了Laravel框架表单验证格式化输出,需要的朋友可以参考下
    2019-09-09
  • Win10系统下安装编辑器之神(The God of Editor)Vim并且构建Python生态开发环境过程(2020年最新攻略)

    Win10系统下安装编辑器之神(The God of Editor)Vim并且构建Python生态开发环境过程(2

    这篇文章主要介绍了Win10系统下安装编辑器之神(The God of Editor)Vim并且构建Python生态开发环境(2020年最新攻略),本次我们在Win10平台构建一套以Vim为核心的Python开发环境,需要的朋友可以参考下
    2023-01-01
  • 使用Python实现屏幕截图的两种方法

    使用Python实现屏幕截图的两种方法

    Python作为一种高效的编程语言,可以通过一些库来实现对屏幕的截图操作,本文主要介绍了使用Python实现屏幕截图的两种方法,具有一定的 参考价值,感兴趣的可以了解一下
    2023-12-12
  • flask + pymysql操作Mysql数据库的实例

    flask + pymysql操作Mysql数据库的实例

    下面小编就为大家带来一篇flask + pymysql操作Mysql数据库的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • 最新版Anaconda安装教程

    最新版Anaconda安装教程

    本文主要介绍了最新版Anaconda安装教程,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • Django框架模板的使用方法示例

    Django框架模板的使用方法示例

    这篇文章主要介绍了Django框架模板的使用方法,结合实例形式分析了Django框架模板的创建与使用相关操作技巧,需要的朋友可以参考下
    2019-05-05
  • 这可能是最好玩的python GUI入门实例(推荐)

    这可能是最好玩的python GUI入门实例(推荐)

    这篇文章主要介绍了这可能是最好玩的python GUI入门实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Django logging日志模块实例详解(日志记录模板配置)

    Django logging日志模块实例详解(日志记录模板配置)

    Django使用python自带的logging作为日志打印工具,下面这篇文章主要给大家介绍了Django logging日志模块(日志记录模板配置)的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • 深入理解python多进程编程

    深入理解python多进程编程

    下面小编就为大家带来一篇深入理解python多进程编程。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06

最新评论