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 20 Python
基于Python在MacOS上安装robotframework-ride
Dec 28 Python
windows上安装python3教程以及环境变量配置详解
Jul 18 Python
Python lambda表达式filter、map、reduce函数用法解析
Sep 11 Python
Python中的引用和拷贝实例解析
Nov 14 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
Feb 25 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
Feb 26 Python
在Django中预防CSRF攻击的操作
Mar 13 Python
Python+PyQt5实现灭霸响指功能
May 25 Python
python中requests库+xpath+lxml简单使用
Apr 29 Python
python 命令行传参方法总结
May 25 Python
 python中的元类metaclass详情
May 30 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/10/09 PHP
使用字符串函数输出整数化的PHP版本号
2006/10/09 PHP
php创建基本身份认证站点的方法详解
2013/06/08 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
CodeIgniter生成静态页的方法
2016/05/17 PHP
用javascript控制iframe滚动的代码
2007/04/10 Javascript
JavaScript入门教程(7) History历史对象
2009/01/31 Javascript
Javascript 圆角div的实现代码
2009/10/15 Javascript
基于jquery的无刷新分页技术
2011/06/11 Javascript
JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
2013/11/28 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
Angular2 Service实现简单音乐播放器服务
2017/02/24 Javascript
JavaScript 用fetch 实现异步下载文件功能
2017/07/21 Javascript
vue2.0 elementUI制作面包屑导航栏
2018/02/22 Javascript
Python人脸识别初探
2017/12/21 Python
python实现生成字符串大小写字母和数字的各种组合
2019/01/01 Python
python-itchat 统计微信群、好友数量,及原始消息数据的实例
2019/02/21 Python
PyQt5实现简单数据标注工具
2019/03/18 Python
Spy++的使用方法及下载教程
2021/01/29 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
Html5无刷新修改browser Url的方法
2014/01/15 HTML / CSS
英格兰足协官方商店:England Store
2019/07/12 全球购物
幼师自荐信范文
2013/10/06 职场文书
行政助理岗位职责范文
2013/12/03 职场文书
会计学生自我鉴定
2014/02/06 职场文书
令人印象深刻的自荐信
2014/05/25 职场文书
捐书倡议书
2014/08/29 职场文书
债务纠纷委托书范本
2014/10/14 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
教师党的群众路线教育实践活动个人整改措施
2014/11/04 职场文书
大学毕业生自我评价
2015/03/02 职场文书
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis
我去timi了,一起去timi是什么意思?
2022/04/13 杂记