自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

可以提取圖像文本的五大 Python 庫(kù)

開(kāi)發(fā)
在本文中,我將展示一些Python庫(kù),可以讓您輕松從圖像中提取文本,無(wú)需太多麻煩。這些庫(kù)的說(shuō)明后面附有一個(gè)實(shí)際示例。所使用的數(shù)據(jù)集均來(lái)自Kaggle。

光學(xué)字符識(shí)別是一個(gè)古老但依然具有挑戰(zhàn)性的問(wèn)題,涉及從非結(jié)構(gòu)化數(shù)據(jù)中(包括圖像和PDF文檔)檢測(cè)和識(shí)別文本。它在銀行、電子商務(wù)和社交媒體內(nèi)容管理等領(lǐng)域具有廣泛的應(yīng)用。

但與數(shù)據(jù)科學(xué)中的每個(gè)主題一樣,嘗試學(xué)習(xí)如何解決OCR任務(wù)時(shí)存在大量的資源。這就是為什么我寫(xiě)下這篇教程,它可以幫助您入門。

在本文中,我將展示一些Python庫(kù),可以讓您輕松從圖像中提取文本,無(wú)需太多麻煩。這些庫(kù)的說(shuō)明后面附有一個(gè)實(shí)際示例。所使用的數(shù)據(jù)集均來(lái)自Kaggle。

1. pytesseract

它是最流行的Python庫(kù)之一,用于光學(xué)字符識(shí)別。它使用Google的Tesseract-OCR引擎從圖像中提取文本。支持多種語(yǔ)言。

如果想知道是否支持您的語(yǔ)言,請(qǐng)查看這個(gè)鏈接:https://tesseract-ocr.github.io/tessdoc/Data-Files-in-different-versions.html。您只需要幾行代碼將圖像轉(zhuǎn)換為文本:

# installation
!sudo apt install tesseract-ocr
!pip install pytesseract


import pytesseract
from pytesseract import Output
from PIL import Image
import cv2


img_path1 = '00b5b88720f35a22.jpg'
text = pytesseract.image_to_string(img_path1,lang='eng')
print(text)

輸出:

我們還可以嘗試獲取圖像中每個(gè)檢測(cè)到的項(xiàng)目的邊界框坐標(biāo)。

# boxes around character
print(pytesseract.image_to_boxes(img_path1))

結(jié)果:

~ 532 48 880 50 0
...
A 158 220 171 232 0
F 160 220 187 232 0
I 178 220 192 232 0
L 193 220 203 232 0
M 204 220 220 232 0
B 228 220 239 232 0
Y 240 220 252 232 0
R 259 220 273 232 0
O 274 219 289 233 0
N 291 220 305 232 0
H 314 220 328 232 0
O 329 219 345 233 0
W 346 220 365 232 0
A 364 220 379 232 0
R 380 220 394 232 0
D 395 220 410 232 0
...

正如您所注意到的,它估算了每個(gè)字符的邊界框,而不是每個(gè)單詞!如果我們想提取每個(gè)單詞的框,而不是字符,那么應(yīng)該使用image_to_data的另一種方法,而不是image_to_boxes:

# boxes around words
print(pytesseract.image_to_data(img_path1))

這是返回的結(jié)果,并不是很完美。例如,它將“AFILM”解釋為一個(gè)單詞。此外,它沒(méi)有檢測(cè)和識(shí)別輸入圖像中的所有單詞。

2. EasyOCR

輪到另一個(gè)開(kāi)源Python庫(kù):EasyOCR。與pytesseract類似,它支持80多種語(yǔ)言。您可以通過(guò)網(wǎng)絡(luò)演示快速而輕松地嘗試它,無(wú)需編寫(xiě)任何代碼。它使用CRAFT算法來(lái)檢測(cè)文本并使用CRNN作為識(shí)別模型。此外,這些模型是使用Pytorch實(shí)現(xiàn)的。

