[Python]Tesseract OCR的 box 定義

更新於 2024/10/01閱讀時間約 5 分鐘

會打這篇的用意是紀錄一下Tesseract 的 box 定義,先前一直誤會Tesseract 的 box定義的座標跟cv2.rectangle的座標一模一樣,想說自己開發一個辨識OCR位子然後寫入box裡,想說奇怪為什麼印出來的Y軸都有偏移的狀況,是哪裡搞混了,那時候一直以為是做了什麼處理造成辨識的位子有問題,後來上網查才發現原來是Tesseract 的 box 座標定義跟一般認知不同。

Tesseractbox 定義是一種用於表示光學字符識別 (OCR) 結果中每個字符或文字區域的框(bounding box)格式。它提供了每個識別到的字符在圖像中的位置以及該字符的實際內容。這些框資訊通常用於調整或優化 OCR 的結果,特別是在使用像 JTessBoxEditor 等工具進行文字訓練或驗證時。


實際辨識出的OCR位子在畫矩形框起來

raw-image

但用JTessBoxEditor確認寫入的Box是否正確,卻有偏移的狀況

raw-image

Tesseract box 文件的每一行表示一個字符,格式如下:

<character> <left> <bottom> <right> <top> <page>

每個字段的詳細說明如下:

  1. <character>:被 Tesseract 識別的字符內容。例如,這裡可能是一個字母、數字或標點符號。
  2. <left>:字符框的左邊界的 x 坐標。
  3. <bottom>:字符框的下邊界的 y 坐標(圖像的原點位於左上角,因此數值越大表示位置越低)。
  4. <right>:字符框的右邊界的 x 坐標。
  5. <top>:字符框的上邊界的 y 坐標。
  6. <page>:表示該字符所屬的頁面號(多頁圖像時使用)。

例如:

A 123 456 789 1234 0

這行表示字符 "A" 的 bounding box 其左上角的坐標為 (123, 1234),右下角的坐標為 (789, 456),並且它位於第 0 頁。

這些 box 定義在進行 OCR 訓練時十分重要,因為它們允許你為每個字符提供準確的框來幫助優化模型的識別效果。


原程式碼(錯誤畫框的)

img_h, img_w = img.shape[:2]
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
labels = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
num_labels, labels, stats, _ = cv2.connectedComponentsWithStats(labels, connectivity=8)
# stats = (x,y,w,h)
x = state[0]
y = state[1]
x1 = state[0] + state[2]
y1 = state[1] + state[3]
# for tessract box
data = f'{ocr} {x} {y} {x1} {y1} {Image_index}'

分析結果

原來box定義的Y軸是由下到上,所以Top頂點就會跟一般邏輯是相反的,就由圖片高度減去辨識到的Y軸就是字符框的上邊界的 y 坐標

raw-image

修正後的程式碼

將得到的OCR座標與長寬,轉換一下就等於Tesseract box的格式了

img_h, img_w = img.shape[:2]
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
labels = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
num_labels, labels, stats, _ = cv2.connectedComponentsWithStats(labels, connectivity=8)
# stats = (x,y,w,h)
x = state[0]
y = state[1]
x1 = state[0] + state[2]
y1 = state[1] + state[3]
# for tessract box
# tessract box <character> <left> <bottom> <right> <top> <page>
left = x
right = x1
top = img_h - y
bottom = top - state[3]
data = f'{ocr} {left} {bottom} {right} {top} {Image_index}'




avatar-img
128會員
209內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
本文主要介紹使用Numpy實現一個尋找邊界的方法,在用這個方法延伸去判斷2D條碼中圖案L角,根據預定義的方向角度對應表來判斷圖像的角度(0 度、90 度、180 度或 270 度) 設計邏輯 數據過濾: 函式 __filtered_positions 確保在對數據進行處理之前,能夠有效地過濾
色階調整去霧技術是一種圖像增強技術,通過調整圖像的亮度和對比度來減少或消除霧氣的影響。主要依賴於圖像的直方圖,通過分析圖像中像素亮度的分佈來增強細節、提高對比度,使得被霧氣模糊的細節得以還原。以改善模糊或灰濛的圖像。 本文主要利用了圖像去霧技術中的暗通道先驗(Dark Channel Prior)
本文將實測,使用同一組圖像,用不同的OCR模型來辨識看成效如何,主要介紹如何從資料夾中,讀取圖片檔中的檔名來比對tesseract OCR的結果是否一致,若結果不同就記錄其錯誤位置及次數,統計最後的誤判率及誤判字的總次數。 圖片檔中的檔名由事先整理出正確結果,比對OCR模型用。
在Tesseract的討論論壇中看到一篇文章,有人研究tesseract在文字高度在30~33pixl~內辨識率是最佳的。 本文就將來實作看看,拿出之前實驗用的OCR圖檔來跑跑看。 實驗內容 縮放與不縮放的圖片在tesseract OCR結果比較 圖片縮放流程 先讀取圖片中OCR的高度,取
[OpenCV][Python]影像增強對比_自適應直方圖均衡化 在上一篇文章,我們有比較過自適應直方圖均衡化與直方圖均衡化的差異。 本文將主要應用在OCV檢測上,應用這兩種方法將會有那些不一樣的差異。內文中的OCV檢測,主要涵蓋OCR的文字高寬及面積。 測試圖 就利用這看起來雜訊特多的圖。
此文章延續以下這篇文章,實際測試增加或固定間隔的狀況下,是否可以增加辨識率 [OpenCV][Python]OCR分割及增加間隔[雙排文字] 此篇文章程式碼有修正上篇,OCR 特殊符號:會分割錯誤的問題。
本文主要介紹使用Numpy實現一個尋找邊界的方法,在用這個方法延伸去判斷2D條碼中圖案L角,根據預定義的方向角度對應表來判斷圖像的角度(0 度、90 度、180 度或 270 度) 設計邏輯 數據過濾: 函式 __filtered_positions 確保在對數據進行處理之前,能夠有效地過濾
色階調整去霧技術是一種圖像增強技術,通過調整圖像的亮度和對比度來減少或消除霧氣的影響。主要依賴於圖像的直方圖,通過分析圖像中像素亮度的分佈來增強細節、提高對比度,使得被霧氣模糊的細節得以還原。以改善模糊或灰濛的圖像。 本文主要利用了圖像去霧技術中的暗通道先驗(Dark Channel Prior)
本文將實測,使用同一組圖像,用不同的OCR模型來辨識看成效如何,主要介紹如何從資料夾中,讀取圖片檔中的檔名來比對tesseract OCR的結果是否一致,若結果不同就記錄其錯誤位置及次數,統計最後的誤判率及誤判字的總次數。 圖片檔中的檔名由事先整理出正確結果,比對OCR模型用。
在Tesseract的討論論壇中看到一篇文章,有人研究tesseract在文字高度在30~33pixl~內辨識率是最佳的。 本文就將來實作看看,拿出之前實驗用的OCR圖檔來跑跑看。 實驗內容 縮放與不縮放的圖片在tesseract OCR結果比較 圖片縮放流程 先讀取圖片中OCR的高度,取
[OpenCV][Python]影像增強對比_自適應直方圖均衡化 在上一篇文章,我們有比較過自適應直方圖均衡化與直方圖均衡化的差異。 本文將主要應用在OCV檢測上,應用這兩種方法將會有那些不一樣的差異。內文中的OCV檢測,主要涵蓋OCR的文字高寬及面積。 測試圖 就利用這看起來雜訊特多的圖。
此文章延續以下這篇文章,實際測試增加或固定間隔的狀況下,是否可以增加辨識率 [OpenCV][Python]OCR分割及增加間隔[雙排文字] 此篇文章程式碼有修正上篇,OCR 特殊符號:會分割錯誤的問題。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
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
本文將利用OpenCV的findContours函式,從找到的輪廓中來計算物件的面積,周長,邊界框等屬性,從而得到物體的寬度與高度。 一般來說,我們在進行輪廓檢測時,會先進行圖像二值化,將對象轉換為白色,背景為黑色。這樣,在找到輪廓後,輪廓的點就會以白色表示,背景為黑色。 結果圖 從圖中綠色框
Thumbnail
Google Tesseract Config說明,程式範例實際修改示範 前言 Tesseract 的 config 檔案用於指定 OCR 引擎的設定和參數。這些參數可以影響文本識別的結果 本文將彙整常用參數調整,並呈現不同參數出現不同的辨識結果 官網Tesseract OCR參數說明連結
Thumbnail
使用Google Tesseract應用,擷取圖像的OCR並將讀取到的字元標註在原圖上 光學字元辨識功能 (Optical character recognition,光學字符辨識) 可以將影像中特徵範圍內的文本轉換為數字形式的文本。使用前必須安装Google Tesseract並更新
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
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
本文將利用OpenCV的findContours函式,從找到的輪廓中來計算物件的面積,周長,邊界框等屬性,從而得到物體的寬度與高度。 一般來說,我們在進行輪廓檢測時,會先進行圖像二值化,將對象轉換為白色,背景為黑色。這樣,在找到輪廓後,輪廓的點就會以白色表示,背景為黑色。 結果圖 從圖中綠色框
Thumbnail
Google Tesseract Config說明,程式範例實際修改示範 前言 Tesseract 的 config 檔案用於指定 OCR 引擎的設定和參數。這些參數可以影響文本識別的結果 本文將彙整常用參數調整,並呈現不同參數出現不同的辨識結果 官網Tesseract OCR參數說明連結
Thumbnail
使用Google Tesseract應用,擷取圖像的OCR並將讀取到的字元標註在原圖上 光學字元辨識功能 (Optical character recognition,光學字符辨識) 可以將影像中特徵範圍內的文本轉換為數字形式的文本。使用前必須安装Google Tesseract並更新