tesseract這個東西,之前朋友有個項目,問到我的時候看了一下,因為那個項目難度比較高,不敢接,也就作罷了。這次翻出來看看純屬興趣 - 感覺手機拍照然后識別些東西,並且聯網查詢,還是蠻有意思的。
tesseact其實全稱是tesseract-ocr,是個自動識別字符的程序,項目網址是:http://code.google.com/p/tesseract-ocr/。雖然其主流平台是三大系統(Win/Linux/Mac OS),但在android和iphone上也是可以跑的 - 這點對我來講非常重要。
你可以直接想在其命令行工具使用,或者下載其SDK開發自己的程序。
tesseract支持多種語言 - 你只需下載對應的訓練過的語言文件即可,並且可以通過config文件來調整行為:比如只識別數字,比如只識別指定的words或者指定的pattern。另外提一下,tesseract只支持字符識別,不支持條形碼(barcode)識別【1】
【文檔】
比較有用的鏈接:
- FAQ:http://code.google.com/p/tesseract-ocr/wiki/FAQ
- 命令行程序幫助:http://tesseract-ocr.googlecode.com/svn/trunk/doc/tesseract.1.html
- 基於tesseract開發的軟件:http://code.google.com/p/tesseract-ocr/wiki/3rdParty
- tesseract提供的工具與各種語言的API:http://code.google.com/p/tesseract-ocr/wiki/AddOns
【試玩】
我用手機拍了一張雙色球的彩票:
直接識別:
$ tesseract IMAG0409.jpg IMAG0409 -l chi_sim
結果有點慘:
|.1 _>8-二 (樾 Q|. '1'ç ;,2. 4,之 巴)'-j\
虻 號 :s101 0500 » ()帆5
卉獎日朋 20菩2.10.:ö 生趴月虧201z127 上
姜丁琵 日 胴/盯間: 2012.10.26/11:26:26
A) H: 02 04 12 13 16 26
Q CD
"/ 、«
l"〓:廣':::廣'
Oo'--OO
l3!"'.>'-"]丹'_O
°
l薛
l2 l5 20 “
鷹
‘瞞ã
竄ã
薄喃§
薄5漣
'-‘iC-ei-l
如果單獨拎出關鍵信息來識別的話:
$ tesseract qihao.jpg qihao -l chi_sim
全國朋虧201Z1Z7
$ tesseract qihao.jpg qihao digits
25552012127
可以看出,按中文識別的話,認出了兩個字,但后面的數字有差錯;按數字識別的話,后面的數字是全對了,但前面把中文也糊弄成數字了(不是它的錯) ,所以這里應該可以再分成兩步,先按中文找“全國期號”,找到后把后面的內容按數字識別,便得到了這一期的期號(方便聯網去取當期的中獎號碼)
$ tesseract haoma.jpg haoma
A) HZ 02 04. 12 1316 26
后面的號碼對了,但前面分號給識別成了Z,而且04后面多了個點,更嚴重的是:第二行不見了 - 看來得識別到紅球、黑球號碼然后分兩行處理才行。
結合手機拍照的光線、角度、距離,以及彩票可能的褶皺,旋轉,要地位期號、紅球、白球並精確識別出號碼看來還蠻有挑戰性的 - 考慮到彩票對失誤零容忍的特點(老子中了500萬,你卻說沒中?!),困難重重啊。
【1】條形碼有一維碼(豎線)和二維碼(方塊),一般會在下面標上條形碼的號碼 - 那是給人看的,而條形碼是給機器識別的。很顯然,簡單的線條或者方塊,識別起來比數字要高效與准備的多。