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

[Python]Tesseract OCR的 box 定義

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

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


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

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


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 坐標

修正後的程式碼

將得到的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}'




分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.