首頁技術(shù)文章正文

python中pytesseract和PIL庫用法

更新時(shí)間:2021-06-25 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

Tesseraet是一個(gè)命令行工具,安裝后只能通過tsseraet命令在Python的外部運(yùn)行,而不能通過import語句引人使用。為了解決上述問題,Python 提供了支持Tssraec-OCR引擎的Python版本的庫pytesseract。

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

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

(2)安裝Python的圖像處理庫PIL(或Pillow )。

(3)安裝谷歌的OCR識(shí)別引擎Tesseract-0CR。

下面將針對(duì)PIL和pytesseract的相關(guān)內(nèi)容進(jìn)行講解。

pytesseract庫概述

pytesseract是一款用于光學(xué)字符識(shí)別(OCR)的Python工具,即從圖片中識(shí)別和讀取其中嵌人的文字。ptesseract是對(duì)Tesseraet-OCR的一層封裝,同時(shí)也可以單獨(dú)作為Tesseract引擎的調(diào)用腳本,支持使用PIL庫(Python Imaging Library)讀取各種圖片文件類型,包括jpeg、png、gif、bmp、tiff 等格式。作為腳本使用時(shí),pytesseract將打印識(shí)別出的文字,而不是將其寫入文件。

在pytesseract庫中,提供了如下函數(shù)將圖像轉(zhuǎn)換成字符串:

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

上述函數(shù)用于在指定的圖像上運(yùn)行tesseract,首先將圖像寫人到磁盤,然后在圖像上運(yùn)行tesseract命令進(jìn)行識(shí)別讀取,最后刪除臨時(shí)的文件。其中,image表示圖像,lang表示語言,默認(rèn)使用英文。如果boxes設(shè)為True,那么batch.nochop makebox命令被添加到tesseract調(diào)用中;如果設(shè)置了config,則配置會(huì)添加到命令中,例如config = - psm 6。


PIL庫概述

圖像處理是一門應(yīng)用非常廣泛的技術(shù),擁有豐富第三方打擴(kuò)展庫的Python語言也具有此項(xiàng)功能。其中,PIL(Python Imaging Library )是Python最常用的圖像處理庫,它不僅提供了廣泛的文件格式支持,而且具有強(qiáng)大的圖像處理功能。

PIL庫中一個(gè)非常重要的類是Image類,該類定義在與它同名的模塊中。創(chuàng)建Image類對(duì)象的方法有很多種,包括從文件中讀取得到,或從其他圖像經(jīng)過處理得到,或者創(chuàng)建全新的。下面對(duì)PIL庫的一些常用函數(shù)和方法進(jìn)行簡單介紹。

1.new()函數(shù)

new()函數(shù)的定義格式如下:

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

上述函數(shù)用于創(chuàng)建一個(gè)新圖像。其中,mode表示模式,size表示大小。當(dāng)創(chuàng)建單通道圖像時(shí),color是單個(gè)值;當(dāng)創(chuàng)建多通道圖像時(shí),color是一個(gè)元組。若省略了color參數(shù),則圖像被填充成全黑;若color參數(shù)的值為None,則圖像不被初始化。


2. open()函數(shù)

open()函數(shù)的定義格式如下:

 open(fp, mode="r")


上述函數(shù)可以打開并識(shí)別給定的圖像文件。其中,fp表示字符串形式的文件名稱,mode參數(shù)可以省略,但只能設(shè)置為“r”。如果載人文件失敗,則會(huì)引起一個(gè)IOError異常,否則返回一個(gè)Image類對(duì)象。

實(shí)際上,上述函數(shù)會(huì)被延遲操作,實(shí)際的圖像數(shù)據(jù)并不會(huì)馬上從文件中讀取,而是等到需要處理這些數(shù)據(jù)時(shí)才被讀取。這時(shí),可以調(diào)用load0函數(shù)進(jìn)行強(qiáng)制加載。

創(chuàng)建圖像對(duì)象后,可以通過Image類提供的方法處理這些圖像。為了讓大家更好地理解,下面以常用的兩個(gè)方法(save()和point()方法)進(jìn)行說明。

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

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

上述方法將以特定的圖片格式保存圖片。大多數(shù)情況下,可以省略圖片的格式。這時(shí),該方法會(huì)根據(jù)文件的擴(kuò)展名來選擇相應(yīng)的圖片格式。具體示例代碼如下:

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

或者:

save("test.jpg")


(2) point()方法:可以對(duì)圖像的像素值進(jìn)行變換。其語法格式如下:

point(self, lut, mode=None)

在大多數(shù)場合中,可以使用函數(shù)(帶一個(gè)參數(shù))作為參數(shù)傳遞給point()方法,圖像的每個(gè)像素都會(huì)使用這個(gè)函數(shù)進(jìn)行變換。示例代碼如下:

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

需要注意的是,如果圖像的模式為“I”(整數(shù))或“F”(浮點(diǎn)數(shù)),則必須使用函數(shù),且必須具有以下格式:

argument (參數(shù)) *scale (倍率) +offset(偏移量)

例如,映射浮點(diǎn)圖像的示例如下:

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


分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!