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

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

Tesseract的討論論壇中看到一篇文章,有人研究tesseract在文字高度在30~33pixl~內辨識率是最佳的。

本文就將來實作看看,拿出之前實驗用的OCR圖檔來跑跑看。

實驗內容

縮放與不縮放的圖片在tesseract OCR結果比較

圖片縮放流程

  1. 先讀取圖片中OCR的高度,取中位數。
  2. 按照比例縮放圖片
  3. 確認縮放後的圖片中的OCR高度是否在區間內
  4. 辨識文字

縮放的程式範例

import os
import pytesseract
import time
import numpy as np
from collections import Counter
import cv2

def obj_area(img):
num_labels, labels, stats, _ = cv2.connectedComponentsWithStats(img, connectivity=8)
components = []
ocr_components = []
if num_labels < 2: # 若全黑的就跳過
return None,None
for i in range(1, num_labels): # 跳過背景
x, y, w, h, area = stats[i]
components.append([x, y, w, h, area])
components.sort(key=lambda c: c[0]) # 按 x 座標排序
for state in components:
_,_,w,h,area = state
# ocr_components.append(f'{ocr}, 寬:{w}, 高 : {h} 面積:{area}')
ocr_components.append((w,h,area))
return ocr_components

def resize_img(img,ocr_h):
H,W = img.shape[:2]
target_height = 31
# 計算目標高度
target_ratio = target_height / ocr_h
if target_ratio > ocr_h :
resize_interpolation = cv2.INTER_CUBIC
else:
resize_interpolation = cv2.INTER_AREA
# 根據計算出的高度進行縮放
scaled_region = cv2.resize(img, (int(W*target_ratio), int(H*target_ratio)), interpolation = resize_interpolation)
return scaled_region

def main():
# 圖檔路徑
img_path = "圖片路徑"
# tesserac檔案路徑
pytesseract.pytesseract.tesseract_cmd = r"tesserac檔案路徑"
config = f'--oem 3 --psm 7'
# 讀取圖檔
img = cv2.imread(img_path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
labels = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
# 計算OCR高度
h_res = obj_area(labels)
ocr_h = int(np.median([pos[1] for pos in h_res]))
print(f'原先ocr_h:{ocr_h}')
# 縮放圖片
image_resize = resize_img(labels,ocr_h)
# 計算縮放後的OCR高度
resize_h_res = obj_area(image_resize)
ocr_h_resize = int(np.median([pos[1] for pos in resize_h_res]))
print(f'縮放後的ocr_h:{ocr_h_resize}')
ocr_text = pytesseract.image_to_string(image_resize, lang="eng_Best", config=config)
print(ocr_text)

if __name__ == "__main__":
main()

結果圖

eng_Best模型

原圖:錯誤率35%

原圖

原圖

縮放後 : 錯誤率40%

raw-image

eng_fast模型

原圖:錯誤率10%

raw-image

縮放後:錯誤率 6%

raw-image

結論

模型對於某些字體或者是大小會直接影響到辨識率,官方雖然說Best模型辨識率較佳,但在一些使用上的經驗來講,某些狀況則不一定是最佳,如這次實驗fast模型就好很多。

兩個模型在縮放後的結果也不盡相同,但在fast模型是有明顯提高辨識率的。

留言
avatar-img
留言分享你的想法!
螃蟹_crab-avatar-img
發文者
2024/09/30
[OpenCV][Python]手把教如何使用Tesseract OCR辨識提及了這篇文章,趕快過去看看吧!
avatar-img
螃蟹_crab的沙龍
145會員
253內容數
本業是影像辨識軟體開發,閒暇時間進修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
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
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
呈上篇文章,針對單排的圖像文字增加間隔,但如果文字是雙排呢 [OpenCV][Python]OCR分割及增加間隔[單排文字]
Thumbnail
呈上篇文章,針對單排的圖像文字增加間隔,但如果文字是雙排呢 [OpenCV][Python]OCR分割及增加間隔[單排文字]
Thumbnail
本文將說明如何去辨識出圖片文字​位置及高寬。
Thumbnail
本文將說明如何去辨識出圖片文字​位置及高寬。
Thumbnail
在文字辨識中,適當的增加一文字彼此間的間隔是有幫助於辨識的,原因在大多數OCR引擎在處理字符時會依賴空白區域來區分不同的字符。如果字符之間的間隔過小,OCR引擎可能會將相鄰的字符誤認為一個單一的字符或難以正確切割字符。增加間隔可以幫助OCR引擎更準確地識別和切割每個字符。 本文說明如何增加OCR間
Thumbnail
在文字辨識中,適當的增加一文字彼此間的間隔是有幫助於辨識的,原因在大多數OCR引擎在處理字符時會依賴空白區域來區分不同的字符。如果字符之間的間隔過小,OCR引擎可能會將相鄰的字符誤認為一個單一的字符或難以正確切割字符。增加間隔可以幫助OCR引擎更準確地識別和切割每個字符。 本文說明如何增加OCR間
Thumbnail
學習如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
學習如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
平時都在用tesseract來辨識OCR的部分,在網路上也常常聽說easyOCR比tesseract好用,就拿之前測試的OCR素材來比較看看囉。 以下輸入同樣圖片直接測試,並非絕對誰就比較準,只單純測試數字含英文的部分。 圖片素材就是15碼(英文加數字),檔名為OCR正確結果
Thumbnail
平時都在用tesseract來辨識OCR的部分,在網路上也常常聽說easyOCR比tesseract好用,就拿之前測試的OCR素材來比較看看囉。 以下輸入同樣圖片直接測試,並非絕對誰就比較準,只單純測試數字含英文的部分。 圖片素材就是15碼(英文加數字),檔名為OCR正確結果
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News