前言:因項目所需,要對圖檔進行基本的文字識别,聯想到手機qq有圖檔自動提取文字功能,覺得肯定有可以調用的外部api。查了一下,比較常用的python實作圖檔轉文字的庫是pytesseract(第一反應聯想到漫威中的宇宙魔方Tesseract哈哈哈哈)
摘要:主要利用Python的第三方庫pytesseract,實作圖檔轉文字。但轉換效率一般,且有一定的錯誤,并帶有許多空行。可适用于擷取圖檔中的文字,但閱讀性不佳。
實驗環境:
win10+pycharm2018.1+python3.6
所需庫:
Pillow 4.3.0
pytesseract 0.2.0
安裝都很簡單,在cmd指令行裡直接pip3 install xxxxx就行。
敲黑闆,安裝完庫還不行,還要安裝tesseract的軟體,這樣系統才能識别引擎成功讀取文字。
可從github下載下傳tesseract-ocr-setup-4.00.00dev
https://github.com/tesseract-ocr/tesseract/wiki/4.0-with-LSTM#400-alpha-for-windows
安裝的時候要注意,tesseract的安裝并不預設安裝什麼語言,如果自己需要簡體中文的語言包,那麼就不能一直點next點到finish。如下圖,我安裝了MATH和簡體中文包。
好了進行完上述預備階段的任務,代碼就很簡單了。
import pytesseract
from PIL import Image
import datetime
def main():
for i in range(1,2):
starttime = datetime.datetime.now()
image = Image.open(r"C:\Users\夾心\Desktop\計算機網絡_"+str(i)+".png")
text = pytesseract.image_to_string(image, ) # 使用簡體中文解析圖檔
endtime = datetime.datetime.now()
print (r"計算機網絡_"+str(i)+r"轉換完成,耗時:" + str((endtime - starttime).seconds))
text=text.replace(" ","")
with open(r"C:\Users\夾心\Desktop\計算機網絡_"+str(i)+".txt", "a") as f: # 将識别出來的文字存到本地
# print(text)
f.write(str(text))
main()
幾點注意:
1.轉換的速度相對較慢,不是很樂觀。如圖這樣一張字比較密集的圖檔,轉換用時約14s。程式中的datatime庫就是為了計算轉換用時而設定的。速度的慢展現在批量轉換上,并未找到很合适的優化方法。
2.轉化的正确率并非100%。盡管對于圖中這樣的标準系統字型,轉換成功率仍難以達到100%,如單點傳播會被轉換成單擎等。
3.轉化後的txt有許多空行,非常影響閱讀體驗,可以自己設計代碼改善一下。因為我要做的是分詞,是以空行沒有什麼妨礙,是以我沒有進行處理。
以上就是python實作圖檔轉文字的講解。