[OpenCV][Python]手把教如何使用Tesseract OCR辨識

閱讀時間約 1 分鐘

以下是如何使用 Tesseract OCR 來辨識圖像中的文字的教學。

涵蓋了安裝 Tesseract、基本使用方法,以及如何在 Python 中進行整合。

1. 安裝 Tesseract

首先,需要安裝 Tesseract OCR 工具。這裡提供針對 Windows、macOS 和 Linux 的安裝步驟。

Windows

前往 Tesseract GitHub 頁面下載最新版的 Windows 安裝包。

  1. 安裝完成後,將 Tesseract 的安裝路徑添加到系統的環境變數中(例如:C:\Program Files\Tesseract-OCR)。
    將 Tesseract 的安裝路徑添加到系統的環境變數中,主要是為了讓系統在任何地方都能夠直接找到並執行 Tesseract
環境變數新增路徑

環境變數新增路徑

  1. 驗證安裝: 打開命令提示字元 (Command Prompt),輸入 tesseract -v 應顯示 Tesseract 的版本資訊。

macOS

在 macOS 上可以使用 Homebrew 進行安裝:

brew install tesseract

Linux (如 Ubuntu)

在 Linux 系統上可以通過 apt 進行安裝:

sudo apt install tesseract-ocr

2. 安裝 Tesseract 的 Python 介面 (pytesseract)

接下來,我們需要安裝 pytesseract,這是一個 Python 的介面,用於與 Tesseract 一起使用。

pip install pytesseract

還需要安裝 OpenCV 或 PIL(Pillow) 來讀取圖像文件。這裡我們使用 OpenCV:

pip install opencv-python

3. 基本的 Tesseract OCR 使用方式

現在,假設我們有一個名為 image.png 的圖像文件,我們將使用 Tesseract 來辨識圖像中的文字。

命令行使用 Tesseract

在命令行中,你可以簡單地運行 Tesseract 命令來辨識圖像:

tesseract image.png output

這會將 image.png 中的文字提取出來並儲存到 output.txt 文件中。

raw-image


指定語言

如果你想要指定 Tesseract 使用特定語言來進行 OCR,可以使用 -l 參數。例如,指定繁體中文:

tesseract image_1.png output -l chi_tra

這會要求 Tesseract 使用繁體中文語言包來進行文字識別。事先需先下載語言包放到指令資料夾,語言包路徑

語言包指定路徑

語言包指定路徑

看起來對於七這個文字辨識不佳,但螃蟹好棒阿~ 辨識的不錯

raw-image

4. 在 Python 中使用 Tesseract OCR

接下來,我們將示範如何在 Python 中使用 Tesseract OCR。

範例程式碼

import cv2
import pytesseract

# 如果 Tesseract 沒有在系統路徑,指定其安裝路徑
# Windows 上可能需要以下設置:
# pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

# 讀取圖像文件
image = cv2.imread('image.png')

# 使用 Tesseract 辨識圖像中的文字
text = pytesseract.image_to_string(image, lang='chi_tra') # 'chi_tra' 是繁體中文的語言代碼

# 打印辨識出的文字
print(text)

但直接讀圖,螃蟹就辨識不了。

raw-image

5. 圖像處理前的預處理(提高 OCR 準確性)

為了提高 Tesseract 的辨識效果,我們可以在進行 OCR 之前對圖像進行預處理。例如,調整對比度、灰度化等。

範例:使用 OpenCV 對圖像進行預處理

import cv2
import pytesseract

# 讀取圖像
image = cv2.imread('image.png')

# 將圖像轉為灰度
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 將灰度圖像進行二值化處理(黑白圖像)
_, threshold_image = cv2.threshold(gray_image, 150, 255, cv2.THRESH_BINARY)

# 使用 Tesseract 進行 OCR
text = pytesseract.image_to_string(threshold_image, lang='chi_tra')

# 打印辨識出的文字
print(text)

只多辨識出一個 '螃' 字,看來蟹這個字,比較難讀

raw-image

原因是因為在 CMD 下直接執行 Tesseract 時,它可能自動使用了一些預設的參數或處理方式,而 Python 使用 pytesseract 調用 Tesseract 時,這些參數需要明確指定。

config = '--oem 2 --psm 3' 
text = pytesseract.image_to_string(threshold_image, lang='chi_tra', config=config)

Tesseract 的 --oem 參數指定了使用哪種 OCR 引擎模型。具體來說,--oem 參數有以下幾個選項:

  • 0: 使用傳統的 OCR 引擎 (基於圖像特徵的引擎)。
  • 1: 使用基於 LSTM(長短期記憶網絡)的新 OCR 引擎。
  • 2: 同時使用傳統引擎和 LSTM 引擎,進行混合模式的識別。
  • 3: 僅使用 LSTM 引擎(Tesseract 4.0 以後的預設模式)。

