2010-08-17 25 views
5

作爲一個寵物項目/學習體驗(不是這不是家庭作業),我正致力於從照片中識別條形碼的軟件。我不是在尋找軟件或者圖書館,而是將它作爲一個學習練習,我正在寫博客,並將在Codeplex上發佈。用AI識別條碼

I have code that successfully recognizes EAN13 barcodes (which I published on CodePlex)和UPC版本A/E應該很快就會出現。不過,我有兩個關注點。首先是解碼圖像中有點模糊或對比度差的條形碼等。其次是在一張較大的圖片中簡單地找到實際的條形碼(現在您必須給我一張條形碼照片)。

我有直覺認爲某種形式的AI會幫助我在這裏。我過去在遺傳算法方面玩過一些,我之前在AI上學過一門課程,所以對我來說這並不完全陌生,但我不確定從哪裏開始。

什麼類型的算法最適合這類問題?任何推薦閱讀或代碼的AI咕嚕工作?是的,我想了解正在發生的事情,但我不一定要下到自己編碼類別等級。

+3

也許是一個神經網絡?我不知道。也許我只是喜歡神經網絡。 AI告訴我喜歡他們。要不然。 – 2010-08-17 21:08:36

+0

@ fire.eagle:我的任何鏈接或指針?對「神經網絡」和「人工神經網絡」的網絡搜索過於廣泛。 :) – ctacke 2010-08-17 21:13:56

+0

我認爲你已經看到了iPhone的RedLaser應用程序? – 2010-08-17 21:18:12

回答

8

我會建議搜索條形碼的屬性。一些,我在記有:

  1. 直方圖的顏色示出了在大約均勻分佈
  2. 做一個hough transformation發現許多平行線
  3. 線條的厚度具有兩種不同尺寸的兩種不同顏色。

其他?

有了這個,我會將圖像分成幾部分,然後對這些特徵進行分類,然後將結果合併到一起,以便計算一個條目是否包含條形碼。

對於你的第二個問題(模糊圖像),我會建議計算grayvalues的1st order derivative,然後檢測這個空間中的線的邊緣。如果圖像模糊,則導數的最大值較低,但應該可以檢測到某種模糊因素。

這對你有幫助嗎?

0

您不需要任何特定的AI或軟計算技術。您需要應用圖像處理技術來提高圖像的質量或將條形碼與較大的圖像隔離。 您可以使用Matlab進行原型設計並學習更多關於圖像處理的知識。

+0

什麼樣的「圖像處理技術」?我也在這裏寫代碼。我用手機拍了一張照片,我想要一個字符串。就我所知,Matlab並不是那種適用的公式。 – ctacke 2010-08-17 21:24:36

+0

Matlab是一個用於圖像處理和探索並找到適合您需求的解決方案的wonderfool工具。有大量的過濾器和功能。現代計算機視覺領域的最新技術凝聚在Matlab圖像處理庫中。一旦你找到了你所選擇的編程語言和平臺來翻譯它的最佳解決方案。我無法告訴你解決問題的最佳方法。你必須試驗一下。 – 2010-08-18 11:01:50

4

正如mp已經指出,你不需要任何真正的AI技術。看看Real World Haskell的第12章。它實現了一個幾乎完整的條形碼識別器。示例代碼在Haskell中,但有很多解釋,所以即使沒有Haskell經驗,您也可能會理解這些想法和技巧。

如果你想用AI解決它,那麼最好的辦法就是使用ANN。對於給定的問題,我建議使用稱爲HyperNEAT的相當先進的技術。見我的解釋(和鏈接)作爲第一個答案SO質疑Neural Network Size...

我可能會使用兩種或三種不同的網絡,

  • 第一個找上了大局觀的條形碼。一個輸出神經元每像素/一組像素,如果該像素似乎是條形碼的一部分,則輸出值爲置信度。基於結果,我會使用一些圖像轉換將其轉換爲「標準」格式(x * y矩形)
  • 如果在查找條形碼位置時遇到困難,請使用第二個。提供第一個結果,並要求它給出兩個角的座標。但是,我不太確定這個演變會非常容易。
  • 最後一個可用於標準格式,每條線(或方形,如果您使用可能的2D條形碼)的輸出神經元,說明給定區域是否應被視爲黑色或白色。

也許這也有助於對圖像進行一些預處理,例如,那些在RWH中描述的。

+0

HyperNEAT聽起來很有趣 – 2010-08-18 07:59:07

+0

是的,這是一個非常強大的技術。研究相當密集,他們經常提出非常有創意的擴展/應用程序。 – 2010-08-18 08:43:12