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

更新於 發佈於 閱讀時間約 13 分鐘

使用Google Tesseract應用,擷取圖像的OCR並將讀取到的字元標註在原圖上

結果圖

OCR結果圖

OCR結果圖

OCR_Area_list 裡面的資料[{字元:面積}]

OCR_Area_list 裡面的資料[{字元:面積}]

光學字元辨識功能 (Optical character recognition,光學字符辨識)

可以將影像中特徵範圍內的文本轉換為數字形式的文本。使用前必須安装Google Tesseract並更新字庫,安裝檔可在下列公開網址取得

raw-image

Tesseract安裝擋網址

字庫下載

下載的字庫須根據tesseract安裝路徑放置於下列路徑”安裝路徑/Tesseract-OCR/tessdata”

程式碼

import cv2
import pytesseract
import numpy as np
import matplotlib.pyplot as plt

# 讀取圖像
image = cv2.imread('./123456.jpeg')

# 轉換灰階圖像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 使用Tesseract進行辨識
pytesseract.pytesseract.tesseract_cmd = r"C:\Tesseract-OCR\tesseract.exe" #需修改成Tesseract-OCR的路徑
# -c tessedit_char_blacklist 把指定字元Ban掉,不辨識
config = r'-c tessedit_char_blacklist=OTlIi --oem 3 --psm 6'
boxes_data = pytesseract.image_to_boxes(gray_image, lang = 'eng',output_type=pytesseract.Output.STRING, config=config) #取得boxes大小

threshold_value = 150
def getPuTextSize(img):
sz = min(img.shape[:2]) / 500 # 影像短邊 / 500
lw = max(round(sz), 1)
font_sz = max(sz / 3, 1)
return lw, font_sz

