光學字符識別(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 OCR與pytesseract
庫從圖像中提取文本的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封裝,包括Tesseract和CuneiForm。它為將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
安裝pyocr
和pillow
庫:
pip3 install pyocr pillow OR pip install pyocr pillow
這裡有一個Python示例,使用PyOCR和Tesseract從圖像中提取文本:
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,這些庫都提供了強大的文本提取工具。
對於初學者來說,Tesseract和EasyOCR是很好的起點,因為它們易於使用且被廣泛採用。然而,對於更高級或專業的任務,像PaddleOCR、OCRopus和Kraken這樣的庫提供了更大的靈活性和準確性。
Source:
https://www.tecmint.com/python-text-extraction-from-images/