使用了--oem 2 才可辨識到 '螃'

raw-image

6. 檢測多語言文字

如果圖像中包含多種語言的文字,可以讓 Tesseract 同時檢測多種語言。比如你有一個包含英文和繁體中文的文件,你可以同時指定這兩個語言。

text = pytesseract.image_to_string(image, lang='eng+chi_tra')
print(text)
raw-image


謝謝大家~ 底下有相關文章可以參考,若還需要補充或測試什麼 也歡迎留言


其他相關文章

[OpenCV][Python]實測tesseract OCR的Best模型與Fast模型

[OpenCV][Python]實測tesseract OCR縮放到最佳高度可提高辨識率嗎?

[OpenCV][Python]實測tesseract OCR增加間隔可提升辨識率

[OCR][Python]tesseract 辨識模型Fine tune

[OCR][Python]測試tesseract與easyOCR誰比較準跟快

[OCR_應用]Tesseract-OCR_Config說明

[OCR_應用]Tesseract-OCR_擷取字元面積

119會員
200內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
本文主要介紹使用cv2.findContours找到圖像中最大物件的輪廓,再用cv2.minAreaRect取得該輪廓的最小矩形與旋轉角度,並將這些資訊印上圖像中的右上角。
在OpenCV中可以利用 cv2.findContours 判斷物件的形狀,可以通過計算輪廓的某些特徵來實現的。 本文主要利用cv2.arcLength與cv2.approxPolyDP來判斷三角形,正方形,矩形。檢查是否為圓形,則用通過輪廓面積和邊界框面積的比率來判斷。
先前文章有使用連通域分析來印出物件的位置及高寬面積及達成物件定位等功能。 [OpenCV應用][Python]利用連通域分析達成物件定位 [OpenCV基礎][Python]connectedComponent連通域分析 [OpenCV][Python]印出圖像中OCR面積及位置 這次我們將
本文主要使用pyzbar 與pylibdmtx來讀取條碼,並用靜態方法將這兩個套件的讀碼功能包裝起來,因應不同需求,調用相對應的方法來讀取QR code,一維條碼,Data Matrix。最後再將讀到的條碼資料與框選條碼位子於原圖上。
這次我們使用影像差分處理,用來檢測圖像中的瑕疵。 首先定義瑕疵樣態,以下原圖為例,較淡的可能是錫油的反光,較亮的部分可能是瑕疵或者是刮痕造成,那我們的目的就是檢測出這些瑕疵或者是刮痕。
yield 在影像處理中也是蠻好用的,特別是當你需要處理大量影像或希望逐步處理影像時。它可以用來生成一個影像流,讓你能夠一次處理一張影像而不需要一次性加載所有影像進記憶體。 yield 是 Python 中的一個關鍵字,用於創建生成器(generator)。 生成器是一種特殊類型的迭代器,允許你
本文主要介紹使用cv2.findContours找到圖像中最大物件的輪廓,再用cv2.minAreaRect取得該輪廓的最小矩形與旋轉角度,並將這些資訊印上圖像中的右上角。
在OpenCV中可以利用 cv2.findContours 判斷物件的形狀,可以通過計算輪廓的某些特徵來實現的。 本文主要利用cv2.arcLength與cv2.approxPolyDP來判斷三角形,正方形,矩形。檢查是否為圓形,則用通過輪廓面積和邊界框面積的比率來判斷。
先前文章有使用連通域分析來印出物件的位置及高寬面積及達成物件定位等功能。 [OpenCV應用][Python]利用連通域分析達成物件定位 [OpenCV基礎][Python]connectedComponent連通域分析 [OpenCV][Python]印出圖像中OCR面積及位置 這次我們將
本文主要使用pyzbar 與pylibdmtx來讀取條碼,並用靜態方法將這兩個套件的讀碼功能包裝起來,因應不同需求,調用相對應的方法來讀取QR code,一維條碼,Data Matrix。最後再將讀到的條碼資料與框選條碼位子於原圖上。
這次我們使用影像差分處理,用來檢測圖像中的瑕疵。 首先定義瑕疵樣態,以下原圖為例,較淡的可能是錫油的反光,較亮的部分可能是瑕疵或者是刮痕造成,那我們的目的就是檢測出這些瑕疵或者是刮痕。
yield 在影像處理中也是蠻好用的,特別是當你需要處理大量影像或希望逐步處理影像時。它可以用來生成一個影像流,讓你能夠一次處理一張影像而不需要一次性加載所有影像進記憶體。 yield 是 Python 中的一個關鍵字,用於創建生成器(generator)。 生成器是一種特殊類型的迭代器,允許你
你可能也想看
Google News 追蹤
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
在tesseract-ocr辨識應用中,建議的留白邊框為10pixl,若Label列印的太剛好,沒有任何的邊框時,就會辨識不到文字。 本文將帶大家如何讓圖像增加邊框。 結果圖 示意的比較誇張,我讓邊框增加100pixl,圖片大小原為211*80。
Thumbnail
呈上篇文章,針對單排的圖像文字增加間隔,但如果文字是雙排呢 [OpenCV][Python]OCR分割及增加間隔[單排文字]
Thumbnail
在文字辨識中,適當的增加一文字彼此間的間隔是有幫助於辨識的,原因在大多數OCR引擎在處理字符時會依賴空白區域來區分不同的字符。如果字符之間的間隔過小,OCR引擎可能會將相鄰的字符誤認為一個單一的字符或難以正確切割字符。增加間隔可以幫助OCR引擎更準確地識別和切割每個字符。 本文說明如何增加OCR間
Thumbnail
在某些特殊情況下,需要將圖片進行黑白反轉,例如Tesseract(OCR辨識引擎)就有建議黑底白字的狀況下辨識率較高。 本文將使用 NumPy 進行影像黑白反轉,並顯示反轉前後的影像。
Thumbnail
微調(Fine tune)是深度學習中遷移學習的一種方法,其中預訓練模型的權重會在新數據上進行訓練。 本文主要介紹如何使用新的訓練圖檔在tesseract 辨識模型進行Fine tune 有關於安裝的部分可以參考友人的其他文章 Tesseract OCR - 繁體中文【安裝篇】 將所有資料
Thumbnail
學習如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
在本文中,我們將瞭解如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
Google Tesseract Config說明,程式範例實際修改示範 前言 Tesseract 的 config 檔案用於指定 OCR 引擎的設定和參數。這些參數可以影響文本識別的結果 本文將彙整常用參數調整,並呈現不同參數出現不同的辨識結果 官網Tesseract OCR參數說明連結
Thumbnail
使用Google Tesseract應用,擷取圖像的OCR並將讀取到的字元標註在原圖上 光學字元辨識功能 (Optical character recognition,光學字符辨識) 可以將影像中特徵範圍內的文本轉換為數字形式的文本。使用前必須安装Google Tesseract並更新
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
在tesseract-ocr辨識應用中,建議的留白邊框為10pixl,若Label列印的太剛好,沒有任何的邊框時,就會辨識不到文字。 本文將帶大家如何讓圖像增加邊框。 結果圖 示意的比較誇張,我讓邊框增加100pixl,圖片大小原為211*80。
Thumbnail
呈上篇文章,針對單排的圖像文字增加間隔,但如果文字是雙排呢 [OpenCV][Python]OCR分割及增加間隔[單排文字]
Thumbnail
在文字辨識中,適當的增加一文字彼此間的間隔是有幫助於辨識的,原因在大多數OCR引擎在處理字符時會依賴空白區域來區分不同的字符。如果字符之間的間隔過小,OCR引擎可能會將相鄰的字符誤認為一個單一的字符或難以正確切割字符。增加間隔可以幫助OCR引擎更準確地識別和切割每個字符。 本文說明如何增加OCR間
Thumbnail
在某些特殊情況下,需要將圖片進行黑白反轉,例如Tesseract(OCR辨識引擎)就有建議黑底白字的狀況下辨識率較高。 本文將使用 NumPy 進行影像黑白反轉,並顯示反轉前後的影像。
Thumbnail
微調(Fine tune)是深度學習中遷移學習的一種方法,其中預訓練模型的權重會在新數據上進行訓練。 本文主要介紹如何使用新的訓練圖檔在tesseract 辨識模型進行Fine tune 有關於安裝的部分可以參考友人的其他文章 Tesseract OCR - 繁體中文【安裝篇】 將所有資料
Thumbnail
學習如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
在本文中,我們將瞭解如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
Google Tesseract Config說明,程式範例實際修改示範 前言 Tesseract 的 config 檔案用於指定 OCR 引擎的設定和參數。這些參數可以影響文本識別的結果 本文將彙整常用參數調整,並呈現不同參數出現不同的辨識結果 官網Tesseract OCR參數說明連結
Thumbnail
使用Google Tesseract應用,擷取圖像的OCR並將讀取到的字元標註在原圖上 光學字元辨識功能 (Optical character recognition,光學字符辨識) 可以將影像中特徵範圍內的文本轉換為數字形式的文本。使用前必須安装Google Tesseract並更新