使用一行Python代碼從圖像讀取文本
處理圖像不是一項(xiàng)簡單的任務(wù)。對(duì)你來說,作為一個(gè)人,很容易看著某樣?xùn)|西然后馬上知道你在看什么。但電腦不是這樣工作的。
對(duì)你來說太難的任務(wù),比如復(fù)雜的算術(shù),或者一般意義上的數(shù)學(xué),是計(jì)算機(jī)毫不費(fèi)力就能完成的。但在這里,情況正好相反——對(duì)你來說很瑣碎的任務(wù),比如識(shí)別圖像中的貓或狗,對(duì)電腦來說真的很難。在某種程度上,我們是天造地設(shè)的一對(duì)。至少現(xiàn)在是這樣。
雖然圖像分類和涉及到一定程度計(jì)算機(jī)視覺的任務(wù)可能需要大量的代碼和扎實(shí)的理解,但是從格式良好的圖像中讀取文本在Python中卻是簡單的,并且可以應(yīng)用于許多現(xiàn)實(shí)生活中的問題。
在今天的帖子中,我想證明這一點(diǎn)。雖然會(huì)安裝一些庫,但不會(huì)花很多時(shí)間。這些是你需要的庫:
- OpenCV
- PyTesseract
OpenCV
現(xiàn)在,這個(gè)庫將只用于加載圖像,實(shí)際上你不需要事先對(duì)它有太多了解(盡管它可能有幫助,你將看到為什么)。
根據(jù)官方文件:
OpenCV(開源計(jì)算機(jī)視覺庫)是一個(gè)開源的計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫。OpenCV的目的是為計(jì)算機(jī)視覺應(yīng)用提供一個(gè)通用的基礎(chǔ)結(jié)構(gòu),并加速機(jī)器感知在商業(yè)產(chǎn)品中的使用。OpenCV是bsd許可的產(chǎn)品,OpenCV使企業(yè)可以輕松地使用和修改代碼
簡而言之,你可以使用OpenCV來做任何類型的圖像轉(zhuǎn)換,這是一個(gè)相當(dāng)簡單的庫。
如果你還沒有安裝它,那么它將只是終端中的一行:
- pip install opencv-python
差不多就是這樣。在此之前,一切都很簡單,但這種情況即將改變。
PyTesseract
這個(gè)庫到底是什么東西?根據(jù)維基百科:
Tesseract是用于各種操作系統(tǒng)的光學(xué)字符識(shí)別引擎。它是免費(fèi)軟件,根據(jù)Apache許可2.0版發(fā)布,自2006年以來由Google贊助開發(fā)。
我敢肯定,現(xiàn)在有更多復(fù)雜的庫可用,但是我發(fā)現(xiàn)這個(gè)庫運(yùn)行良好。根據(jù)我自己的經(jīng)驗(yàn),該庫應(yīng)該能夠從任何圖像中讀取文本,但前提是該字體不會(huì)使你連連看都看不懂。
如果無法從你的圖像中讀取文字,花更多的時(shí)間使用OpenCV,應(yīng)用各種過濾器使文本高亮。
現(xiàn)在安裝在底部有些麻煩。如果你使用的是Linux,則全部歸結(jié)為幾個(gè)sudo-apt get命令:
- sudo apt-get updatesudo apt-get install tesseract-ocrsudo apt-get install libtesseract-dev
我用的是Windows系統(tǒng),所以這個(gè)過程有點(diǎn)乏味。
首先,打開這個(gè)URL:https://github.com/UB-Mannheim/tesseract/wiki下載32位或64位的安裝程序:

安裝本身很簡單,只需單擊幾次Next。是的,你還需要做一個(gè)pip安裝:
- pip install pytesseract
接下來要需要告訴Python Tesseract安裝在何處。在Linux機(jī)器上,我不需要這樣做,但在Windows上是必需的。默認(rèn)情況下,它安裝Program Files。
如果你做的一切正確,執(zhí)行這些代碼應(yīng)該不會(huì)產(chǎn)生任何錯(cuò)誤:

獲取文本
讓我們從一個(gè)簡單的開始。我找到了一些免版稅的圖片,里面有一些文字,第一個(gè)是這樣的:
它應(yīng)該是簡單的一個(gè),有可能Tesseract會(huì)讀那些藍(lán)色的“對(duì)象”作為括號(hào)。讓我們看看會(huì)發(fā)生什么:

我的猜測(cè)是正確的。不過,這不是一個(gè)問題,你可以使用一些Python技巧輕松地解決這些問題。
下一個(gè)可能更棘手:

我希望它不會(huì)檢測(cè)到硬幣上的“B”:

看起來效果很好。
現(xiàn)在輪到你把它應(yīng)用到你自己的問題上了。如果文本與背景混合,OpenCV技能在這里可能是至關(guān)重要的。
在你離開之前
對(duì)計(jì)算機(jī)來說,從圖像中讀取文本是一項(xiàng)相當(dāng)困難的任務(wù)。想想看,電腦不知道字母是什么,它只對(duì)數(shù)字有效。在引擎蓋后面發(fā)生的事情一開始可能看起來像一個(gè)黑盒子,但我鼓勵(lì)你進(jìn)一步研究,如果這是你感興趣的領(lǐng)域。
我并不是說PyTesseract每次都能很好地工作,但是我發(fā)現(xiàn)即使在一些比較復(fù)雜的圖像上它也足夠好。但不是所有情況都很好,有時(shí)候需要一些圖像處理需要使文本高亮讓其相對(duì)于背景更加突出。