如果在Google Colab上工作,建議您設(shè)置GPU,這有助于加快此框架的速度。以下是詳細(xì)代碼:

# installation
!pip install easyocr


import easyocr


reader = easyocr.Reader(['en'])
extract_info = reader.readtext(img_path1)


for el in extract_info:
   print(el)

與pytesseract相比,結(jié)果要好得多。對(duì)于每個(gè)檢測(cè)到的文本,我們還有邊界框和置信度級(jí)別。

3. Keras-OCR

Keras-OCR是另一個(gè)專門用于光學(xué)字符識(shí)別的開(kāi)源庫(kù)。與EasyOCR一樣,它使用CRAFT檢測(cè)模型和CRNN識(shí)別模型來(lái)解決任務(wù)。與EasyOCR的不同之處在于,它使用Keras而不是Pytorch實(shí)現(xiàn)。Keras-OCR的唯一不足之處是它不支持非英語(yǔ)語(yǔ)言。

# installation
!pip install keras-ocr -q


import keras_ocr


pipeline = keras_ocr.pipeline.Pipeline()
extract_info = pipeline.recognize([img_path1])
print(extract_info[0][0])

這是提取的第一個(gè)單詞的輸出:

('from',
 array([[761.,  16.],
        [813.,  16.],
        [813.,  30.],
        [761.,  30.]], dtype=float32))

為了可視化所有結(jié)果,我們將輸出轉(zhuǎn)換為Pandas數(shù)據(jù)框:

diz_cols = {'word':[],'box':[]}
for el in extract_info[0]:
    diz_cols['word'].append(el[0])
    diz_cols['box'].append(el[1])
kerasocr_res = pd.DataFrame.from_dict(diz_cols)
kerasocr_res

神奇的是,我們可以看到我們有更清晰和更精確的結(jié)果。

4. TrOCR

TrOCR是一種基于transformers的生成式圖像模型,用于從圖像中檢測(cè)文本。它由編碼器和解碼器組成:TrOCR使用預(yù)訓(xùn)練的圖像變換器作為編碼器和預(yù)訓(xùn)練的文本變換器作為解碼器。有關(guān)更多詳細(xì)信息,請(qǐng)查看論文。Hugging Face平臺(tái)上還有這個(gè)庫(kù)的良好文檔。首先,我們加載預(yù)訓(xùn)練模型:

# installation
!pip install transformers


from transformers import TrOCRProcessor, VisionEncoderDecoderModel
from PIL import Image


model_version = "microsoft/trocr-base-printed"
processor = TrOCRProcessor.from_pretrained(model_version)
model = VisionEncoderDecoderModel.from_pretrained(model_version)
在傳遞圖像之前,我們需要調(diào)整其大小并進(jìn)行規(guī)范化。一旦圖像已經(jīng)轉(zhuǎn)換,我們可以使用.generate()方法提取文本。
image = Image.open(img_path1).convert("RGB")
pixel_values = processor(image, return_tensors="pt").pixel_values
generated_ids = model.generate(pixel_values)
extract_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
print('output: ',extract_text)
# output: 2.50

這與先前的庫(kù)不同,它返回一個(gè)無(wú)意義的數(shù)字。為什么?TrOCR僅包含識(shí)別模型,而沒(méi)有檢測(cè)模型。要解決OCR任務(wù),首先需要檢測(cè)圖像中的對(duì)象,然后提取輸入中的文本。由于它只關(guān)注最后一步,它的性能不佳。要使其正常工作,最好使用邊界框裁剪圖像的特定部分,如下所示:

crp_image = image.crop((750, 3.4, 970, 33.94))
display(crp_image)

然后,我們嘗試再次應(yīng)用模型:

pixel_values = processor(crp_image, return_tensors="pt").pixel_values
generated_ids = model.generate(pixel_values)
extract_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(extract_text)

此操作可以重復(fù)應(yīng)用于圖像中包含的每個(gè)單詞/短語(yǔ)。

5. docTR

