python實現簡單的圖片文字識別指令碼

來源:互聯網
上載者:User

我們都知道,部分電子版的書籍是以掃描圖片的形式展現的,在閱讀過程中無法選取文字。對於平時有記錄習慣的人來說,無法複製黏貼真的很不爽! 為瞭解決這個問題,需要這樣一個指令碼,他有下面這些功能:

1、能夠實現自由
2、能夠識別含有文字的
3、將識別出的文字輸出到剪下板

大致上需要的東西非常明確,那麼,一個一個的來~

作為一項非常實用的功能,自然是有各種各樣的實現,在這裡考慮使用python去完成這個任務,那麼自然是先google一下,網上一搜,果然資料多到爆炸~
不出所料,python對功能做了很好的基礎支援~(本文基於windows平台下的python2實現,python3安裝某些庫真滴煩人)
(1)全屏
那麼先從簡單的做起(稍微麻煩一點,其他部分都超級簡單 = =),首先實現python的“全屏”
代碼入下:

from PIL import ImageGrabim = ImageGrab.grab()  # 截取全屏im.save(file)

簡單的三行代碼搞定~(讚美一下前人的偉大_(:з)∠)_)
其中的path表示檔案檔案的完整存放路徑
其中稍微要注意一下的是,安裝庫的時候,使用

pip install pillow(而不是PIL)

否則會顯示找不到匹配的模組~
(PS:這裡其實有個問題,上述代碼運行完成後,並沒有截取全屏,最後產生的圖片僅僅為部分圖片,查看網上攻略後並沒有找到比較好的解決方案,殘念…)

(2)自由
好了,全屏完成,那麼我們其實只想要截取需要的部分就行了,那麼怎麼去完成這個功能呢~
看了一部分網上的做法,最常見的就是監聽滑鼠動作實現選擇地區。其中,其中使用較多的是tkinter,以及pyHook(tkinter實現那個稍微複雜一點),我個人傾向於後者,因為實現起來非常簡單,哈哈~
那麼先上部分代碼

# coding:utf-8import win32apiimport osfrom PIL import ImageGrab, Imageimport pyHookimport pythoncom# 建立一個座標列表(x1,y1,x2,y2)coordinate = [1, 1, 1, 1]# 監聽鍵盤事件def on_mouse_event(event):    file_path = 'xx//xx//read.jpg'    # 監聽滑鼠事件    if event.MessageName == 'mouse left down':        coordinate[0:2] = event.Position        elif event.MessageName == 'mouse left up':        coordinate[2:4] = event.Position        win32api.PostQuitMessage()  # 退出監聽迴圈        # 截取座標圖片        pic = ImageGrab.grab(coordinate)        pic.save(file_path)

唯一比較麻煩的就是各種庫的安裝,重點點名pywin32這個庫 = =,真姬兒麻煩~
那麼在這裡附上連結,防止安裝過程中可能出現的問題:
解決安裝pywin32後仍然提示找不到模組的問題

文字識別

搞定了功能以後,剩下的工作就比較簡單了。python的pytesseract為文字識別提供了很好的支援。整個實現只需要一行關鍵代碼即可:

from PIL import Imageimport pytesseracttext=pytesseract.image_to_string(Image.open(file_path),lang='chi_sim')print(text)

使用這個庫之前,必須安裝識別引擎tesseract-ocr,下載連結如下(下載完成後為exe安裝包):
tesseract-ocr識別引擎下載
這裡附上安裝及配置環境變數的教程(摘自百度百科):
圖片文字OCR識別-tesseract-ocr4.00.00安裝使用
最後,在pytesseract庫檔案中進行配置,找到F:\XX\XX\XX\你的python安裝路徑\Lib\site-packages\pytesseract
找到該路徑下的pytesseract.py檔案,開啟後找到一下這句代碼:

tesseract_cmd = 'tesseract'

將字串’tesseract’替換成你的tesseract-ocr的安裝路徑(e.g.’F:\Program_File\Tesseract-OCR\tesseract.exe’)

至此,文字識別引擎的全部配置就已經完成了。

訪問剪下板

