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 相关文章推荐
videocapture库制作python视频高速传输程序
Dec 23 Python
Python微信库:itchat的用法详解
Aug 14 Python
python实现数据写入excel表格
Mar 25 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
Oct 21 Python
如何使用python把ppt转换成pdf
Jun 29 Python
Django连接数据库并实现读写分离过程解析
Nov 13 Python
python打印异常信息的两种实现方式
Dec 24 Python
python列表的逆序遍历实现
Apr 20 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
May 22 Python
基于matplotlib中ion()和ioff()的使用详解
Jun 16 Python
pandas按条件筛选数据的实现
Feb 20 Python
Windows安装Anaconda3的方法及使用过程详解
Jun 11 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执行批量mysql语句的解决方法
2013/05/02 PHP
PHP实现通过get方式识别用户发送邮件的方法
2015/07/16 PHP
HTML中嵌入PHP的简单方法
2016/02/16 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
php中序列化与反序列化详解
2017/02/13 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
默认让页面的第一个控件选中的javascript代码
2009/12/26 Javascript
转换json格式的日期为Javascript对象的函数
2010/07/13 Javascript
JS读取cookies信息(记录用户名)
2012/01/10 Javascript
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
WordPress 单页面上一页下一页的实现方法【附代码】
2016/03/10 Javascript
jstree的简单实例
2016/12/01 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
Bootstrap入门教程一Hello Bootstrap初识
2017/03/02 Javascript
JS正则替换去空格的方法
2017/03/24 Javascript
Angular表格神器ui-grid应用详解
2017/09/29 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
微信小程序实现页面下拉刷新和上拉加载功能详解
2018/12/03 Javascript
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
Vue看了就会的8个小技巧
2021/01/21 Vue.js
Django1.3添加app提示模块不存在的解决方法
2014/08/26 Python
Python 中 list 的各项操作技巧
2017/04/13 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
PyQt使用QPropertyAnimation开发简单动画
2020/04/02 Python
福克斯租车:Fox Rent A Car
2017/04/13 全球购物
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
英国在线药房和在线药剂师:Chemist 4 U
2020/01/05 全球购物
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
GWebs公司笔试题
2012/05/04 面试题
单位个人查摆问题及整改措施
2014/10/28 职场文书
建筑安全员岗位职责
2015/02/15 职场文书
医德医风个人总结
2015/02/28 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
运动员入场前导词
2015/07/20 职场文书
新闻通讯稿范文
2015/07/22 职场文书