首页技术文章正文

python中pytesseract和PIL库用法

更新时间:2021-06-25 来源:黑马程序员 浏览量:

IT培训班

Tesseraet是一个命令行工具,安装后只能通过tsseraet命令在Python的外部运行,而不能通过import语句引人使用。为了解决上述问题,Python 提供了支持Tssraec-OCR引擎的Python版本的库pytesseract。

安装pytesseract需要遵守如下要求:

(1)Python的版本必须是python 2.5+或python 3.x。

(2)安装Python的图像处理库PIL(或Pillow )。

(3)安装谷歌的OCR识别引擎Tesseract-0CR。

下面将针对PIL和pytesseract的相关内容进行讲解。

pytesseract库概述

pytesseract是一款用于光学字符识别(OCR)的Python工具,即从图片中识别和读取其中嵌人的文字。ptesseract是对Tesseraet-OCR的一层封装,同时也可以单独作为Tesseract引擎的调用脚本,支持使用PIL库(Python Imaging Library)读取各种图片文件类型,包括jpeg、png、gif、bmp、tiff 等格式。作为脚本使用时,pytesseract将打印识别出的文字,而不是将其写入文件。

在pytesseract库中,提供了如下函数将图像转换成字符串:

image_to_string(image, lang=None, boxes=False, config=None)

上述函数用于在指定的图像上运行tesseract,首先将图像写人到磁盘,然后在图像上运行tesseract命令进行识别读取,最后删除临时的文件。其中,image表示图像,lang表示语言,默认使用英文。如果boxes设为True,那么batch.nochop makebox命令被添加到tesseract调用中;如果设置了config,则配置会添加到命令中,例如config = - psm 6。


PIL库概述

图像处理是一门应用非常广泛的技术,拥有丰富第三方打扩展库的Python语言也具有此项功能。其中,PIL(Python Imaging Library )是Python最常用的图像处理库,它不仅提供了广泛的文件格式支持,而且具有强大的图像处理功能。

PIL库中一个非常重要的类是Image类,该类定义在与它同名的模块中。创建Image类对象的方法有很多种,包括从文件中读取得到,或从其他图像经过处理得到,或者创建全新的。下面对PIL库的一些常用函数和方法进行简单介绍。

1.new()函数

new()函数的定义格式如下:

Image.new(mode, size, color=0)

上述函数用于创建一个新图像。其中,mode表示模式,size表示大小。当创建单通道图像时,color是单个值;当创建多通道图像时,color是一个元组。若省略了color参数,则图像被填充成全黑;若color参数的值为None,则图像不被初始化。


2. open()函数

open()函数的定义格式如下:

 open(fp, mode="r")


上述函数可以打开并识别给定的图像文件。其中,fp表示字符串形式的文件名称,mode参数可以省略,但只能设置为“r”。如果载人文件失败,则会引起一个IOError异常,否则返回一个Image类对象。

实际上,上述函数会被延迟操作,实际的图像数据并不会马上从文件中读取,而是等到需要处理这些数据时才被读取。这时,可以调用load0函数进行强制加载。

创建图像对象后,可以通过Image类提供的方法处理这些图像。为了让大家更好地理解,下面以常用的两个方法(save()和point()方法)进行说明。

(1) save()方法,其语法格式如下:

save(self, fp, format=None, **params)

上述方法将以特定的图片格式保存图片。大多数情况下,可以省略图片的格式。这时,该方法会根据文件的扩展名来选择相应的图片格式。具体示例代码如下:

image.save("test.jpg",'JPG")

或者:

save("test.jpg")


(2) point()方法:可以对图像的像素值进行变换。其语法格式如下:

point(self, lut, mode=None)

在大多数场合中,可以使用函数(带一个参数)作为参数传递给point()方法,图像的每个像素都会使用这个函数进行变换。示例代码如下:

# 每个像素乘以1.2
out=im.point(lambda i: i *1.2)

需要注意的是,如果图像的模式为“I”(整数)或“F”(浮点数),则必须使用函数,且必须具有以下格式:

argument (参数) *scale (倍率) +offset(偏移量)

例如,映射浮点图像的示例如下:

out=im.point(lambda i:i*1.2+10)


分享到:
在线咨询 我要报名
和我们在线交谈!