最後,將識別好的文字匯入剪下板
兩步到位:
(1)pip安裝pyperclip庫
(2)同樣一行代碼:

pyperclip.copy(text)  # 將識別內容匯入系統剪下板

大功告成~

總結

整個代碼實現非常的簡潔,總共也就幾十行不到的代碼,這也多虧了python強大的庫支援。
然而比較遺憾的是,功能的實現很是簡陋,使用tkinter可以實現出類似QQ的效果(代碼也相對複雜一些)~
有了這個指令碼之後,看掃描圖片的PDF電子書就不需要打字記筆記了~吼吼吼~:)
最後附上完整的代碼

# coding:utf-8import inspectimport win32apiimport osfrom PIL import ImageGrab, Imageimport pyHook  # 鉤子~import pythoncomimport pytesseract  # Image Recognition文字包import pyperclip# 建立一個座標列表coordinate = [1, 1, 1, 1]# 監聽鍵盤事件def on_mouse_event(event):    # 擷取當前檔案路徑    file_ = inspect.getfile(inspect.currentframe())    dir_path = os.path.abspath(os.path.dirname(file_))    file_path = dir_path + '\\read.jpg'    # 監聽滑鼠事件    if event.MessageName == 'mouse left down':        coordinate[0:2] = event.Position        elif event.MessageName == 'mouse left up':        coordinate[2:4] = event.Position        win32api.PostQuitMessage()  # 退出監聽迴圈        # 截取座標圖片        pic = ImageGrab.grab(coordinate)        pic.save(file_path)        text = pytesseract.image_to_string(Image.open(file_path), lang='chi_sim')  # 識別並返回        pyperclip.copy(text.replace(' ', ''))  # 將識別內容匯入系統剪下板   return True          if __name__ == '__main__':    hm = pyHook.HookManager()  # 建立一個鉤子管理對象    hm.MouseAll = on_mouse_event  # 監聽所有滑鼠事件    hm.HookMouse()  # 設定滑鼠鉤子    pythoncom.PumpMessages()  # 進入迴圈,程式一直監聽

快畢業了,除了準備答辯之外,就是看看書,各種瞎晃~
那麼,這兩天在看書的時候遇到這麼個問題:
首先,部分電子版的書籍是以掃描圖片的形式展現的,在閱讀過程中無法選取文字。對於平時有記錄習慣的我來說,無法複製黏貼真的很不爽!
為瞭解決這個問題,我需要這樣一個指令碼,他有下面這些功能:

1、能夠實現自由
2、能夠識別含有文字的
3、將識別出的文字輸出到剪下板

大致上需要的東西非常明確,那麼,一個一個的來~

作為一項非常實用的功能,自然是有各種各樣的實現,在這裡考慮使用python去完成這個任務,那麼自然是先google一下,網上一搜,果然資料多到爆炸~
不出所料,python對功能做了很好的基礎支援~(本文基於windows平台下的python2實現,python3安裝某些庫真滴煩人)
(1)全屏
那麼先從簡單的做起(稍微麻煩一點,其他部分都超級簡單 = =),首先實現python的“全屏”
代碼入下:

from PIL import ImageGrabim = ImageGrab.grab()  # 截取全屏im.save(file)

簡單的三行代碼搞定~(讚美一下前人的偉大_(:з)∠)_)
其中的path表示檔案檔案的完整存放路徑
其中稍微要注意一下的是,安裝庫的時候,使用

pip install pillow(而不是PIL)

否則會顯示找不到匹配的模組~
(PS:這裡其實有個問題,上述代碼運行完成後,並沒有截取全屏,最後產生的圖片僅僅為部分圖片,查看網上攻略後並沒有找到比較好的解決方案,殘念…)

(2)自由
好了,全屏完成,那麼我們其實只想要截取需要的部分就行了,那麼怎麼去完成這個功能呢~
看了一部分網上的做法,最常見的就是監聽滑鼠動作實現選擇地區。其中,其中使用較多的是tkinter,以及pyHook(tkinter實現那個稍微複雜一點),我個人傾向於後者,因為實現起來非常簡單,哈哈~
那麼先上部分代碼

