最近,快要期末考試了,平時沒有好好學習,在網上搜索了大量的考試複習資料。無奈,大多是收費版本的,對於學生黨來說,隨便下載一篇內容,無疑要花掉我們好幾頓飯的money。有沒有好的辦法呢?今天帶領大家使用Python製作一個簡易的OCR圖片文字識別工具,來解決這類問題。
【我們需要知道的幾個知識點】
OCR:中文叫光學字符識別,英文全稱是Optical Character Recognition,說白了就是從電子設備中顯示的圖片上面查找我們需要的字符,通過檢測、識別將字符翻譯成計算機文字的過程。截屏鍵:我們每個人的計算機鍵盤上面是不是有一個PrtSc,可能有的鍵盤顯示不一樣,但我的鍵盤上是這樣,其它鍵盤肯定也有,除非……呃,可能不是地球上的鍵盤,再者就是有的小鍵盤可能沒有這個鍵,但是恕我孤陋寡聞,我沒見過這種鍵盤。mspaint:我們使用windows系統時,按住『win』+ 『R』鍵(什麼?你找不到這個鍵?自行百度吧,兄嘚),會彈出一個對話框,在對話框中輸入mspaint會打開系統提供給我們的一個簡易的繪圖工具,通過這個工具可以實現對圖像的簡單處理。比如截圖,保存圖片等等操作。【思 路】
打個比方,如果你在電腦上看到了一篇很不錯的文章,使用截屏鍵(PrtSc)先把它截取下來,如果你剛好是個懶人,不想一個字一個字的去敲這些內容,而你又很想編輯這些內容。這時候,你可以打開mspaint(什麼?你找不到?那你可能使用的是別的作業系統,linux、mac、unix……我猜你是個高手,那請略過此文)。然後新建一個圖片文件,然後Ctrl+V粘貼屏幕截圖,裁剪你需要的文字,保存在一副圖片裡面。再使用我們的工具(下文烹飪),你就可以輕輕鬆鬆的獲取圖片中的文字了……
上面只是教大家一個方法,我們此文討論的重點是如何實現這個工具。本文涉及的知識點有:百度AI提供的API接口的使用、百度AI帳號的註冊以及baidu-aip庫的安裝。請大家自行上網學習。類似教材網上有好多。我們今天主要是結合這些內容做一個實例供大家使用。
【Python程序實現OCR】
我們要實現這個功能,我總結了一下,現今主要有兩種方式,各有優劣,一種是使用Tesseract-OCR庫,這種方式實現較為複雜,需要配置一些環境變量和參數,對於小白來說可能有點難度;另一種是使用百度API接口,這種方式較為直接,只要申請一個百度帳號即可免費使用,對於申請方式大家自行網絡學習,本文不做進一步探討。開始前我們需要具備下面一些條件:
百度AI中創建一個免費的圖像識別應用後,系統給你生成的AppID、API Key、Secret Key,這三個內容我們程序中需要使用的。
安裝baidu-aip模塊。當然是使用pip install baidu-aip進行安裝了。
有了這兩個先決條件,我們打開神器PyCharm,開始敲代碼吧。
然後,我們測試下這個方法,看看是否能返回正確的文字,我們以一副李白的《將進酒》圖片輸入,看下是否能返回裡面的文字。如片如下:
我們在PyCharm中測試看下效果。如下圖所示。
【把它封裝成一個工具】
好了,我們的主要功能已經實現。現在,我們把這個方法封裝到類中,製作一個類似OCR的工具,創建一個圖形界面類。主要代碼如下所示。
首先,導入我們需要的模塊
from aip import AipOcrfrom tkinter import *from tkinter.messagebox import askyesnofrom tkinter.simpledialog import messageboxfrom tkinter.filedialog import askopenfilename, asksaveasfilenamefrom tkinter.scrolledtext import ScrolledText
然後自定義一個App類,下面是類的變量初始化代碼。
程序比較簡單,這裡就不一一解釋了,有問題的朋友們歡迎留言討論。
最重要的一步,我們對按鈕的點擊事件進行響應。
首先是打開圖片按鈕的響應事件函數,我們看下具體代碼,如下圖所示。
然後我們點擊另一個按鈕就會將獲取到的文本內容進行保存,當然,我們可以對識別的錯誤進行修正後保存哦……保存按鈕響應事件如下圖所示。
我們看下界面顯示效果吧!如下圖所示。
程序成功執行。怎麼樣,是不是很酷?需要強調的是,調用百度API需要聯網哦!並且,好像免費的圖像識別功能每天只能調用500次,所以我的AppID沒有給大家分享。對這個課題感興趣的話歡迎大家留言討論。
轉載請註明出處(百家號:Python高手養成)