def OCR_Area_Fuction(image:np.ndarray,gray_image:np.ndarray,boxes_data:str) -> str :
height, width, _ = image.shape
ocr_str = ''
OCR_Area_list =[] #建立OCR_Area_list 等用來儲存OCR Area用
for box in boxes_data.splitlines():
b = box.split()
#取出字元,位置x,y,長高
char, x, y, w, h = b[0], int(b[1]), int(b[2]), int(b[3]), int(b[4])
roi = gray_image[height - h:height - y, x:w]
# 進行二值化
_, binary_roi = cv2.threshold(roi, threshold_value, 255, cv2.THRESH_BINARY)
# 統計黑色像素
black_pixel_count = roi.size - cv2.countNonZero(binary_roi)
OCR_Area_dit = { char : black_pixel_count }
lw , font = getPuTextSize(roi)
# 繪製矩形框
cv2.rectangle(image, (x, height - y), (w, height - h), (0, 255, 0), 2)
cv2.putText(image, char, (x, height- int(y)), cv2.FONT_HERSHEY_SIMPLEX, font, (255, 0, 0), lw, cv2.LINE_AA)
ocr_str += char
OCR_Area_list.append(OCR_Area_dit)
return ocr_str, OCR_Area_list
ocr_str, OCR_Area_list = OCR_Area_Fuction(image,gray_image,boxes_data)
print(f'OCR_char : {ocr_str}')
print(f'OCR_Area_list : {OCR_Area_list}')
cv2.imshow('OCR_Result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

程式碼說明

image = cv2.imread('./123456.jpeg')

這一行程式碼使用 OpenCV 讀取名為 “123456.jpeg” 的圖像文件

gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

將彩色圖像轉換為灰階,這樣可以簡化後續的處理。

# 使用Tesseract進行辨識 
pytesseract.pytesseract.tesseract_cmd = r"C:\Tesseract-OCR\tesseract.exe" #需修改成Tesseract-OCR的路徑

設定 Tesseract OCR 的執行路徑,確保程式知道在哪裡找到 Tesseract。

# -c tessedit_char_blacklist 把指定字元Ban掉,不辨識
config = r'-c tessedit_char_blacklist=OTlIi --oem 3 --psm 6'
boxes_data = pytesseract.image_to_boxes(gray_image, lang = 'eng',output_type=pytesseract.Output.STRING, config=config) #取得boxes大小

使用 Tesseract OCR 辨識圖像,同時設定一些參數,如字符黑名單、OCR 引擎模式等。

-c tessedit_char_blacklist=OTlIi: 這部分指定了字符黑名單(blacklist),即在辨識過程中不考慮的字符。在這裡,OTlIi 表示排除大寫字母 'O'、'T',小寫字母 'l'、'I'、'i'。這可以用來排除一些容易混淆的字符,提高辨識的準確性。

--oem 3: 這部分指定 OCR 引擎模式(OCR Engine Mode)。在這裡,3 表示選擇 OEM_TESSERACT_ONLY 模式,僅使用 Tesseract OCR 引擎而不使用 LSTM 引擎。這是一種特定的辨識引擎配置。

--psm 6: 這部分指定了頁面分割模式(Page Segmentation Mode)。在這裡,6 表示使用自動分割,但不進行方向和腳本檢測。這可以適用於單列文本的情況。

threshold_value = 150
def getPuTextSize(img):
# 取得影像短邊的大小,並將其除以 500
sz = min(img.shape[:2]) / 500
# 取最大值,並四捨五入得到線寬
lw = max(round(sz), 1)
# 字型大小為影像短邊的 1/3 或 1(取最大值)
font_sz = max(sz / 3, 1)
return lw, font_sz

設定threshold_value 二值化參數 後續 cv2.threshold用的到

這個函數getPuTextSize是用來計算在圖像上顯示文字時所需的線寬和字型大小

def OCR_Area_Fuction(image: np.ndarray, gray_image: np.ndarray, boxes_data: str) -> str:
height, width, _ = image.shape
ocr_str = '' # 用來儲存辨識的文字
OCR_Area_list = [] # 用來儲存每個辨識區域的黑色像素數量

for box in boxes_data.splitlines():
b = box.split()
# 取出字元,位置 x, y,長寬 w, h
char, x, y, w, h = b[0], int(b[1]), int(b[2]), int(b[3]), int(b[4])
# 提取 ROI(Region of Interest),即辨識區域
roi = gray_image[height - h:height - y, x:w]
# 進行二值化處理
_, binary_roi = cv2.threshold(roi, threshold_value, 255, cv2.THRESH_BINARY)
# 統計黑色像素數量
black_pixel_count = roi.size - cv2.countNonZero(binary_roi)
OCR_Area_dit = {char: black_pixel_count} # 將黑色像素數量與對應的字元建立成字典
lw, font = getPuTextSize(roi) # 取得文字的線寬和字型大小
# 繪製矩形框
cv2.rectangle(image, (x, height - y), (w, height - h), (0, 255, 0), 2)
# 在圖像上放置文字
cv2.putText(image, char, (x, height - int(y)), cv2.FONT_HERSHEY_SIMPLEX, font, (255, 0, 0), lw, cv2.LINE_AA)
ocr_str += char
OCR_Area_list.append(OCR_Area_dit) # 將該辨識區域的黑色像素數量加入列表

return ocr_str, OCR_Area_list

這個函數 OCR_Area_Fuction 主要用於處理 Tesseract OCR 的辨識結果,同時計算每個辨識區域的黑色像素數量,並在原始圖像上繪製相應的矩形框和文字。

這個函數的主要步驟包括:

  1. 分割和提取信息: 對 Tesseract 辨識的結果進行分割,提取出每個辨識區域的相關信息,如字元、位置等。
  2. 計算黑色像素數量: 對每個辨識區域進行二值化處理,然後統計黑色像素的數量。
  3. 繪製矩形框和文字: 在原始圖像上根據辨識的位置信息繪製矩形框和放置文字。
  4. 儲存結果: 將辨識的文字組合成字符串,同時將每個辨識區域的黑色像素數量儲存到列表中。

最終,函數返回辨識的文字和每個辨識區域的黑色像素數量列表。

ocr_str, OCR_Area_list = OCR_Area_Fuction(image,gray_image,boxes_data)
print(f'OCR_char : {ocr_str}')
print(f'OCR_Area_list : {OCR_Area_list}')
cv2.imshow('OCR_Result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出辨識的文字和相應的黑色像素數量,並以視窗形式顯示帶有標記的圖像。


若有問題歡迎提問,愛心 追蹤~













留言
avatar-img
留言分享你的想法!
螃蟹_crab-avatar-img
發文者
2024/09/30
[OpenCV][Python]手把教如何使用Tesseract OCR辨識提及了這篇文章,趕快過去看看吧!
螃蟹_crab-avatar-img
發文者
2024/07/25
[OpenCV][Python]OCR辨識影像前處理_增加邊框提及了這篇文章,趕快過去看看吧!
螃蟹_crab-avatar-img
發文者
2024/01/06
[OCR_應用]Tesseract-OCR_Config說明提及了這篇文章,趕快過去看看吧!
avatar-img
螃蟹_crab的沙龍
147會員
282內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。 興趣是攝影,踏青,探索未知領域。 人生就是不斷的挑戰及自我認清,希望老了躺在床上不會後悔自己什麼都沒做。
螃蟹_crab的沙龍的其他內容
2024/06/21
微調(Fine tune)是深度學習中遷移學習的一種方法,其中預訓練模型的權重會在新數據上進行訓練。 本文主要介紹如何使用新的訓練圖檔在tesseract 辨識模型進行Fine tune 有關於安裝的部分可以參考友人的其他文章 Tesseract OCR - 繁體中文【安裝篇】 將所有資料
Thumbnail
2024/06/21
微調(Fine tune)是深度學習中遷移學習的一種方法,其中預訓練模型的權重會在新數據上進行訓練。 本文主要介紹如何使用新的訓練圖檔在tesseract 辨識模型進行Fine tune 有關於安裝的部分可以參考友人的其他文章 Tesseract OCR - 繁體中文【安裝篇】 將所有資料
Thumbnail
2024/06/01
平時都在用tesseract來辨識OCR的部分,在網路上也常常聽說easyOCR比tesseract好用,就拿之前測試的OCR素材來比較看看囉。 以下輸入同樣圖片直接測試,並非絕對誰就比較準,只單純測試數字含英文的部分。 圖片素材就是15碼(英文加數字),檔名為OCR正確結果
Thumbnail
2024/06/01
平時都在用tesseract來辨識OCR的部分,在網路上也常常聽說easyOCR比tesseract好用,就拿之前測試的OCR素材來比較看看囉。 以下輸入同樣圖片直接測試,並非絕對誰就比較準,只單純測試數字含英文的部分。 圖片素材就是15碼(英文加數字),檔名為OCR正確結果
Thumbnail
2024/05/26
本文將展示使用不同激活函數(ReLU 和 Sigmoid)的效果。 一個簡單的多層感知器(MLP)模型來對 Fashion-MNIST 資料集進行分類。 函數定義 Sigmoid 函數 Sigmoid 函數將輸入壓縮到 0到 1 之間: 特性: 輸出範圍是 (0,1)(0, 1)(0,1
Thumbnail
2024/05/26
本文將展示使用不同激活函數(ReLU 和 Sigmoid)的效果。 一個簡單的多層感知器(MLP)模型來對 Fashion-MNIST 資料集進行分類。 函數定義 Sigmoid 函數 Sigmoid 函數將輸入壓縮到 0到 1 之間: 特性: 輸出範圍是 (0,1)(0, 1)(0,1
Thumbnail
看更多
你可能也想看
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
在tesseract-ocr辨識應用中,建議的留白邊框為10pixl,若Label列印的太剛好,沒有任何的邊框時,就會辨識不到文字。 本文將帶大家如何讓圖像增加邊框。 結果圖 示意的比較誇張,我讓邊框增加100pixl,圖片大小原為211*80。
Thumbnail
在tesseract-ocr辨識應用中,建議的留白邊框為10pixl,若Label列印的太剛好,沒有任何的邊框時,就會辨識不到文字。 本文將帶大家如何讓圖像增加邊框。 結果圖 示意的比較誇張,我讓邊框增加100pixl,圖片大小原為211*80。
Thumbnail
本文將說明如何去辨識出圖片文字​位置及高寬。
Thumbnail
本文將說明如何去辨識出圖片文字​位置及高寬。
Thumbnail
在文字辨識中,適當的增加一文字彼此間的間隔是有幫助於辨識的,原因在大多數OCR引擎在處理字符時會依賴空白區域來區分不同的字符。如果字符之間的間隔過小,OCR引擎可能會將相鄰的字符誤認為一個單一的字符或難以正確切割字符。增加間隔可以幫助OCR引擎更準確地識別和切割每個字符。 本文說明如何增加OCR間
Thumbnail
在文字辨識中,適當的增加一文字彼此間的間隔是有幫助於辨識的,原因在大多數OCR引擎在處理字符時會依賴空白區域來區分不同的字符。如果字符之間的間隔過小,OCR引擎可能會將相鄰的字符誤認為一個單一的字符或難以正確切割字符。增加間隔可以幫助OCR引擎更準確地識別和切割每個字符。 本文說明如何增加OCR間
Thumbnail
在數字化時代,PDF文件廣泛使用,但傳統處理方式顯得力不從心。本文推薦pdftopdf.ai等工具,通過OCR識別,將圖片中的文字轉化為可編輯、可搜索的文本。探討PDF文檔分析的AI工具,功能和價格。描述其用途以解決掃描件中文字無法直接搜索的困擾,提高工作效率。
Thumbnail
在數字化時代,PDF文件廣泛使用,但傳統處理方式顯得力不從心。本文推薦pdftopdf.ai等工具,通過OCR識別,將圖片中的文字轉化為可編輯、可搜索的文本。探討PDF文檔分析的AI工具,功能和價格。描述其用途以解決掃描件中文字無法直接搜索的困擾,提高工作效率。
Thumbnail
學習如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
學習如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
在本文中,我們將瞭解如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
在本文中,我們將瞭解如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
平時都在用tesseract來辨識OCR的部分,在網路上也常常聽說easyOCR比tesseract好用,就拿之前測試的OCR素材來比較看看囉。 以下輸入同樣圖片直接測試,並非絕對誰就比較準,只單純測試數字含英文的部分。 圖片素材就是15碼(英文加數字),檔名為OCR正確結果
Thumbnail
平時都在用tesseract來辨識OCR的部分,在網路上也常常聽說easyOCR比tesseract好用,就拿之前測試的OCR素材來比較看看囉。 以下輸入同樣圖片直接測試,並非絕對誰就比較準,只單純測試數字含英文的部分。 圖片素材就是15碼(英文加數字),檔名為OCR正確結果
Thumbnail
EasyOCR是一個能夠幫助你對圖片中的文字進行辨識的工具,透過進階分析,可以應用在文件掃描、自動化數據輸入、發票掃描等領域。本章節將介紹如何安裝、引用模型、進行文字辨識、以及辨識結果的分析。透過學習,你可以建立屬於自己的文字辨識系統。
Thumbnail
EasyOCR是一個能夠幫助你對圖片中的文字進行辨識的工具,透過進階分析,可以應用在文件掃描、自動化數據輸入、發票掃描等領域。本章節將介紹如何安裝、引用模型、進行文字辨識、以及辨識結果的分析。透過學習,你可以建立屬於自己的文字辨識系統。
Thumbnail
Google Tesseract Config說明,程式範例實際修改示範 前言 Tesseract 的 config 檔案用於指定 OCR 引擎的設定和參數。這些參數可以影響文本識別的結果 本文將彙整常用參數調整,並呈現不同參數出現不同的辨識結果 官網Tesseract OCR參數說明連結
Thumbnail
Google Tesseract Config說明,程式範例實際修改示範 前言 Tesseract 的 config 檔案用於指定 OCR 引擎的設定和參數。這些參數可以影響文本識別的結果 本文將彙整常用參數調整,並呈現不同參數出現不同的辨識結果 官網Tesseract OCR參數說明連結
Thumbnail
使用Google Tesseract應用,擷取圖像的OCR並將讀取到的字元標註在原圖上 光學字元辨識功能 (Optical character recognition,光學字符辨識) 可以將影像中特徵範圍內的文本轉換為數字形式的文本。使用前必須安装Google Tesseract並更新
Thumbnail
使用Google Tesseract應用,擷取圖像的OCR並將讀取到的字元標註在原圖上 光學字元辨識功能 (Optical character recognition,光學字符辨識) 可以將影像中特徵範圍內的文本轉換為數字形式的文本。使用前必須安装Google Tesseract並更新
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News