[OCR_應用]Tesseract-OCR_擷取字元面積

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

使用Google Tesseract應用,擷取圖像的OCR並將讀取到的字元標註在原圖上

結果圖

OCR結果圖

OCR結果圖

OCR_Area_list 裡面的資料[{字元:面積}]

OCR_Area_list 裡面的資料[{字元:面積}]

光學字元辨識功能 (Optical character recognition,光學字符辨識)

可以將影像中特徵範圍內的文本轉換為數字形式的文本。使用前必須安装Google Tesseract並更新字庫,安裝檔可在下列公開網址取得

raw-image

Tesseract安裝擋網址

字庫下載

下載的字庫須根據tesseract安裝路徑放置於下列路徑”安裝路徑/Tesseract-OCR/tessdata”

程式碼

import cv2
import pytesseract
import numpy as np
import matplotlib.pyplot as plt

# 讀取圖像
image = cv2.imread('./123456.jpeg')

# 轉換灰階圖像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 使用Tesseract進行辨識
pytesseract.pytesseract.tesseract_cmd = r"C:\Tesseract-OCR\tesseract.exe" #需修改成Tesseract-OCR的路徑
# -c tessedit_char_blacklist 把指定字元Ban掉,不辨識
config = r'-c tessedit_char_blacklist=OTlIi --oem 3 --psm 6'
boxes_data = pytesseract.image_to_boxes(gray_image, lang = 'eng',output_type=pytesseract.Output.STRING, config=config) #取得boxes大小

threshold_value = 150
def getPuTextSize(img):
sz = min(img.shape[:2]) / 500 # 影像短邊 / 500
lw = max(round(sz), 1)
font_sz = max(sz / 3, 1)
return lw, font_sz

