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


Posted in Python onAugust 30, 2019

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

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

Python 相关文章推荐
python使用PyFetion来发送短信的例子
Apr 22 Python
Python之Scrapy爬虫框架安装及使用详解
Nov 16 Python
django模型层(model)进行建表、查询与删除的基础教程
Nov 21 Python
Python递归实现汉诺塔算法示例
Mar 19 Python
Python反转序列的方法实例分析
Mar 21 Python
使用python对多个txt文件中的数据进行筛选的方法
Jul 10 Python
python之拟合的实现
Jul 19 Python
python读取word 中指定位置的表格及表格数据
Oct 23 Python
详解python 破解网站反爬虫的两种简单方法
Feb 09 Python
django自定义非主键自增字段类型详解(auto increment field)
Mar 30 Python
python中查看.db文件中表格的名字及表格中的字段操作
Jul 07 Python
python获取带有返回值的多线程
May 02 Python
Django获取应用下的所有models的例子
Aug 30 #Python
Django自带日志 settings.py文件配置方法
Aug 30 #Python
tensorflow如何批量读取图片
Aug 29 #Python
解决Django layui {{}}冲突的问题
Aug 29 #Python
Python Django实现layui风格+django分页功能的例子
Aug 29 #Python
在Django下测试与调试REST API的方法详解
Aug 29 #Python
阿里云ECS服务器部署django的方法
Aug 29 #Python
You might like
在PHP中运行Linux命令并启动SSH服务的例子
2014/06/12 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
Laravel框架实现调用百度翻译API功能示例
2019/05/30 PHP
jQuery第三课 修改元素属性及内容的代码
2010/03/14 Javascript
javascript SpiderMonkey中的函数序列化如何进行
2012/12/05 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
解析javascript 数组以及json元素的添加删除
2013/06/26 Javascript
nodeType属性返回被选节点的节点类型介绍
2013/11/22 Javascript
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
利用node.js爬取指定排名网站的JS引用库详解
2017/07/25 Javascript
使用Vue.js和Flask来构建一个单页的App的示例
2018/03/21 Javascript
Node.js文件编码格式的转换的方法
2018/04/27 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
JavaScript 异步时序问题
2020/11/20 Javascript
python算法学习之基数排序实例
2013/12/18 Python
通过Python来使用七牛云存储的方法详解
2015/08/07 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
Django渲染Markdown文章目录的方法示例
2019/01/02 Python
Python 实用技巧之利用Shell通配符做字符串匹配
2019/08/23 Python
无需压缩软件,用python帮你操作压缩包
2020/08/17 Python
建筑工程自我鉴定
2013/10/18 职场文书
大学毕业后的十年规划
2014/01/07 职场文书
员工培训协议书
2014/09/15 职场文书
党员批评与自我批评范文
2014/09/23 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
求职自我评价参考范文
2019/05/16 职场文书