衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

可以提取圖像文本的5大Python庫

新機(jī)器視覺 ? 來源:小白玩轉(zhuǎn)Python ? 2023-10-30 10:30 ? 次閱讀

主要是了解并掌握文本定位和識別的OCR工具哦~

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

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

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

目錄:

pytesseract

EasyOCR

Keras-OCR

TrOCR

docTR

1.pytesseract

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

如果想知道是否支持您的語言。您只需要幾行代碼將圖像轉(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)

輸出:

ba09b884-762f-11ee-939d-92fbcf53809c.png

我們還可以嘗試獲取圖像中每個檢測到的項目的邊界框坐標(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
...

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

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

ba15d9a2-762f-11ee-939d-92fbcf53809c.png

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

2. EasyOCR

輪到另一個開源Python庫:EasyOCR。與pytesseract類似,它支持80多種語言。您可以通過網(wǎng)絡(luò)演示快速而輕松地嘗試它,無需編寫任何代碼。它使用CRAFT算法來檢測文本并使用CRNN作為識別模型。此外,這些模型是使用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)

ba1e5262-762f-11ee-939d-92fbcf53809c.png

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

3. Keras-OCR

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

# 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])

這是提取的第一個單詞的輸出:

('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

ba22bed8-762f-11ee-939d-92fbcf53809c.png

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

4. TrOCR

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

這與先前的庫不同,它返回一個無意義的數(shù)字。為什么?TrOCR僅包含識別模型,而沒有檢測模型。要解決OCR任務(wù),首先需要檢測圖像中的對象,然后提取輸入中的文本。由于它只關(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)

ba3ed05a-762f-11ee-939d-92fbcf53809c.png

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

5. docTR

最后,我們涵蓋了用于從文檔中檢測和識別文本的最后一個Python包:docTR。它可以將文檔解釋為PDF或圖像,然后將其傳遞給兩階段方法。在docTR中,文本檢測模型(DBNet或LinkNet)后跟文本識別的CRNN模型。由于使用了這兩個深度學(xué)習(xí)框架,這個庫要求安裝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)庫并加載模型,它是一個兩步方法。實(shí)際上,我們需要指定文本檢測和文本識別的DBNet和CRNN的模型,文本檢測和文本識別的后端模型:

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()

這是非常長的輸出:

{'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"]))

ba4cd218-762f-11ee-939d-92fbcf53809c.png

docTR是從圖像或PDF中提取有價值信息的另一個好選擇。

結(jié)論

五個工具各有優(yōu)點(diǎn)和缺點(diǎn)。當(dāng)選擇這些軟件包之一時,首先考慮您正在分析的數(shù)據(jù)的語言。如果考慮到非英語語言,EasyOCR可能是最適合的選擇,因?yàn)樗哂懈鼜V泛的語言覆蓋和更好的性能。免責(zé)聲明:該數(shù)據(jù)集根據(jù)知識共享署名4.0國際許可(CC by 4.0)許可。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4825

    瀏覽量

    69046
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4807

    瀏覽量

    85037
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1209

    瀏覽量

    24833
  • OCR
    OCR
    +關(guān)注

    關(guān)注

    0

    文章

    146

    瀏覽量

    16427

原文標(biāo)題:可以提取圖像文本的 5 大 Python 庫

