Tesseract Introduction
做了一段時(shí)間的OCR呼巷。在PC的Visual Studio上和在TI/ADI的DSP上都做過。一般都是看項(xiàng)目的具體情況捞烟,然后根據(jù)這具體情況薄声,設(shè)計(jì)一套算法萌业。設(shè)計(jì)好了之后,這套算法就只能應(yīng)用在這個(gè)項(xiàng)目上了奸柬。如果再來一個(gè)新的項(xiàng)目,就又得從頭寫起婴程±龋可是,不就是做OCR嗎档叔,不都差不多嘛桌粉!要是所有的OCR項(xiàng)目都能使用同一套代碼,那得有多帥呀衙四!
想一想铃肯,要做這件事,大概有下面這么些挑戰(zhàn):
- 自動(dòng)搜索文字传蹈。目前我做的文字定位押逼,都是知道文字在圖像的什么地方,然后用經(jīng)驗(yàn)參數(shù)定位的惦界。這樣的話挑格,就必須針對(duì)不同的識(shí)別任務(wù),制訂不同的識(shí)別參數(shù)沾歪。如果識(shí)別任務(wù)中表明不能確定文字所在的地方漂彤,那我就歇菜了。反之灾搏,如果能自動(dòng)地定位到文字的所在之處挫望,那不就離我的目標(biāo)近了一步嗎?
- 自動(dòng)分割狂窑。目前我做的文字分割媳板,基本都是預(yù)先知道有多少個(gè)字,字和字之前的間隔情況是怎么樣的等等一系列的信息之后泉哈,才可以開始動(dòng)手分割拷肌。可是如果我不知道這些信息呢旨巷?我又抓瞎了巨缘。
- 自動(dòng)識(shí)別。非常不好意思采呐,我現(xiàn)在能做OCR基本只能說在初級(jí)階段若锁。可以做英文和數(shù)字的OCR斧吐,而且還必須預(yù)先知道它們的字體是什么樣的又固。要是任務(wù)中說仲器,字體不定,那對(duì)不起仰冠,又是mission impossible乏冀。
- ……
因此,總得來說洋只,雖然我在OCR方面能做一些應(yīng)用辆沦,但是不能做的應(yīng)用更多。我本來想通過多學(xué)點(diǎn)書本知識(shí)再來實(shí)踐的方式來搞定這些問題识虚。然而肢扯,我為什么不去站在巨人的肩膀上呢?
做算法牛X的互聯(lián)網(wǎng)公司是誰担锤?當(dāng)然首推Google啦~Google維護(hù)著一項(xiàng)很著名的開源項(xiàng)目蔚晨,叫Tesseract。
所以肛循,我們就一起來學(xué)習(xí)一下這個(gè)OCR開源軟件吧铭腕,應(yīng)當(dāng)可以解決我在上面列出的一些問題。
歷史
Tesseract項(xiàng)目最初由惠普實(shí)驗(yàn)室支持多糠,1996年被移植到Windows上谨履,1998年進(jìn)行了C++化。在2005年Tesseract由惠普公司宣布開源熬丧。2006年到現(xiàn)在笋粟,都由Google公司開發(fā)。
目前析蝴,Tesseract的源代碼放在GitHub上害捕。
特性
目前,Tesseract可以識(shí)別超過100種語言闷畸。也可以用來訓(xùn)練其它的語言尝盼。
源碼包提供了一個(gè)OCR的引擎——libtesseract
以及一個(gè)命令行程序——tesseract
。
Tesseract支持多種輸出格式佑菩,如:普通文本盾沫、html、pdf等殿漠。
對(duì)于開發(fā)者
開發(fā)者可以使用libtesseract的C/C++接口來構(gòu)建自己的程序赴精。
Tesseract從源碼生成的文檔可以在tesseract-ocr.github.io中找到。
下載代碼
接下來绞幌,我們就先把最新代碼下載下來吧蕾哟。下載最新版本3.04.01的源代碼。
由于我是個(gè)OpenCV深度使用者辩恼,而OpenCV的一個(gè)重要插件ImageWatch只支持Visual Studio 2012(至少官方文檔上目前是這么說的璃饱,我也沒有試過更高版本的VS版本奖蔓,但比2012低的版本肯定是不行的呻惕。)所以以下都以Visual Studio 2012為例介紹。
目錄結(jié)構(gòu)是這樣的促绵。而在我目前還搞不清楚狀況的前提下又厉,紅框部分當(dāng)然就引起了我的注意菠镇。
VS2010
與VS2012
就差一點(diǎn)點(diǎn)昂秃。熟悉的人都知道禀梳,VS2010的項(xiàng)目想轉(zhuǎn)換成VS2012簡(jiǎn)直太簡(jiǎn)單了。完全的自動(dòng)轉(zhuǎn)換械蹋,而且不會(huì)有任何問題。
這不羞芍,雙擊tesseract.sln
哗戈,就自動(dòng)幫我轉(zhuǎn)換好了。
現(xiàn)在荷科,解決方案tesseract中出現(xiàn)了兩個(gè)項(xiàng)目唯咬,一個(gè)叫
libtesseract304
,一個(gè)叫tesseract
畏浆。很顯然胆胰,
libtesseract304
是實(shí)現(xiàn)功能的那個(gè)庫。而tesseract
是使用庫的應(yīng)用程序刻获。
libtesseract304
的項(xiàng)目配置:
tesseract
的項(xiàng)目配置:
我編程很喜歡用試錯(cuò)法蜀涨,就是明知道編譯通不過,也要編譯一下蝎毡。這不厚柳,我知道,現(xiàn)在編譯
libtesseract304
肯定是有一大堆問題的沐兵。但别垮,不管怎么樣,編譯了再說吧扎谎。
果然碳想,編譯器報(bào)了一大堆錯(cuò)。
一共有110個(gè)錯(cuò)毁靶。都說是無法打開包括文件:"allheaders.h"胧奔。
那么,allheaders.h文件是什么预吆,為什么會(huì)找不到葡盗?如何才能構(gòu)建出可以運(yùn)行的程序?且聽下回分解。