最后,我們涵蓋了用于從文檔中檢測(cè)和識(shí)別文本的最后一個(gè)Python包:docTR。它可以將文檔解釋為PDF或圖像,然后將其傳遞給兩階段方法。在docTR中,文本檢測(cè)模型(DBNet或LinkNet)后跟文本識(shí)別的CRNN模型。由于使用了這兩個(gè)深度學(xué)習(xí)框架,這個(gè)庫(kù)要求安裝Pytorch和Tensorflow。

! pip install python-doctr
# for TensorFlow
! pip install "python-doctr[tf]"
# for PyTorch
! pip install "python-doctr[torch]"

然后,我們導(dǎo)入使用docTR的相關(guān)庫(kù)并加載模型,它是一個(gè)兩步方法。實(shí)際上,我們需要指定文本檢測(cè)和文本識(shí)別的DBNet和CRNN的模型,文本檢測(cè)和文本識(shí)別的后端模型:

from doctr.io import DocumentFile
from doctr.models import ocr_predictor
model = ocr_predictor(det_arch = 'db_resnet50',
                      reco_arch = 'crnn_vgg16_bn',
                      pretrained = True
                     )

我們最終讀取文件,使用預(yù)訓(xùn)練模型,并將輸出導(dǎo)出為嵌套字典:

# read file
img = DocumentFile.from_images(img_path1)


# use pre-trained model
result = model(img)


# export the result as a nested dict
extract_info = result.export()
這是非常長(zhǎng)的輸出:
{'pages': [{'page_idx': 0, 'dimensions': (678, 1024), 'orientation': {'value': None, 'confidence': None},...

為更好地可視化,最好使用雙重循環(huán),僅獲取我們感興趣的信息:

for obj1 in extract_info['pages'][0]["blocks"]:
    for obj2 in obj1["lines"]:
        for obj3 in obj2["words"]:
            print("{}: {}".format(obj3["geometry"],obj3["value"]))

docTR是從圖像或PDF中提取有價(jià)值信息的另一個(gè)好選擇。

結(jié)論

五個(gè)工具各有優(yōu)點(diǎn)和缺點(diǎn)。當(dāng)選擇這些軟件包之一時(shí),首先考慮您正在分析的數(shù)據(jù)的語(yǔ)言。如果考慮到非英語(yǔ)語(yǔ)言,EasyOCR可能是最適合的選擇,因?yàn)樗哂懈鼜V泛的語(yǔ)言覆蓋和更好的性能。

責(zé)任編輯:華軒 來(lái)源: 深度學(xué)習(xí)愛(ài)好者
相關(guān)推薦

2024-12-20 09:00:00

Python科學(xué)計(jì)算庫(kù)

2021-01-13 15:13:07

Python開(kāi)發(fā) 工具

2019-06-04 10:40:07

2023-11-28 11:22:51

Pythonitertools庫(kù)工具

2011-02-17 11:18:29

PythonWebRuby

2013-04-10 17:39:52

數(shù)據(jù)庫(kù)安全

2013-05-07 09:24:53

BYOD

2019-08-13 11:39:29

編程語(yǔ)言技術(shù)Python

2021-04-15 09:00:00

數(shù)據(jù)庫(kù)React Nativ開(kāi)發(fā)

2017-12-25 10:34:18

技術(shù)預(yù)測(cè)機(jī)遇

2021-09-01 20:37:59

云數(shù)據(jù)庫(kù)云計(jì)算遷移

2011-01-27 11:55:27

職場(chǎng)

2013-12-03 13:03:22

SDN價(jià)值

2014-08-21 17:35:31

2015-09-21 13:17:55

免費(fèi)開(kāi)源游戲

2014-04-14 10:31:56

DevOps

2015-08-27 10:11:18

2019-04-01 06:23:54

MPLS網(wǎng)絡(luò)廣域網(wǎng)

2019-09-25 09:09:48

Linux內(nèi)核CPU

2021-03-17 08:36:28

XDR終端安全網(wǎng)絡(luò)安全
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)