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基本数据类型详细介绍
Mar 11 Python
python中List的sort方法指南
Sep 01 Python
Python读写unicode文件的方法
Jul 10 Python
Pycharm编辑器技巧之自动导入模块详解
Jul 18 Python
Python利用openpyxl库遍历Sheet的实例
May 03 Python
Win8下python3.5.1安装教程
Jul 29 Python
python虚拟环境迁移方法
Jan 03 Python
Python安装Flask环境及简单应用示例
May 03 Python
python实现自动化上线脚本的示例
Jul 01 Python
使用python处理题库表格并转化为word形式的实现
Apr 14 Python
keras实现调用自己训练的模型,并去掉全连接层
Jun 09 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
Sep 15 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基于工厂模式实现的计算器实例
2015/07/16 PHP
PHP Yii框架之表单验证规则大全
2015/11/16 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
网页中实现浏览器的最大,最小化和关闭按钮
2007/03/12 Javascript
JavaScript Undefined,Null类型和NaN值区别
2008/10/22 Javascript
JavaScript操纵窗口的方法小结
2013/06/28 Javascript
利用window.name实现windowStorage代码分享
2014/01/02 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
2014/02/17 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
JavaScript中双符号的运算详解
2017/03/12 Javascript
BootStrap 表单控件之单选按钮水平排列
2017/05/23 Javascript
微信小程序实现折叠面板
2018/01/31 Javascript
JavaScript数组排序的六种常见算法总结
2020/08/18 Javascript
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
Python实现简单登录验证
2016/04/13 Python
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
CentOS7下python3.7.0安装教程
2018/07/30 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
Python如何基于smtplib发不同格式的邮件
2019/12/30 Python
pytorch 实现打印模型的参数值
2019/12/30 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
蛋糕店的商业计划书范文
2014/01/27 职场文书
旷课检讨书1000字
2014/02/14 职场文书
《圆明园的毁灭》教学反思
2014/02/28 职场文书
借款协议书范本
2014/04/22 职场文书
行政部经理助理岗位职责
2014/06/15 职场文书
营运督导岗位职责
2015/04/10 职场文书
汽车销售员工作总结
2015/08/12 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python
基于redis+lua进行限流的方法
2022/07/23 Redis