天天看點

Python3.6實作圖檔轉文字

前言:因項目所需,要對圖檔進行基本的文字識别,聯想到手機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

Python3.6實作圖檔轉文字

安裝的時候要注意,tesseract的安裝并不預設安裝什麼語言,如果自己需要簡體中文的語言包,那麼就不能一直點next點到finish。如下圖,我安裝了MATH和簡體中文包。

Python3.6實作圖檔轉文字
Python3.6實作圖檔轉文字

好了進行完上述預備階段的任務,代碼就很簡單了。

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庫就是為了計算轉換用時而設定的。速度的慢展現在批量轉換上,并未找到很合适的優化方法。

Python3.6實作圖檔轉文字

2.轉化的正确率并非100%。盡管對于圖中這樣的标準系統字型,轉換成功率仍難以達到100%,如單點傳播會被轉換成單擎等。

3.轉化後的txt有許多空行,非常影響閱讀體驗,可以自己設計代碼改善一下。因為我要做的是分詞,是以空行沒有什麼妨礙,是以我沒有進行處理。

Python3.6實作圖檔轉文字

以上就是python實作圖檔轉文字的講解。