簡體   English   中英

如何使用 Pytesseract 文本識別提高 OCR?

[英]How to improve OCR with Pytesseract text recognition?

嗨,我希望通過 pytesseract 提高我在數字識別方面的表現。

我將原始圖像分成如下所示的部分:

圖片1

大小可以變化。

為此,我應用了一些像這樣的預處理方法

image = cv2.imread(im, cv2.IMREAD_GRAYSCALE)
image = cv2.GaussianBlur(image, (1, 1), 0)
kernel = np.ones((5, 5), np.uint8)
result_img = cv2.blur(img, (2, 2), 0)
result_img = cv2.dilate(result_img, kernel, iterations=1)
result_img = cv2.erode(result_img, kernel, iterations=1)

我明白了

圖片2

然后我將其傳遞給 pytesseract:

num = pytesseract.image_to_string(result_img, lang='eng',
                                     config='--psm 10 --oem 3 -c tessedit_char_whitelist=0123456789')

然而,這對我來說還不夠好,而且經常弄錯數字。

我正在尋找改進的方法,我試圖保持這種最小化和自給自足,但如果我不清楚,請告訴我,我會詳細說明。

謝謝你。

通過在執行 OCR 之前嘗試預處理圖像但使用了不正確的方法,您走在正確的軌道上。 沒有理由擴張或侵蝕圖像,因為這些操作主要用於去除小的噪聲粒子。 此外,您當前的輸出不是二進制圖像。 它可能看起來只包含黑白像素,但它實際上是一個 3 通道 BGR 圖像,這可能是您得到不正確 OCR 結果的原因。 如果您查看Tesseract 提高質量,您會注意到 Pytesseract 要執行最佳 OCR,需要對圖像進行預處理,以便要檢測所需文本為黑色,背景為白色 為此,我們可以執行Otsu 閾值以獲得二值圖像,然后將其反轉,使文本位於前景中。 這將產生我們預處理的圖像,我們可以將其放入image_to_string 我們使用--psm 6配置選項來假設一個統一的文本塊。 查看更多設置的配置選項 結果如下:

輸入圖像->二進制->反轉

在此處輸入圖片說明 在此處輸入圖片說明 在此處輸入圖片說明

Pytesseract OCR 的結果

8

代碼

import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

# Load image, grayscale, Otsu's threshold, invert
image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
invert = 255 - thresh

# OCR
data = pytesseract.image_to_string(invert, lang='eng', config='--psm 6')
print(data)

cv2.imshow('thresh', thresh)
cv2.imshow('invert', invert)
cv2.waitKey()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM