OCR,全稱Optical character recognition,或者optical character reader,中文譯名叫做光學文字識別。它是把圖像文件中的手寫文本,列印文本轉換為機器編碼文本的一種方法。 ...
朋友需要一個工具,將圖片中的文字提取出來。我幫他在網上找了一些OCR的應用,都不好用。所以準備自己研究,寫一個Web APP供他使用。
OCR1,全稱Optical character recognition,或者optical character reader,中文譯名叫做光學文字識別。它是把圖像文件中的手寫文本,列印文本轉換為機器編碼文本的一種方法。
OCR技術廣泛用於識別列印紙張中的文字數據 -- 比如護照,支票,銀行聲明,收據,統計表單,郵件等。OCR的早期版本,需要對圖片中的每個文字都進行訓練,一次只能作用於一種字體。高級的版本增加了很大的識別率,可以同時識別現在很多流行的字體,支持不同種類格式的圖片文件。一些系統可以生成接近於原來圖片格式的輸出,包括圖片,排版,以及其它非文本組件,這也叫做版面還原。
工具
Tesseract
現在最出名,最常用的OCR就是谷歌的tesseract OCR engine2。最新的版本是Tesseract4。Tesseract的主要開發者是Ray Smith3.
Tesseract支持unicode(UTF-8),安裝後即可識別超過100種語言。
Tesseract支持不同的輸出可是:普通文本,hOCR(html),PDF,TSV,invisible-text-only PDF。在master分支,還試驗性地支持ALTO(XML)格式。
請記住,在大多數情況下,為了獲得更好的OCR結果,你需要為提供給Tesseract的圖片提升質量4.
Tesseract可以通過訓練來識別其它語言和其它字體5.
另外,有很多第三方的Tesseract GUI應用。可以直接下載使用6。
pytesseract
Python-tesseract7(pytesseract)是Google Tesseract ORC引擎的封裝。首次commit的2014年。用這個庫,可以很方便地編寫腳本,可以用它來識別所有可以由PIL識別的圖片格式,包括jpeg, png, gif, bmp, tiff等, 而tesseract-orc本來只支持tiff和bmp兩種格式。
如果在腳本中使用,識別的文本可以輸出為Python字元串,而不是直接輸出到文件中。
另外,這個代碼庫只有一個文件,400行代碼。如果有任何疑問,可以直接翻看源代碼。
tesserocr
tesserocr8也是一個TesseractOCR的封裝庫。它的首次commit是2015年。
這個庫相對於pytesseract的優勢在於9,這個庫是使用Cython來直接調用Tesseract的C++ API。使用它和threading
模塊來處理圖片,可以釋放GIL,達到真正的併發執行。
但是我更喜歡pytesseract,因為它的API更加的pythonic。