详细解读文字识别工具———Tesseract-OCR
閱讀提示
本文將提到Tesseract-OCR的簡介、配置使用并附帶超實用案例,包括pdf文字識別、圖形驗證碼提取等。
目錄
- 閱讀提示
- 一、工具介紹
- 二、配置環境變量
- 2.1 進入環境變量配置界面
- 2.2 添加系統變量
- 2.3 添加 tessdata 系統變量
- 三、使用 Tesseract-OCR
- 3.1 進入cmd 輸入下面的命令查看版本,正常運行則安裝成功:
- 3.2 使用下面命令識別圖片
- 四、處理給規范的文字
- 4.1 格式規范文字的理想示例
- 4.2 通過Python代碼實現
- 4.3 對圖片進行閾值過濾和降噪處理(了解即可)
- 4.4 從網站圖片中抓取文字
- 4.5 執行 JavaScript 語句
???在嘗試破解12306驗證碼的時候,提前了解了一下應對各種驗證碼的解決方案,這里主要是學習到了面對文字圖片驗證碼,例如亞馬遜、豆瓣等平臺的登錄時會遇到的情況,效果還不錯。
一、工具介紹
? ???Tesseract-OCR 是一款由HP實驗室開發由Google維護的開源OCR(Optical Character Recognition , 光學字符識別)引擎。與Microsoft Office Document Imaging(MODI)相比,我們可以不斷的訓練的庫,使圖像轉換文本的能力不斷增強;如果團隊深度需要,還可以以它為模板,開發出符合自身需求的OCR引擎。
GitHub 地址:https://github.com/tesseract-…
安裝包官方下載地址:https://digi.bib.uni-mannheim…
安裝包百度云盤下載地址:https://pan.baidu.com/s/1AOsJ…
二、配置環境變量
2.1 進入環境變量配置界面
右鍵點擊此電腦–屬性–高級系統設置–環境變量–系統變量–Path
2.2 添加系統變量
???找到系統變量的 Path ,將 Tesseract-OCR 的安裝目錄添加進去:
2.3 添加 tessdata 系統變量
???如下圖新建系統變量 : TESSDATA_PREFIX
???變量值為 tessdata 文件夾的路徑(在Tesseract-OCR的安裝目錄下):
三、使用 Tesseract-OCR
3.1 進入cmd 輸入下面的命令查看版本,正常運行則安裝成功:
tesseract --version3.2 使用下面命令識別圖片
tesseract 圖片路徑 輸出文件查看輸出的 result.txt文件:
結果正確!
四、處理給規范的文字
???處理的大多數文字最好都是比較干凈、格式規范的。格式規范的文字通常可以滿足一些需求,通常格式規范的文字具有以下特點:
- 使用一個標準字體(不包含手寫體、草書,或者十分“花哨的”字體)
- 即使被復印或拍照,字體還是很清晰,沒有多余的痕跡或污點
- 排列整齊,沒有歪歪斜斜的字
- 沒有超出圖片范圍,也沒有殘缺不全,或緊緊貼在圖片的邊緣
???文字的一些格式問題在圖片預處理時可以進行解決。例如,可以把圖片轉換成灰度圖,調整亮度和對比度,還可以根據需要進行裁剪和旋轉(詳情需要了解圖像與信號處理)等。
4.1 格式規范文字的理想示例
???識別結果很準確,不過符號^和*分別被表示成了雙引號和單引號。大體上可以讓你很舒服地閱讀。
4.2 通過Python代碼實現
import pytesseract from PIL import Imageimage = Image.open('test.jpg') text = pytesseract.image_to_string(image) print text運行結果:
This is some text, written in Arial, that will be read by Tesseract. Here are some symbols: !@#$%"&*()4.3 對圖片進行閾值過濾和降噪處理(了解即可)
???隨著背景色從左到右不斷加深,文字變得越來越難以識別,Tesseract 識別出的 每一行的最后幾個字符都是錯的。
???遇到這類問題,可以先用 Python 腳本對圖片進行清理。利用 PIL 庫,我們可以創建一個閾值過濾器來去掉漸變的背景色,只把文字留下來,從而讓圖片更加清晰,便于 Tesseract 讀取:
from PIL import Image import subprocessdef cleanFile(filePath, newFilePath):image = Image.open(filePath)# 對圖片進行閾值過濾(低于143的置為黑色,否則為白色)image = image.point(lambda x: 0 if x < 143 else 255)# 重新保存圖片image.save(newFilePath)# 調用系統的tesseract命令對圖片進行OCR識別 subprocess.call(["tesseract", newFilePath, "output"]) #第三個參數是保存后的文件名# 打開文件讀取結果with open("output.txt", 'r') as f:print(f.read())if __name__ == "__main__":cleanFile("text2.png", "text2clean.png")通過一個閾值對前面的“模糊”圖片進行過濾的結果
4.4 從網站圖片中抓取文字
???用 Tesseract 讀取硬盤里圖片上的文字,可能不怎么令人興奮,但當我們把它和網絡爬蟲組合使用時,就能成為一個強大的工具。
???網站上的圖片可能并不是故意把文字做得很花哨,但它們上面的文字對網絡爬蟲來說就是隱藏起來 了,舉個例子:
- 雖然亞馬遜的 robots.txt 文件允許抓取網站的產品頁面,但是圖書的預覽頁通常不讓網絡機 器人采集。
- 圖書的預覽頁是通過用戶觸發 Ajax 腳本進行加載的,預覽圖片隱藏在 div 節點 下面;其實,普通的訪問者會覺得它們看起來更像是一個 Flash 動畫,而不是一個圖片文 件。當然,即使我們能獲得圖片,要把它們讀成文字也沒那么簡單。
- 下面的程序就解決了這個問題:首先導航到托爾斯泰的《戰爭與和平》的大字號印刷版 1, 打開閱讀器,收集圖片的 URL 鏈接,然后下載圖片,識別圖片,最后打印每個圖片的文 字。因為這個程序很復雜,利用了前面幾章的多個程序片段,所以我增加了一些注釋以讓 每段代碼的目的更加清晰:
???和前面使用 Tesseract 讀取的效果一樣,這個程序也會完美地打印書中很多長長的段落,第六頁的預覽如下所示:
Prince Vasily wanted this post for his son, but other people were working through the Empress Maria Fyodorovna to get it for the baron. Anna Pavlovna half-closed her eyes to indicate that neither she nor anyone else could pass judgement on what the Empress might feel like doing or want to do. 'Baron Funke has been recommended to the Dowager Empress by her sister,) was all she said, in a dry, Tugubrious tone. As she pronounced the name of the Empress, Anna Paviovna's face took on an expression of profound and sincere devotion mixed with respect and tinged with sadness, which invariably came upon her when she had occasion to mention her exalted patroness. She said that her Majesty had been gracious enough to show Baron Funke great respect, at which her face once again dissolved into sadness.但是當文字出現在彩色封面上時,結果就不那么完美了:
WEI' nrrd PeaceLen Nlkelayevldu IolfluyReadmg shmdd be axwlnvame asnossxble Wenfleran mm m our cram: Llhvary- Leo Tmsloy was a Russian rwovelwstI and moval phflmopher med lurA ms Ideas 01 nonviolenx reswslance m 5 We range 0, "and"???如果想把文字加工成普通人可以看懂的效果,還需要花很多時間去處理。
???比如,通過給 Tesseract 提供大量已知的文字與圖片映射集,經過訓練 Tesseract 就可以“學會”識別同一種字體,而且可以達到極高的精確率和準確率,甚至可以忽略圖片中文字的背景色和相對位置等問題。
4.5 執行 JavaScript 語句
- 隱藏百度圖片
- 模擬滾動條滾動到底部
★★以上是我的學習筆記,如有不足或錯誤之處還請各位讀者指正,謝謝!
總結
以上是生活随笔為你收集整理的详细解读文字识别工具———Tesseract-OCR的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库中 date 类型 实体类对应可以
- 下一篇: 收银机打印数据截取_每天在掏空你账户余额