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

更新於 2024/09/25閱讀時間約 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
128會員
209內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
[OpenCV][Python]影像增強對比_自適應直方圖均衡化 在上一篇文章,我們有比較過自適應直方圖均衡化與直方圖均衡化的差異。 本文將主要應用在OCV檢測上,應用這兩種方法將會有那些不一樣的差異。內文中的OCV檢測,主要涵蓋OCR的文字高寬及面積。 測試圖 就利用這看起來雜訊特多的圖。
此文章延續以下這篇文章,實際測試增加或固定間隔的狀況下,是否可以增加辨識率 [OpenCV][Python]OCR分割及增加間隔[雙排文字] 此篇文章程式碼有修正上篇,OCR 特殊符號:會分割錯誤的問題。
呈上篇文章,針對單排的圖像文字增加間隔,但如果文字是雙排呢 [OpenCV][Python]OCR分割及增加間隔[單排文字]
在文字辨識中,適當的增加一文字彼此間的間隔是有幫助於辨識的,原因在大多數OCR引擎在處理字符時會依賴空白區域來區分不同的字符。如果字符之間的間隔過小,OCR引擎可能會將相鄰的字符誤認為一個單一的字符或難以正確切割字符。增加間隔可以幫助OCR引擎更準確地識別和切割每個字符。 本文說明如何增加OCR間
在影像辨識中,若遇到物件與背景難以分辨的狀況下,先做一下色彩分析,知道了色彩強度階層上的像素數,有助於了解後續需要做什麼處理,比較好分割出辨識物。 若想辨識的物件與背景的RGB值過於接近,也比較好說明此狀況,為什麼較難分割出物件。 成果呈現 第一張圖:左邊為原圖,右邊為分析結果的圖,用其他顏
接續上一邊,分割了螺絲與螺母的圖像,但分割後的結果,因為螺絲過於接近的關係,沒有切割乾淨,會有其他螺絲的頭或者身體,這樣會影響到後續量測。 [OpenCV應用][Python]擷取出螺絲或螺母的影像 本文主要是,如何去除掉不要的背景雜物。 下層為原先分割的圖,上層為去除背景雜物的圖。
[OpenCV][Python]影像增強對比_自適應直方圖均衡化 在上一篇文章,我們有比較過自適應直方圖均衡化與直方圖均衡化的差異。 本文將主要應用在OCV檢測上,應用這兩種方法將會有那些不一樣的差異。內文中的OCV檢測,主要涵蓋OCR的文字高寬及面積。 測試圖 就利用這看起來雜訊特多的圖。
此文章延續以下這篇文章,實際測試增加或固定間隔的狀況下,是否可以增加辨識率 [OpenCV][Python]OCR分割及增加間隔[雙排文字] 此篇文章程式碼有修正上篇,OCR 特殊符號:會分割錯誤的問題。
呈上篇文章,針對單排的圖像文字增加間隔,但如果文字是雙排呢 [OpenCV][Python]OCR分割及增加間隔[單排文字]
在文字辨識中,適當的增加一文字彼此間的間隔是有幫助於辨識的,原因在大多數OCR引擎在處理字符時會依賴空白區域來區分不同的字符。如果字符之間的間隔過小,OCR引擎可能會將相鄰的字符誤認為一個單一的字符或難以正確切割字符。增加間隔可以幫助OCR引擎更準確地識別和切割每個字符。 本文說明如何增加OCR間
在影像辨識中,若遇到物件與背景難以分辨的狀況下,先做一下色彩分析,知道了色彩強度階層上的像素數,有助於了解後續需要做什麼處理,比較好分割出辨識物。 若想辨識的物件與背景的RGB值過於接近,也比較好說明此狀況,為什麼較難分割出物件。 成果呈現 第一張圖:左邊為原圖,右邊為分析結果的圖,用其他顏
接續上一邊,分割了螺絲與螺母的圖像,但分割後的結果,因為螺絲過於接近的關係,沒有切割乾淨,會有其他螺絲的頭或者身體,這樣會影響到後續量測。 [OpenCV應用][Python]擷取出螺絲或螺母的影像 本文主要是,如何去除掉不要的背景雜物。 下層為原先分割的圖,上層為去除背景雜物的圖。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
在tesseract-ocr辨識應用中,建議的留白邊框為10pixl,若Label列印的太剛好,沒有任何的邊框時,就會辨識不到文字。 本文將帶大家如何讓圖像增加邊框。 結果圖 示意的比較誇張,我讓邊框增加100pixl,圖片大小原為211*80。
Thumbnail
呈上篇文章,針對單排的圖像文字增加間隔,但如果文字是雙排呢 [OpenCV][Python]OCR分割及增加間隔[單排文字]
Thumbnail
在文字辨識中,適當的增加一文字彼此間的間隔是有幫助於辨識的,原因在大多數OCR引擎在處理字符時會依賴空白區域來區分不同的字符。如果字符之間的間隔過小,OCR引擎可能會將相鄰的字符誤認為一個單一的字符或難以正確切割字符。增加間隔可以幫助OCR引擎更準確地識別和切割每個字符。 本文說明如何增加OCR間
Thumbnail
在數字化時代,PDF文件廣泛使用,但傳統處理方式顯得力不從心。本文推薦pdftopdf.ai等工具,通過OCR識別,將圖片中的文字轉化為可編輯、可搜索的文本。探討PDF文檔分析的AI工具,功能和價格。描述其用途以解決掃描件中文字無法直接搜索的困擾,提高工作效率。
Thumbnail
微調(Fine tune)是深度學習中遷移學習的一種方法,其中預訓練模型的權重會在新數據上進行訓練。 本文主要介紹如何使用新的訓練圖檔在tesseract 辨識模型進行Fine tune 有關於安裝的部分可以參考友人的其他文章 Tesseract OCR - 繁體中文【安裝篇】 將所有資料
Thumbnail
學習如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
在本文中,我們將瞭解如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
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
在數字化時代,PDF文件廣泛使用,但傳統處理方式顯得力不從心。本文推薦pdftopdf.ai等工具,通過OCR識別,將圖片中的文字轉化為可編輯、可搜索的文本。探討PDF文檔分析的AI工具,功能和價格。描述其用途以解決掃描件中文字無法直接搜索的困擾,提高工作效率。
Thumbnail
微調(Fine tune)是深度學習中遷移學習的一種方法,其中預訓練模型的權重會在新數據上進行訓練。 本文主要介紹如何使用新的訓練圖檔在tesseract 辨識模型進行Fine tune 有關於安裝的部分可以參考友人的其他文章 Tesseract OCR - 繁體中文【安裝篇】 將所有資料
Thumbnail
學習如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
在本文中,我們將瞭解如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
Google Tesseract Config說明,程式範例實際修改示範 前言 Tesseract 的 config 檔案用於指定 OCR 引擎的設定和參數。這些參數可以影響文本識別的結果 本文將彙整常用參數調整,並呈現不同參數出現不同的辨識結果 官網Tesseract OCR參數說明連結
Thumbnail
使用Google Tesseract應用,擷取圖像的OCR並將讀取到的字元標註在原圖上 光學字元辨識功能 (Optical character recognition,光學字符辨識) 可以將影像中特徵範圍內的文本轉換為數字形式的文本。使用前必須安装Google Tesseract並更新