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新手经常遇到的17个错误分析
Jul 30 Python
详细解析Python中的变量的数据类型
May 13 Python
Python实现数据库编程方法详解
Jun 09 Python
python发送HTTP请求的方法小结
Jul 08 Python
Python选课系统开发程序
Sep 02 Python
Python 专题一 函数的基础知识
Mar 16 Python
Python应用库大全总结
May 30 Python
Python之list对应元素求和的方法
Jun 28 Python
Python3变量与基本数据类型用法实例分析
Feb 14 Python
python实现根据给定坐标点生成多边形mask的例子
Feb 18 Python
class类在python中获取金融数据的实例方法
Dec 10 Python
Jmeter调用Python脚本实现参数互相传递的实现
Jan 22 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
详解:――如何将图片储存在数据库里
2006/12/05 PHP
新手菜鸟必读:session与cookie的区别
2013/08/22 PHP
PHP children()函数讲解
2019/02/03 PHP
php更新cookie内容的详细方法
2019/09/30 PHP
Jquery加载时从后台读取数据绑定到dropdownList实例
2013/06/09 Javascript
jquery 追加tr和删除tr示例代码
2013/09/12 Javascript
通过javascript把图片转化为字符画
2013/10/24 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
JavaScript实现换肤功能
2017/09/15 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
2018/08/06 Javascript
js中getter和setter用法实例分析
2018/08/14 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
2019/04/24 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
微信小程序自定义弹窗实现详解(可通用)
2019/07/04 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
整理Python最基本的操作字典的方法
2015/04/24 Python
Django中login_required装饰器的深入介绍
2017/11/24 Python
python实现微信自动回复功能
2018/04/11 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
Python + OpenCV 实现LBP特征提取的示例代码
2019/07/11 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
利用HTML5中Geolocation获取地理位置调用Google Map API在Google Map上定位
2013/01/23 HTML / CSS
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
阿尔卡特(中国)的面试题目
2014/08/20 面试题
银行介绍信范文
2014/01/10 职场文书
互联网创业计划书的书写步骤
2014/01/28 职场文书
总经理文秘岗位职责
2014/02/03 职场文书
新教师教学工作总结
2015/08/14 职场文书
学习雷锋主题班会
2015/08/14 职场文书
PYTHON使用Matplotlib去实现各种条形图的绘制
2022/03/22 Python