2015-02-08 25 views
5

我正在嘗試開發Windows Phone 8.1應用程序,但我需要識別來自不同顯示器的一些數字。有沒有人知道用於Windows Phone的OCRing 7段顯示的API?

enter image description here

enter image description here

enter image description here

我下面這個例子:

http://bsubramanyamraju.blogspot.com/2014/08/windowsphone-81-optical-character.html

正在使用微軟OCR運行時庫:

https://www.nuget.org/packages/Microsoft.Windows.Ocr/

但是,當我試圖識別這些類型的照片時,它不起作用。即使我發現這個網站:

https://www.unix-ag.uni-kl.de/~auerswal/ssocr/

有沒有人有一個建議?還是有人知道任何有關它的代碼?

感謝您的有價值的知識。

回答

10

我希望您的問題的答案是「當然,這裏是」與黑盒程序的鏈接 - 任何OCR工具,但涉及幾個方面,最好單獨考慮。

首先,在你考慮任何OCR之前,還有一些關於圖像預處理的工作。您的圖片樣本非常不同,並且包含全部問題。

樣品1具有低對比度,所以當它被二值化爲黑白層時,大多數OCR將在某個階段內部執行,沒有要處理的字符。它在二進制化後看起來像這樣: enter image description here

請參閱此OCR博客文章,瞭解有關圖像預處理的其他詳細信息:http://www.ocr-it.com/guide-to-better-mobile-images-from-cell-phone-camera-for-higher-quality-ocr

其次,圖像頭中沒有dpi信息,一些OCR技術用於確定圖像的適當縮放。如果沒有標題信息,某些OCR程序可能會設置一些默認dpi,這可能會或可能不會匹配您的圖像,從而影響OCR結果。這並不重要,但如果可以在創建照片時執行此操作,則首選。

樣本2具有足夠的對比度,自適應公證可以返回清晰的圖像。它在標題中也缺少dpi分辨率值。 enter image description here

樣品3具有非常明顯的對比度,但它在標題中也沒有分辨率dpi。

一旦您的圖像針對OCR處理進行了優化,下一步就是查看OCR技術。

我沒有測試一次你提到,假設你有正確的實施,但沒有成功與他們。我測試了過去使用過的其他OCR工具。

一般來說,沒有我知道的7段OCR。但是,我能夠爲其專門的任務調整其他通用OCR。我每次使用「開箱即用」或使用默認設置的OCR都無法處理此識別。這是合乎邏輯和預期的。爲什麼?因爲大多數通用的OCR都是爲識別每個字符不可分的像素模式而編寫的。這與用於將單詞分隔成單獨字符的「字符可分性」原理有關。換句話說,內部OCR算法會查找構成每個字符的連接筆劃。功能更強大的商業OCR允許在像素圖案中出現一些中斷,但是它們預計會很少或不會出現,如打印或掃描中的缺陷,這可能會導致字符片段丟失。

自然界中的七段顯示將在每個字符中有多箇中斷,與字符可分性原則相沖突。

功能更強大的OCR技術具有a)更好的像素圖案中斷能力和/或b)具有特殊設置來處理這些情況。

我將使用OCR-IT基於Web的OCR API平臺進行進一步測試,這是我所熟知的。我在OCR功能上擔任開發人員。我也在我自己的iOS和Android應用中廣泛使用它。 OCR-IT API基於強大的商業OCR引擎,因此它具有良好的容忍性格缺陷以及一些控制功能,以幫助解決這種情況。

樣品3.這是最容易處理的樣品,所以我首先進行了測試。使用OCR-IT API,並且與默認設置的請求,請求輸出爲TXT格式,我得到如下: enter image description here

看來,OCR是)分割字符轉換成兩個獨立的線路,和b)嘗試儘可能接近有效字符地讀取結果圖案。

enter image description here

在此基礎上快速分析,做出一個調整,OCR設置結果如下認識:

enter image description here

是取得了OCR結果顯着差異的設置是從默認的打印開關鍵入使用「DotMatrix」,它位於整個OCR-IT API設置XML的中間:

<Job> 
 
<InputURL>http://i.stack.imgur.com/wOtFx.jpg</InputURL> 
 
    <CleanupSettings> 
 
     <Deskew>false</Deskew> 
 
     <RemoveGarbage>false</RemoveGarbage> 
 
     <RemoveTexture>false</RemoveTexture> 
 
     <RotationType>NoRotation</RotationType> 
 
    </CleanupSettings> 
 
    <OCRSettings> 
 
     <PrintType>DotMatrix</PrintType> 
 
     <OCRLanguage>English</OCRLanguage> 
 
     <SpeedOCR>false</SpeedOCR> 
 
     <AnalysisMode>MixedDocument</AnalysisMode> 
 
     <LookForBarcodes>false</LookForBarcodes> 
 
    </OCRSettings> 
 
    <OutputSettings> 
 
     <ExportFormat>Text</ExportFormat> 
 
    </OutputSettings> 
 
</Job>

使用DOTMATRIX打印類型的導通必要的算法,以增加在字符結構,它通常是通過在點陣打印點陣打印機的性質發生斷裂的耐受性。或者,可以使用「打字機」打印類型,因爲預期打字字體也會出現字符中斷,因此可以通過OCR自動處理。

可能有一個更變化到API設定使用「數字」字符集(語言),有效地消除誤讀數1作爲我的任何可能性來運行OCR等

樣品2。在該樣本中,每個角色結構中的差距要大得多。即使是處理DotMatrix或Typerwriter打印類型的標準算法也無法適應這些廣泛的差距。使用所有可能的設置變體返回如下所示: enter image description here

字符分割似乎是問題。一個技術解決方案可以回到圖像預處理。可以實現簡單的算法來填補7段字符的每個段之間的間隙。它沒有非常精確,是這樣的:

enter image description here

但是,這是足以產生一個完美的OCR結果。

enter image description here

由於可能是未知的預先其中7段LCD顯示器將需要填充間隙,並且其不,我建議此算法適用於所有LCD 7段的圖像,具有小或差距很大。我會將間隙的大小限制爲不超過分段的寬度。鑑於這些屏幕具有不同的背景和分段顏色,如果在二值化(黑色&白色)圖像上執行該預處理算法,則可以大大簡化該算法。

總體而言,假設進行了一些圖像預處理,該任務可以通過OCR和接近開箱功能來實現。總的來說,我認爲任何與OCR相關的項目都需要進行圖像預處理,特定於該項目。

如果您有任何關於OCR或圖像預處理的其他問題,請下載我。

相關問題