文章出處:【微信號:vision263com,微信公眾號:新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    常用的Python圖像處理介紹

    本文主要介紹了一些簡單易懂最常用的 Python 圖像處理。
    的頭像 發(fā)表于 08-19 10:54 ?2110次閱讀

    【建議收藏】Python大全

    (需要html5lib)。sanitize -為混亂的數(shù)據(jù)世界帶來清明。文本處理用于解析和操作簡單文本。楊通用difflib - (Pytho
    發(fā)表于 09-06 15:58

    如何在Python中將語音轉(zhuǎn)換為文本

      語音識別是計算機(jī)軟件識別口語中的單詞和短語,并將其轉(zhuǎn)換為可讀文本的能力。那么如何在Python中將語音轉(zhuǎn)換為文本?如何使用SpeechRecognition
    發(fā)表于 07-29 18:12

    如何從HTML或XML文件中提取數(shù)據(jù)的Python爬蟲Beautiful Soup概述

    Beautiful Soup是一個可以從HTML或XML文件中提取數(shù)據(jù)的Python,簡單來說,它能將HTML的標(biāo)簽文件解析成樹形結(jié)構(gòu),然后方便地獲取到指定標(biāo)簽的對應(yīng)屬性。
    的頭像 發(fā)表于 07-29 09:56 ?2.6w次閱讀

    如何使用Python編寫能夠從原始文本提取信息的程序

    自然語言處理(Natural Language Processing,NLP)是人工智能的子領(lǐng)域之一,其重點(diǎn)是使計算機(jī)能夠理解和處理人類語言。在本文中,我們將知曉NLP是如何工作的,并學(xué)習(xí)如何使用Python編寫能夠從原始文本提取
    的頭像 發(fā)表于 08-13 10:02 ?1.1w次閱讀

    Python圖像處理Pillow入門教程和代碼資料免費(fèi)下載

    Pillow 是Python 里的圖像處理(PIL:Python Image Library),提供了了廣泛的文件格式支持,強(qiáng)大的圖像處理
    發(fā)表于 01-11 16:20 ?30次下載
    <b class='flag-5'>Python</b><b class='flag-5'>圖像</b>處理<b class='flag-5'>庫</b>Pillow入門教程和代碼資料免費(fèi)下載

    Python教程之如何使用使用PIL圖像處理的資料說明

    圖像處理是一門應(yīng)用非常廣的技術(shù),而擁有非常豐富第三方擴(kuò)展Python 當(dāng)然不會錯過這一門盛宴。PIL (Python Imaging Library)是
    發(fā)表于 01-18 17:01 ?15次下載
    <b class='flag-5'>Python</b>教程之如何使用使用PIL<b class='flag-5'>庫</b>做<b class='flag-5'>圖像</b>處理的資料說明

    如何使用TensorFlow Lite從Android設(shè)備圖像提取文本

    您展示如何使用 TensorFlow Lite 從 Android 設(shè)備上的圖像提取文本。我們將引導(dǎo)您完成最近開源的光學(xué)字符識別 (OCR) Android 參考應(yīng)用的關(guān)鍵步驟,您可參考該處獲取完整代碼。在下方動畫中,
    的頭像 發(fā)表于 11-02 15:34 ?3477次閱讀

    如何使用OpenCV和Python圖像提取感興趣區(qū)域

    今天我們將一起探究如何使用OpenCV和Python圖像提取感興趣區(qū)域(ROI)。 在之間的文章中,我們完成了圖像邊緣提取,例
    的頭像 發(fā)表于 02-07 14:42 ?1902次閱讀

    分享5個用于圖像處理的Python

    特征。 在今天的文章中,我們將介紹5個最好的Python,它們可能會幫助你執(zhí)行圖像處理,如裁剪、縮放等。
    的頭像 發(fā)表于 02-08 16:23 ?1423次閱讀
    分享<b class='flag-5'>5</b>個用于<b class='flag-5'>圖像</b>處理的<b class='flag-5'>Python</b><b class='flag-5'>庫</b>

    關(guān)于python中非常實(shí)用的一個圖像處理 1

    PIL:Python Imaging Library,是Python環(huán)境下最受歡迎的圖像處理,木有之一。然而,在Python2.7之后不再
    的頭像 發(fā)表于 02-08 17:18 ?1387次閱讀

    關(guān)于python中非常實(shí)用的一個圖像處理 2

    PIL:Python Imaging Library,是Python環(huán)境下最受歡迎的圖像處理,木有之一。然而,在Python2.7之后不再
    的頭像 發(fā)表于 02-08 17:18 ?1141次閱讀

    如何安裝常用Python

    Python作為一種流行的編程語言,擁有豐富的第三方資源,這些可以幫助開發(fā)者輕松實(shí)現(xiàn)各種功能,從數(shù)據(jù)分析到Web開發(fā),從機(jī)器學(xué)習(xí)到圖像
    的頭像 發(fā)表于 04-14 12:11 ?1214次閱讀

    Newspaper:用于提取和整理文章的python

    Newspaper 是一個很棒的python,用于提取和整理文章。 它有以下的優(yōu)點(diǎn): 多線程文章下載框架 識別新聞網(wǎng)址 從html提取文本
    的頭像 發(fā)表于 10-30 14:24 ?801次閱讀

    Newspaper:能下載38種語言新聞文章的 Python 模塊

    Newspaper 是一個很棒的python,用于提取和整理文章。 它有以下的優(yōu)點(diǎn): 多線程文章下載框架 識別新聞網(wǎng)址 從html提取文本
    的頭像 發(fā)表于 10-31 11:09 ?492次閱讀
    松溪县| 百家乐经验博彩正网| 大发888交流心得| 百家乐官网代理条件| 多伦多百家乐的玩法技巧和规则 | 澳门百家乐赌博技巧| 如何玩百家乐官网扑克| 百家乐平注7s88| 百家乐官网的关键技巧| 澳门百家乐网上娱乐场开户注册| 百家乐官网打印机分析| 百家乐必赢| 玩百家乐官网游戏的最高技巧| 大发888ber| 真钱百家乐送钱| 石楼县| 百家乐已破解的书籍| 澳门百家乐官网指数| 斗地主百家乐的玩法技巧和规则| 百家乐官网代理条件| 德州扑克小说| 星河百家乐现金网| 百家乐官网娱乐城代理| E世博开户| 尊龙百家乐娱乐平台| 百家乐官网打揽法| 同城乐| 新世百家乐的玩法技巧和规则| 中国百家乐官网的玩法技巧和规则| 皇家娱乐城| 百家乐在线娱乐场| 新澳门百家乐官网软件下载| 九乐棋牌下载| 百家乐tt娱乐场| 米其林百家乐官网的玩法技巧和规则| 西宁市| 大发888代理平台| 圣淘沙百家乐游戏| 金域百家乐官网娱乐城| 博乐娱乐城| 速博百家乐的玩法技巧和规则|