簡體   English   中英

使用 Pytesseract OCR 從表格圖像中識別特定數字

[英]Recognize specific numbers from table image with Pytesseract OCR

我想從附加的圖像(png 文件)中讀取一列數字。

點擊查看圖片

我的代碼是

import cv2
import pytesseract
import os

img = cv2.imread(os.path.join(image_path, image_name), 0)
config= "-c 
        tessedit_char_whitelist=01234567890.:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

pytesseract.image_to_string(img, config=config)

這段代碼給了我輸出字符串:'n113\\nun\\n1.08'。 正如我們所見,有兩個問題:

  1. 它無法識別 1.13 中的小數點(見附圖)。
  2. 它完全無法讀取 1.11(見附圖)。 它只返回“修女”。

這些問題的解決方案是什么?

最好的

您需要對圖像進行預處理。 一種簡單的方法是調整圖像大小,轉換為灰度,然后使用 Otsu 閾值獲得二值圖像。 從這里我們可以應用輕微的高斯模糊,然后反轉圖像,以便提取的所需文本為白色,背景為黑色。 這是准備好用於 OCR 的處理過的圖像

OCR 的結果

1.13
1.11
1.08

代碼

import cv2
import pytesseract
import imutils

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

# Resize, grayscale, Otsu's threshold
image = cv2.imread('1.png')
image = imutils.resize(image, width=400)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

# Blur and perform text extraction
thresh = 255 - cv2.GaussianBlur(thresh, (5,5), 0)
data = pytesseract.image_to_string(thresh, lang='eng',config='--psm 6')
print(data)

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

暫無
暫無

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

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