從圖像中提取文本的前7個Python OCR庫

光學字符識別OCR)是一種從圖像、掃描文檔甚至手寫筆記中提取可讀文本的技術。在Python中,OCR工具在多年來已經有了顯著的進步,並且在最新版本中,這些庫現在提供了更強大、高效的解決方案。

本文將介紹Python中排名前七的OCR庫,突出它們的優勢、獨特功能以及代碼示例,幫助您入門。

1. Tesseract OCR(pytesseract)

Tesseract無疑是Python生態系統中最受歡迎和廣泛使用的OCR庫。最初由HP開發,現在由Google維護,Tesseract提供了100多種語言的高質量OCR功能。

主要特點:

  • 開源且免費使用。
  • 支持多種語言,包括非拉丁字母。
  • 識別圖像、掃描文檔和PDF中的文本。
  • 可通過自定義訓練數據定制化以應專業用例。
  • 與像OpenCV這樣的預處理工具配合使用可提高準確性。

要在Linux上安裝Tesseract OCR,請依照您的發行版執行以下步驟:

sudo apt install tesseract-ocr     [On Debian, Ubuntu and Mint]
sudo yum install tesseract         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo emerge -a sys-apps/tesseract  [On Gentoo Linux]
sudo apk add tesseract             [On Alpine Linux]
sudo pacman -S tesseract           [On Arch Linux]
sudo zypper install tesseract      [On OpenSUSE]    
sudo pkg install tesseract         [On FreeBSD]

安裝完Tesseract後,如果您想要與Python一起使用,您需要使用pip套件管理器安裝pytesseract套件。

pip3 install pytesseract
OR
pip install pytesseract

以下是一個使用Tesseract OCRpytesseract庫從圖像中提取文本的Python代碼範例。

import pytesseract
from PIL import Image

# Load an image
img = Image.open("image_sample.png")

# Use Tesseract to extract text
text = pytesseract.image_to_string(img)

# Print the extracted text
print(text)

2. EasyOCR

EasyOCR是另一個優秀的Python OCR庫,支援80多種語言,對於初學者來說易於使用。它基於深度學習技術,是那些希望利用現代OCR技術的人的絕佳選擇。

主要特點:

  • 使用深度學習模型實現高準確度。
  • 支援廣泛的語言。
  • 能夠檢測垂直和多語言圖像中的文本。
  • API簡單易懂。

要在Linux上安裝EasyOCR,您可以根據您的發行版使用以下pip命令。

pip3 install easyocr
OR
pip install easyocr

安裝完成後,您可以使用EasyOCR從圖像中提取文本。

import easyocr

# Initialize the OCR reader
reader = easyocr.Reader(['en'])

# Extract text from an image
result = reader.readtext('image_sample.png')

# Print the extracted text
for detection in result:
    print(detection[1])

3. OCRopus

OCRopus是由Google開發的開源OCR系統。儘管它主要用於歷史文獻和書籍,OCRopus也可應用於各種文本提取任務。

主要特點:

  • 專門用於文檔版面分析和文本提取。
  • 具有模塊化設計,便於定製。
  • 可處理多頁文檔和大型數據集。

以下是一個從圖像中提取文本的Python代碼示例。

import subprocess

# Use OCRopus to process an image
subprocess.run(['ocropus', 'identify', 'image_sample.png'])

4. PyOCR

PyOCR是幾個OCR引擎的Python封裝,包括TesseractCuneiForm。它為將OCR功能集成到Python應用程序提供了一個簡單的界面。

主要特點:

  • 可以與多個OCR引擎進行交互。
  • 提供了簡單的文本提取API。
  • 可與圖像預處理庫結合以改善結果。

PyOCR需要Tesseract(OCR引擎)和Pillow(圖像處理庫)。您可以使用以下命令安裝它們:

sudo apt install tesseract-ocr     [On Debian, Ubuntu and Mint]
sudo yum install tesseract         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo emerge -a sys-apps/tesseract  [On Gentoo Linux]
sudo apk add tesseract             [On Alpine Linux]
sudo pacman -S tesseract           [On Arch Linux]
sudo zypper install tesseract      [On OpenSUSE]    
sudo pkg install tesseract         [On FreeBSD]

現在,您可以使用pip安裝pyocrpillow庫:

pip3 install pyocr pillow
OR
pip install pyocr pillow

這裡有一個Python示例,使用PyOCRTesseract從圖像中提取文本:

import pyocr
from PIL import Image

# Choose the OCR tool (Tesseract or CuneiForm)
tool = pyocr.get_available_tools()[0]

# Load the image
img = Image.open('image_sample.png')

# Extract text from the image
text = tool.image_to_string(img)

# Print the extracted text
print(text)

5. PaddleOCR

PaddleOCR是由PaddlePaddle開發的OCR庫,是一個深度學習框架。它支持80多種語言,由於使用了深度學習模型,具有尖端的準確性。

主要功能:

  • 高性能,特別適用於具有複雜背景的圖像。
  • 支持文本檢測、識別和版面分析。
  • 包含多種語言的預訓練模型。

要在Linux中安裝PaddleOCR,請使用:

pip3 install paddlepaddle paddleocr
OR
pip install paddlepaddle paddleocr

這裡有一個Python示例,使用paddleocr庫從圖像中提取文本:

from paddleocr import PaddleOCR

# Initialize the OCR
ocr = PaddleOCR(use_angle_cls=True, lang='en')

# Perform OCR on an image
result = ocr.ocr('image_sample.png', cls=True)

# Print the extracted text
for line in result[0]:
    print(line[1])

6. Kraken

Kraken是專門設計用於歷史和多語言文本的高性能OCR庫。它建立在OCRopus之上,提供了用於複雜版面和文本提取的附加功能。

主要功能:

  • 最適合於舊書籍和多語言OCR。
  • 處理複雜的文本版面和歷史字體。
  • 使用機器學習以提高識別準確性。

在Linux中安裝 Kraken,請使用:

pip3 install kraken
OR
pip install kraken

以下是一個使用 kraken 函式庫從圖像中提取文本的Python示例:

import kraken

# Load the model and recognize text
text = kraken.binarize("image_sample.png")

# Print the recognized text
print(text)

7. Textract (AWS)

AWS Textract是亞馬遜基於雲端的OCR服務,可以分析文件和表格,並以高精確度提取文本。它與其他AWS服務無縫集成。

主要特點:

  • 具有可擴展解決方案的基於雲端的OCR。
  • 支持文件結構分析,包括表格和表單。
  • 與AWS服務集成,以進行進一步的數據處理。

在Linux中安裝 Textract,請使用:

pip3 install boto3
OR
pip install boto3

下面是一個示例Python腳本,使用 AWS Textract 從文件(例如掃描的PDF或圖像文件)中提取文本。

import boto3

# Initialize a Textract client
client = boto3.client('textract')

# Path to the image or PDF file you want to analyze
file_path = 'path_to_your_file.png'  # Replace with your file path

# Open the file in binary mode
with open(file_path, 'rb') as document:
    # Call Textract to analyze the document
    response = client.detect_document_text(Document={'Bytes': document.read()})

# Print the extracted text
for item in response['Blocks']:
    if item['BlockType'] == 'LINE':
        print(item['Text'])
結論

在Python中選擇正確的OCR庫取決於具體的用例、語言要求以及您處理的文檔的複雜性。無論您是在處理歷史文檔、多語言文本還是簡單的掃描PDF,這些庫都提供了強大的文本提取工具。

對於初學者來說,TesseractEasyOCR是很好的起點,因為它們易於使用且被廣泛採用。然而,對於更高級或專業的任務,像PaddleOCROCRopusKraken這樣的庫提供了更大的靈活性和準確性。

Source:
https://www.tecmint.com/python-text-extraction-from-images/