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

python中pytesseract和PIL庫用法

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

IT培訓(xùn)班

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的相關(guān)內(nèi)容進行講解。

pytesseract庫概述

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

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

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

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


PIL庫概述

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

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

1.new()函數(shù)

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

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

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


2. open()函數(shù)

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

 open(fp, mode="r")


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

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

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

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

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

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

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

或者:

save("test.jpg")


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

point(self, lut, mode=None)

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

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

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

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

例如,映射浮點圖像的示例如下:

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


分享到:
在線咨詢 我要報名
和我們在線交談!