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引用DLL文件的方法
May 11 Python
python利用Guetzli批量压缩图片
Mar 23 Python
Python基础学习之常见的内建函数整理
Sep 06 Python
Python合并多个Excel数据的方法
Jul 16 Python
python添加菜单图文讲解
Jun 04 Python
python操作小程序云数据库实现简单的增删改查功能
Jun 06 Python
python 处理微信对账单数据的实例代码
Jul 19 Python
Django 迁移、操作数据库的方法
Aug 02 Python
在vscode中配置python环境过程解析
Sep 28 Python
Python中SQLite如何使用
May 27 Python
Python实现列表中非负数保留,负数转化为指定的数值方式
Jun 04 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
Mar 03 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对象类型判断
2008/08/27 PHP
MySQL时间字段究竟使用INT还是DateTime的说明
2012/02/27 PHP
注释PHP和html混合代码的小技巧(分享)
2016/11/03 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
mongodb和php的用法详解
2019/03/25 PHP
js编码之encodeURIComponent使用介绍(asp,php)
2012/03/01 Javascript
jQuery实现菜单式图片滑动切换
2015/03/14 Javascript
JavaScript动态修改背景颜色的方法
2015/04/16 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
2015/06/01 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
2015/08/28 Javascript
js 获取经纬度的实现方法
2016/06/20 Javascript
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
2018/01/25 Javascript
webpack中使用iconfont字体图标的方法
2018/02/22 Javascript
vue 使用vue-i18n做全局中英文切换的方法
2018/10/29 Javascript
vue中的过滤器及其时间格式化问题
2020/04/09 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
python定时检测无响应进程并重启的实例代码
2019/04/22 Python
使用python telnetlib批量备份交换机配置的方法
2019/07/25 Python
Python Django 封装分页成通用的模块详解
2019/08/21 Python
CSS3教程:边框属性border的极致应用
2009/04/02 HTML / CSS
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
详解如何使用CSS3中的结构伪类选择器和伪元素选择器
2020/01/06 HTML / CSS
使用CSS3实现字体颜色渐变的实现
2020/08/10 HTML / CSS
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
Lululemon英国官网:加拿大瑜伽服装品牌
2019/01/14 全球购物
澳大利亚波西米亚风情网上商店:Czarina
2019/03/18 全球购物
小学优秀教育工作者事迹材料
2014/05/09 职场文书
售后服务承诺书模板
2014/05/21 职场文书
医院安全生产月活动总结
2014/07/05 职场文书
创业计划书之零食店(进口)
2019/09/24 职场文书
Python爬虫实战之爬取携程评论
2021/06/02 Python
python基础之文件操作
2021/10/24 Python