def OCR_Area_Fuction(image:np.ndarray,gray_image:np.ndarray,boxes_data:str) -> str :
height, width, _ = image.shape
ocr_str = ''
OCR_Area_list =[] #建立OCR_Area_list 等用來儲存OCR Area用
for box in boxes_data.splitlines():
b = box.split()
#取出字元,位置x,y,長高
char, x, y, w, h = b[0], int(b[1]), int(b[2]), int(b[3]), int(b[4])
roi = gray_image[height - h:height - y, x:w]
# 進行二值化
_, binary_roi = cv2.threshold(roi, threshold_value, 255, cv2.THRESH_BINARY)
# 統計黑色像素
black_pixel_count = roi.size - cv2.countNonZero(binary_roi)
OCR_Area_dit = { char : black_pixel_count }
lw , font = getPuTextSize(roi)
# 繪製矩形框
cv2.rectangle(image, (x, height - y), (w, height - h), (0, 255, 0), 2)
cv2.putText(image, char, (x, height- int(y)), cv2.FONT_HERSHEY_SIMPLEX, font, (255, 0, 0), lw, cv2.LINE_AA)
ocr_str += char
OCR_Area_list.append(OCR_Area_dit)
return ocr_str, OCR_Area_list
ocr_str, OCR_Area_list = OCR_Area_Fuction(image,gray_image,boxes_data)
print(f'OCR_char : {ocr_str}')
print(f'OCR_Area_list : {OCR_Area_list}')
cv2.imshow('OCR_Result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

程式碼說明

image = cv2.imread('./123456.jpeg')

這一行程式碼使用 OpenCV 讀取名為 “123456.jpeg” 的圖像文件

gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

將彩色圖像轉換為灰階,這樣可以簡化後續的處理。

# 使用Tesseract進行辨識 
pytesseract.pytesseract.tesseract_cmd = r"C:\Tesseract-OCR\tesseract.exe" #需修改成Tesseract-OCR的路徑

設定 Tesseract OCR 的執行路徑,確保程式知道在哪裡找到 Tesseract。

# -c tessedit_char_blacklist 把指定字元Ban掉,不辨識
config = r'-c tessedit_char_blacklist=OTlIi --oem 3 --psm 6'
boxes_data = pytesseract.image_to_boxes(gray_image, lang = 'eng',output_type=pytesseract.Output.STRING, config=config) #取得boxes大小

使用 Tesseract OCR 辨識圖像,同時設定一些參數,如字符黑名單、OCR 引擎模式等。

-c tessedit_char_blacklist=OTlIi: 這部分指定了字符黑名單(blacklist),即在辨識過程中不考慮的字符。在這裡,OTlIi 表示排除大寫字母 'O'、'T',小寫字母 'l'、'I'、'i'。這可以用來排除一些容易混淆的字符,提高辨識的準確性。

--oem 3: 這部分指定 OCR 引擎模式(OCR Engine Mode)。在這裡,3 表示選擇 OEM_TESSERACT_ONLY 模式,僅使用 Tesseract OCR 引擎而不使用 LSTM 引擎。這是一種特定的辨識引擎配置。

--psm 6: 這部分指定了頁面分割模式(Page Segmentation Mode)。在這裡,6 表示使用自動分割,但不進行方向和腳本檢測。這可以適用於單列文本的情況。

threshold_value = 150
def getPuTextSize(img):
# 取得影像短邊的大小,並將其除以 500
sz = min(img.shape[:2]) / 500
# 取最大值,並四捨五入得到線寬
lw = max(round(sz), 1)
# 字型大小為影像短邊的 1/3 或 1(取最大值)
font_sz = max(sz / 3, 1)
return lw, font_sz

設定threshold_value 二值化參數 後續 cv2.threshold用的到

這個函數getPuTextSize是用來計算在圖像上顯示文字時所需的線寬和字型大小

def OCR_Area_Fuction(image: np.ndarray, gray_image: np.ndarray, boxes_data: str) -> str:
height, width, _ = image.shape
ocr_str = '' # 用來儲存辨識的文字
OCR_Area_list = [] # 用來儲存每個辨識區域的黑色像素數量

for box in boxes_data.splitlines():
b = box.split()
# 取出字元,位置 x, y,長寬 w, h
char, x, y, w, h = b[0], int(b[1]), int(b[2]), int(b[3]), int(b[4])
# 提取 ROI(Region of Interest),即辨識區域
roi = gray_image[height - h:height - y, x:w]
# 進行二值化處理
_, binary_roi = cv2.threshold(roi, threshold_value, 255, cv2.THRESH_BINARY)
# 統計黑色像素數量
black_pixel_count = roi.size - cv2.countNonZero(binary_roi)
OCR_Area_dit = {char: black_pixel_count} # 將黑色像素數量與對應的字元建立成字典
lw, font = getPuTextSize(roi) # 取得文字的線寬和字型大小
# 繪製矩形框
cv2.rectangle(image, (x, height - y), (w, height - h), (0, 255, 0), 2)
# 在圖像上放置文字
cv2.putText(image, char, (x, height - int(y)), cv2.FONT_HERSHEY_SIMPLEX, font, (255, 0, 0), lw, cv2.LINE_AA)
ocr_str += char
OCR_Area_list.append(OCR_Area_dit) # 將該辨識區域的黑色像素數量加入列表

return ocr_str, OCR_Area_list

這個函數 OCR_Area_Fuction 主要用於處理 Tesseract OCR 的辨識結果,同時計算每個辨識區域的黑色像素數量,並在原始圖像上繪製相應的矩形框和文字。

這個函數的主要步驟包括:

  1. 分割和提取信息: 對 Tesseract 辨識的結果進行分割,提取出每個辨識區域的相關信息,如字元、位置等。
  2. 計算黑色像素數量: 對每個辨識區域進行二值化處理,然後統計黑色像素的數量。
  3. 繪製矩形框和文字: 在原始圖像上根據辨識的位置信息繪製矩形框和放置文字。
  4. 儲存結果: 將辨識的文字組合成字符串,同時將每個辨識區域的黑色像素數量儲存到列表中。

最終,函數返回辨識的文字和每個辨識區域的黑色像素數量列表。

ocr_str, OCR_Area_list = OCR_Area_Fuction(image,gray_image,boxes_data)
print(f'OCR_char : {ocr_str}')
print(f'OCR_Area_list : {OCR_Area_list}')
cv2.imshow('OCR_Result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出辨識的文字和相應的黑色像素數量,並以視窗形式顯示帶有標記的圖像。


若有問題歡迎提問,愛心 追蹤~













avatar-img
129會員
217內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
python Streamlit連動github程式碼實現YoloV8網頁版偵測物件 先致敬,YoloV8原作Github程式碼 Streamlit網頁 實現YoloV8 偵測物件 套用模型為YoloV8(YOLOv8n)最小模型,因github上傳檔案最大上限為25mb 導入圖像(搜尋街景
python Streamlit連動github程式碼實現YoloV8網頁版偵測物件 先致敬,YoloV8原作Github程式碼 Streamlit網頁 實現YoloV8 偵測物件 套用模型為YoloV8(YOLOv8n)最小模型,因github上傳檔案最大上限為25mb 導入圖像(搜尋街景
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
既要工具强,又要價格美,甚至還得簡單好用,這樣的“數位化神器”真的存在嗎? 本文將介紹幾款各有優缺點的OCR工具,幫助你們做出選擇,找到適合自己的幫手。 FreeOCR、Adobe Acrobat OCR、pdftopdf.ai,全能型的、簡單的都包含在內!
Thumbnail
在學術研究和工作中,快速記錄口頭資訊和編輯文字資料是常見挑戰。本文介紹了錄音工具和OCR(光學文字識別)技術的應用,幫助讀者提升學習和工作效率。文中詳細介紹了多款錄音工具的特性以及OCR技術的工作原理,並提供了相關實用建議,強調如何結合這兩種工具來提升學習效果,幫助留學生更輕鬆地理解和整理課堂資訊。
Thumbnail
在數位化時代,OCR工具已成為不可或缺的一部分。無論是辦公文件的自動化處理還是個人文件的管理,OCR工具都能幫助我們高效地從掃描件或圖片中提取文字資訊。本文將分享我使用過的最好用的OCR工具,並詳細介紹其功能、使用體驗以及與其他工具的對比。
Thumbnail
在數位化時代,OCR工具成為了不可或缺的一部分。無論是辦公文件的自動化處理還是個人文件的管理,OCR工具都能幫助我們高效地從掃描件或圖片中提取文字資訊。本文將分享我使用過的最好用的OCR工具,並詳細介紹其功能、使用體驗以及與其他工具的對比。
Thumbnail
在數字化時代,PDF文件廣泛使用,但傳統處理方式顯得力不從心。本文推薦pdftopdf.ai等工具,通過OCR識別,將圖片中的文字轉化為可編輯、可搜索的文本。探討PDF文檔分析的AI工具,功能和價格。描述其用途以解決掃描件中文字無法直接搜索的困擾,提高工作效率。
Thumbnail
學習如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
在信息化時代,PDF文件無處不在。無論是學術研究、商業文件還是個人檔案,PDF都已成為最常見的文檔格式。然而,許多PDF文件是通過掃描紙質文檔生成的,這些文件中的文字無法直接編輯或複製。借助先進的OCR技術,使用者可以將掃描的PDF轉換為可搜索的文本,提升工作和學習效率。
Thumbnail
在本文中,我們將瞭解如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
🚀 正在為翻譯掃描書籍PDF而苦惱嗎?🧐 使用 PDFtoPDF.ai,輕鬆將圖片轉換為文字並翻譯!對於需要快速參考和理解外文文本的學生來說,非常完美。透過高精度OCR和簡便的翻譯工具,提升你的學術工作效率。📚✨
Thumbnail
Google Tesseract Config說明,程式範例實際修改示範 前言 Tesseract 的 config 檔案用於指定 OCR 引擎的設定和參數。這些參數可以影響文本識別的結果 本文將彙整常用參數調整,並呈現不同參數出現不同的辨識結果 官網Tesseract OCR參數說明連結
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
既要工具强,又要價格美,甚至還得簡單好用,這樣的“數位化神器”真的存在嗎? 本文將介紹幾款各有優缺點的OCR工具,幫助你們做出選擇,找到適合自己的幫手。 FreeOCR、Adobe Acrobat OCR、pdftopdf.ai,全能型的、簡單的都包含在內!
Thumbnail
在學術研究和工作中,快速記錄口頭資訊和編輯文字資料是常見挑戰。本文介紹了錄音工具和OCR(光學文字識別)技術的應用,幫助讀者提升學習和工作效率。文中詳細介紹了多款錄音工具的特性以及OCR技術的工作原理,並提供了相關實用建議,強調如何結合這兩種工具來提升學習效果,幫助留學生更輕鬆地理解和整理課堂資訊。
Thumbnail
在數位化時代,OCR工具已成為不可或缺的一部分。無論是辦公文件的自動化處理還是個人文件的管理,OCR工具都能幫助我們高效地從掃描件或圖片中提取文字資訊。本文將分享我使用過的最好用的OCR工具,並詳細介紹其功能、使用體驗以及與其他工具的對比。
Thumbnail
在數位化時代,OCR工具成為了不可或缺的一部分。無論是辦公文件的自動化處理還是個人文件的管理,OCR工具都能幫助我們高效地從掃描件或圖片中提取文字資訊。本文將分享我使用過的最好用的OCR工具,並詳細介紹其功能、使用體驗以及與其他工具的對比。
Thumbnail
在數字化時代,PDF文件廣泛使用,但傳統處理方式顯得力不從心。本文推薦pdftopdf.ai等工具,通過OCR識別,將圖片中的文字轉化為可編輯、可搜索的文本。探討PDF文檔分析的AI工具,功能和價格。描述其用途以解決掃描件中文字無法直接搜索的困擾,提高工作效率。
Thumbnail
學習如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
在信息化時代,PDF文件無處不在。無論是學術研究、商業文件還是個人檔案,PDF都已成為最常見的文檔格式。然而,許多PDF文件是通過掃描紙質文檔生成的,這些文件中的文字無法直接編輯或複製。借助先進的OCR技術,使用者可以將掃描的PDF轉換為可搜索的文本,提升工作和學習效率。
Thumbnail
在本文中,我們將瞭解如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
🚀 正在為翻譯掃描書籍PDF而苦惱嗎?🧐 使用 PDFtoPDF.ai,輕鬆將圖片轉換為文字並翻譯!對於需要快速參考和理解外文文本的學生來說,非常完美。透過高精度OCR和簡便的翻譯工具,提升你的學術工作效率。📚✨
Thumbnail
Google Tesseract Config說明,程式範例實際修改示範 前言 Tesseract 的 config 檔案用於指定 OCR 引擎的設定和參數。這些參數可以影響文本識別的結果 本文將彙整常用參數調整,並呈現不同參數出現不同的辨識結果 官網Tesseract OCR參數說明連結