# coding:utf-8import win32apiimport osfrom PIL import ImageGrab, Imageimport pyHookimport pythoncom# 建立一個座標列表(x1,y1,x2,y2)coordinate = [1, 1, 1, 1]# 監聽鍵盤事件def on_mouse_event(event):    file_path = 'xx//xx//read.jpg'    # 監聽滑鼠事件    if event.MessageName == 'mouse left down':        coordinate[0:2] = event.Position    elif event.MessageName == 'mouse left up':        coordinate[2:4] = event.Position        win32api.PostQuitMessage()  # 退出監聽迴圈        # 截取座標圖片        pic = ImageGrab.grab(coordinate)        pic.save(file_path)

唯一比較麻煩的就是各種庫的安裝,重點點名pywin32這個庫 = =,真姬兒麻煩~
那麼在這裡附上連結,防止安裝過程中可能出現的問題:
解決安裝pywin32後仍然提示找不到模組的問題

文字識別

搞定了功能以後,剩下的工作就比較簡單了。python的pytesseract為文字識別提供了很好的支援。整個實現只需要一行關鍵代碼即可:

from PIL import Imageimport pytesseracttext=pytesseract.image_to_string(Image.open(file_path),lang='chi_sim')print(text)

使用這個庫之前,必須安裝識別引擎tesseract-ocr,下載連結如下(下載完成後為exe安裝包):
tesseract-ocr識別引擎下載
這裡附上安裝及配置環境變數的教程(摘自百度百科):
圖片文字OCR識別-tesseract-ocr4.00.00安裝使用
最後,在pytesseract庫檔案中進行配置,找到F:\XX\XX\XX\你的python安裝路徑\Lib\site-packages\pytesseract
找到該路徑下的pytesseract.py檔案,開啟後找到一下這句代碼:

tesseract_cmd = 'tesseract'

將字串’tesseract’替換成你的tesseract-ocr的安裝路徑(e.g.’F:\Program_File\Tesseract-OCR\tesseract.exe’)

至此,文字識別引擎的全部配置就已經完成了。

訪問剪下板

最後,將識別好的文字匯入剪下板
兩步到位:
(1)pip安裝pyperclip庫
(2)同樣一行代碼:

pyperclip.copy(text)  # 將識別內容匯入系統剪下板

大功告成~

總結

整個代碼實現非常的簡潔,總共也就幾十行不到的代碼,這也多虧了python強大的庫支援。
然而比較遺憾的是,功能的實現很是簡陋,使用tkinter可以實現出類似QQ的效果(代碼也相對複雜一些)~
有了這個指令碼之後,看掃描圖片的PDF電子書就不需要打字記筆記了~吼吼吼~:)
最後附上完整的代碼

# coding:utf-8import inspectimport win32apiimport osfrom PIL import ImageGrab, Imageimport pyHook  # 鉤子~import pythoncomimport pytesseract  # Image Recognition文字包import pyperclip# 建立一個座標列表coordinate = [1, 1, 1, 1]# 監聽鍵盤事件def on_mouse_event(event):    # 擷取當前檔案路徑    file_ = inspect.getfile(inspect.currentframe())    dir_path = os.path.abspath(os.path.dirname(file_))    file_path = dir_path + '\\read.jpg'    # 監聽滑鼠事件    if event.MessageName == 'mouse left down':        coordinate[0:2] = event.Position    elif event.MessageName == 'mouse left up':        coordinate[2:4] = event.Position        win32api.PostQuitMessage()  # 退出監聽迴圈        # 截取座標圖片        pic = ImageGrab.grab(coordinate)        pic.save(file_path)        text = pytesseract.image_to_string(Image.open(file_path), lang='chi_sim')  # 識別並返回        pyperclip.copy(text.replace(' ', ''))  # 將識別內容匯入系統剪下板    return Trueif __name__ == '__main__':    hm = pyHook.HookManager()  # 建立一個鉤子管理對象    hm.MouseAll = on_mouse_event  # 監聽所有滑鼠事件    hm.HookMouse()  # 設定滑鼠鉤子    pythoncom.PumpMessages()  # 進入迴圈,程式一直監聽
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.