2012-09-28 12 views
0

我必須從視頻流中的圖像中識別數字,有幾個事情,應該讓識別更容易:
1)它是固定的字體6×8,所有符號的寬度相等
2)我知道的確切位置數字,它們總是矩形的,不是旋轉/平方/縮放的,但由於空氣傳輸毛刺可能會有一些失真。
3)只有數字和。
4)數字的背景是黑色的半(50%不透明)我應該如何使用等寬數字識別?

我試過的Tesseract v2和v3,但.NET包裝並不完美,識別錯誤是非常大的,即使我用自定義字體的培訓,據我所知,這是因爲小分辨率。

我已經做出了非常簡單的算法,通過將圖像轉換爲黑白圖像和計算原始字體圖像與來自流的圖像之間的匹配像素,它比tesseract執行得更好,但我狡猾更復雜的算法會做得更好。

我試着用BackPropagationLearning使用ActivationNetwork來訓練AForge,並且它沒有收斂(本文的第一部分,只要我不需要縮放和幾個字體http://www.codeproject.com/Articles/11285/Neural-Network-OCR,正如我所理解的,文章中的代碼是針對舊版本的AForge),不好的一面是,這個項目不再支持,論壇關閉,谷歌組也是我理解的。

我知道有.NET的OpenCV端口,據我所知,它具有不同於AForge的網絡方法,所以questiton是最適合的方法。

那麼有沒有.NET框架可以幫助我,如果它支持多個神經網絡實現,哪種實現最適合?

+2

Tesseract嘗試的一件事是如果您的圖片來自300dpi掃描的圖書圖片,則將圖片升級爲您將獲得的圖片。我能夠通過將這些寬度擴大到100像素的寬度來獲得Tesseract的12像素寬度 –

回答

3

對於固定大小的字體在固定的放大倍數下,您可能會使用基於模板匹配的不太複雜的OCR方法。有關如何使用OpenCV進行模板匹配的示例,請參閱here(不是.NET,但希望足以讓您開始。)基本思想是您爲每個數字創建一個模板,然後嘗試匹配目標位置的所有模板,選擇具有最高比賽分數的球員。由於您知道數字的位置,因此您可以在每個數字的非常小的區域搜索。有關模板匹配背後理論的更多信息,請參閱關於互相關的this wiki article

這實際上是簡化OCR應用程序的基礎(通常用於識別特殊的OCR字體,如用於在硅片上打印序列號的SEMI標準字體)。生產級算法還可以支持對縮放,旋轉和翻譯,但底層技術幾乎相同。

+0

我非常同意,由於您處於這樣一個受控環境(固定大小,已知位置等),因此無需進入真正的OCR即可進行模板匹配。 – remi

+0

正如我得到合適算法的名稱,我發現它在[AForge]中實現(http://www.aforgenet.com/framework/docs/html/17494328-ef0c-dc83-1bc3-907b7b75039f.htm ),所以我使用了它,它的工作非常好,非常感謝。 – Giedrius

2

試試看this projectthis project too。這兩個項目都解釋了OCR如何工作並向您展示如何在C#和.NET中實現它。

+0

第二個鏈接被提及的問題,但無論如何感謝 – Giedrius

+0

@Giedrius - 對不起,我沒有捕捉到第二個鏈接。 [這是另一個](http://www.codeproject.com/Articles/41709/How-To-Use-Office-2007-OCR-Using-C),雖然這可以使用Microsoft Office 2007 OCR,但如果您有Microsoft辦公室在你的機器上。 – Icemanind

0

如果您不是絕對的匆忙,我會建議您首先尋找解決問題的方法。我與WEKA取得了很好的經驗。使用WEKA,您可以快速測試一堆算法。當你找到解決問題的算法時,你可以將它移植到.NET,構建一個包裝器,尋找一個實現或者(如果它是一個簡單的算法)在.NET中重建它。