簡體   English   中英

低質量數字圖像的 OCR 預處理方法?

[英]Preprocessing methods for OCR on low quality digit images?

我目前正在研究一個項目,該項目將讀取數獨網格的圖像,檢測網格,識別數字,解決難題,並將解決方案疊加在圖像上。 為了識別數字,我已經划分網格成n * 2圖像,其中每個圖像是單獨的網格(例如: EX2 EX9 ),並運行它們成pytesseract。 然而,我的圖像都沒有檢測到任何文本,即使它只是一個沒有噪音/邊框/等的數字圖像。

我已經嘗試了平滑圖像、各種閾值方法、調整圖像大小、反轉圖像以及將數字裁剪到邊界框的常用方法,但這些方法似乎都不起作用。 我已經在其他圖像上測試了我為 pytesseract 編寫的代碼,這些代碼似乎都可以正常工作,只是對我的圖像不起作用。

任何人都可以就我可以嘗試的內容和/或為什么我的圖像似乎不容易處理提供建議嗎?

作為參考,這是我一直在使用的 pytesseract 的 image_to_string 的設置:

text = image_to_string(im, config='--psm 10 --oem 3' + '-c tessedit_char_whitelist=123456789')

我找到了一個解決方案,但它絕對不漂亮。 我發現 pytesseract 在捕獲數字很少的數字方面很糟糕。 我從 CNN 中獲得靈感,該 CNN 在進行圖像識別時使用“零填充”。 現在請注意,我從中獲得靈感的唯一一件事是它的實際名稱,而不是方法(這比這篇文章將要接近的任何東西都要復雜得多)。

我找到了一個包含 0 的圖像,並創建了一個帶有三個零(任意選擇的數字和數字數量)的“零填充圖像”。 無論如何,我發現pytesseract能夠完美地掃描數字圖像! 15/15 例,而不是 3/15 例。 請記住將 OCR 掃描的數字除以 1000(如果您使用三個 0)。

我使用了這篇文章中顯示的水平圖像堆疊技術: Image stacking post

import numpy as np
from PIL import Image
def concat_images(imga, imgb):
    """
    type(imga): string of filename
    type(imgb): string of filename
    type(new_img): PIL.Image.Image

    """
    imga = np.asarray(Image.open(imga).convert('LA') )
    imgb = np.asarray(Image.open(imgb).convert('LA') )

    ha,wa = imga.shape[:2]
    hb,wb = imgb.shape[:2]
    max_height = np.max([ha, hb])
    total_width = wa+wb
    new_img = np.zeros(shape=(max_height, total_width, 2) , dtype = 'uint8')
    new_img[:ha,:wa]=imga
    new_img[:hb,wa:wa+wb]=imgb
    new_img = Image.fromarray(new_img)

    return new_img

暫無
暫無

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

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