[Python]Tesseract OCR的 box 定義

更新於 發佈於 閱讀時間約 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
留言分享你的想法!
avatar-img
螃蟹_crab的沙龍
147會員
258內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
螃蟹_crab的沙龍的其他內容
2025/04/01
1. 概述 在光學字符識別(OCR)過程中,常見的問題之一是「斷字」,即原本應為一個完整字符的部分被錯誤地分割成兩個或多個獨立的字符。這通常發生在掃描文件、圖像降噪或影像二值化處理後。本篇文章將介紹一種基於 骨架化端點距離分析 的斷字檢測方法,並提供完整的 Python 實作。 2. 斷字檢測的
Thumbnail
2025/04/01
1. 概述 在光學字符識別(OCR)過程中,常見的問題之一是「斷字」,即原本應為一個完整字符的部分被錯誤地分割成兩個或多個獨立的字符。這通常發生在掃描文件、圖像降噪或影像二值化處理後。本篇文章將介紹一種基於 骨架化端點距離分析 的斷字檢測方法,並提供完整的 Python 實作。 2. 斷字檢測的
Thumbnail
2025/03/13
本教學將介紹如何使用 OpenCV 來檢測螺絲的鎖附間距,並提供完整的 Python 程式碼來實作這項功能。 🔹 1. 設計目標 使用二值化處理與形態學運算來強化影像 計算螺絲之間的間距 視覺化結果,標記最大間距並顯示數值 🔹 2. 測試用螺絲影像 🔹 3.
Thumbnail
2025/03/13
本教學將介紹如何使用 OpenCV 來檢測螺絲的鎖附間距,並提供完整的 Python 程式碼來實作這項功能。 🔹 1. 設計目標 使用二值化處理與形態學運算來強化影像 計算螺絲之間的間距 視覺化結果,標記最大間距並顯示數值 🔹 2. 測試用螺絲影像 🔹 3.
Thumbnail
2025/01/18
我們將學習如何使用 Python 和 OpenCV 實現圖像的主色提取與重新著色。 以下的程式碼展示了如何通過 KMeans 聚類演算法分析圖像,提取 HSV 色彩空間中的主色,並將圖像重新著色,提取想偵測的物件的顏色。 在官網案例,實作為RGB色彩空間,但如果套用HSV色彩空間則會因為H色
Thumbnail
2025/01/18
我們將學習如何使用 Python 和 OpenCV 實現圖像的主色提取與重新著色。 以下的程式碼展示了如何通過 KMeans 聚類演算法分析圖像,提取 HSV 色彩空間中的主色,並將圖像重新著色,提取想偵測的物件的顏色。 在官網案例,實作為RGB色彩空間,但如果套用HSV色彩空間則會因為H色
Thumbnail
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
Tesseract 是一個開源的光學字符識別 (OCR) 引擎,可通過自定義訓練來改進對特定字體或語言的識別。 以下是一份基於 tesstrain 工具,並針對 Windows CMD 的完整 Tesseract 5 訓練教學。將利用官方提供的ocrd-testset.zip來做示範 前置
Thumbnail
Tesseract 是一個開源的光學字符識別 (OCR) 引擎,可通過自定義訓練來改進對特定字體或語言的識別。 以下是一份基於 tesstrain 工具,並針對 Windows CMD 的完整 Tesseract 5 訓練教學。將利用官方提供的ocrd-testset.zip來做示範 前置
Thumbnail
本文詳細探討了Tesseract的box定義。經驗分享釐清了Tesseract與cv2.rectangle的座標差異,解釋了怎樣使用JTessBoxEditor進行框的驗證。透過範例,讀者將瞭解如何正確設置字符的bounding box,並學會轉換OCR座標為Tesseract所需格式
Thumbnail
本文詳細探討了Tesseract的box定義。經驗分享釐清了Tesseract與cv2.rectangle的座標差異,解釋了怎樣使用JTessBoxEditor進行框的驗證。透過範例,讀者將瞭解如何正確設置字符的bounding box,並學會轉換OCR座標為Tesseract所需格式
Thumbnail
以下是如何使用 Tesseract OCR 來辨識圖像中的文字的教學。 涵蓋了安裝 Tesseract、基本使用方法,以及如何在 Python 中進行整合。 1. 安裝 Tesseract 首先,需要安裝 Tesseract OCR 工具。這裡提供針對 Windows、macOS 和 Linu
Thumbnail
以下是如何使用 Tesseract OCR 來辨識圖像中的文字的教學。 涵蓋了安裝 Tesseract、基本使用方法,以及如何在 Python 中進行整合。 1. 安裝 Tesseract 首先,需要安裝 Tesseract OCR 工具。這裡提供針對 Windows、macOS 和 Linu
Thumbnail
本文將實測,使用同一組圖像,用不同的OCR模型來辨識看成效如何,主要介紹如何從資料夾中,讀取圖片檔中的檔名來比對tesseract OCR的結果是否一致,若結果不同就記錄其錯誤位置及次數,統計最後的誤判率及誤判字的總次數。 圖片檔中的檔名由事先整理出正確結果,比對OCR模型用。
Thumbnail
本文將實測,使用同一組圖像,用不同的OCR模型來辨識看成效如何,主要介紹如何從資料夾中,讀取圖片檔中的檔名來比對tesseract OCR的結果是否一致,若結果不同就記錄其錯誤位置及次數,統計最後的誤判率及誤判字的總次數。 圖片檔中的檔名由事先整理出正確結果,比對OCR模型用。
Thumbnail
在Tesseract的討論論壇中看到一篇文章,有人研究tesseract在文字高度在30~33pixl~內辨識率是最佳的。 本文就將來實作看看,拿出之前實驗用的OCR圖檔來跑跑看。 實驗內容 縮放與不縮放的圖片在tesseract OCR結果比較 圖片縮放流程 先讀取圖片中OCR的高度,取
Thumbnail
在Tesseract的討論論壇中看到一篇文章,有人研究tesseract在文字高度在30~33pixl~內辨識率是最佳的。 本文就將來實作看看,拿出之前實驗用的OCR圖檔來跑跑看。 實驗內容 縮放與不縮放的圖片在tesseract OCR結果比較 圖片縮放流程 先讀取圖片中OCR的高度,取
Thumbnail
在tesseract-ocr辨識應用中,建議的留白邊框為10pixl,若Label列印的太剛好,沒有任何的邊框時,就會辨識不到文字。 本文將帶大家如何讓圖像增加邊框。 結果圖 示意的比較誇張,我讓邊框增加100pixl,圖片大小原為211*80。
Thumbnail
在tesseract-ocr辨識應用中,建議的留白邊框為10pixl,若Label列印的太剛好,沒有任何的邊框時,就會辨識不到文字。 本文將帶大家如何讓圖像增加邊框。 結果圖 示意的比較誇張,我讓邊框增加100pixl,圖片大小原為211*80。
Thumbnail
微調(Fine tune)是深度學習中遷移學習的一種方法,其中預訓練模型的權重會在新數據上進行訓練。 本文主要介紹如何使用新的訓練圖檔在tesseract 辨識模型進行Fine tune 有關於安裝的部分可以參考友人的其他文章 Tesseract OCR - 繁體中文【安裝篇】 將所有資料
Thumbnail
微調(Fine tune)是深度學習中遷移學習的一種方法,其中預訓練模型的權重會在新數據上進行訓練。 本文主要介紹如何使用新的訓練圖檔在tesseract 辨識模型進行Fine tune 有關於安裝的部分可以參考友人的其他文章 Tesseract OCR - 繁體中文【安裝篇】 將所有資料
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News