我们都知道,部分电子版的书籍是以扫描图片的形式展现的,在阅读过程中无法选取文字。对于平时有记录习惯的人来说,无法复制黏贴真的很不爽! 为了解决这个问题,需要这样一个脚本,他有下面这些功能:
1、能够实现自由截图
2、能够识别含有文字的截图
3、将识别出的文字输出到剪切板
大致上需要的东西非常明确,那么,一个一个的来~
截图作为一项非常实用的功能,自然是有各种各样的实现,在这里考虑使用python去完成这个任务,那么自然是先google一下,网上一搜,果然资料多到爆炸~
不出所料,python对截图功能做了很好的基础支持~(本文基于windows平台下的python2实现,python3安装某些库真滴烦人)
(1)全屏截图
那么先从简单的做起(截图稍微麻烦一点,其他部分都超级简单 = =),首先实现python的“全屏截图”
代码入下:
from PIL import ImageGrab im = ImageGrab.grab() # 截取全屏 im.save(file)
简单的三行代码搞定~(赞美一下前人的伟大_(:з)∠)_)
其中的path表示文件截图文件的完整存放路径
其中稍微要注意一下的是,安装库的时候,使用
pip install pillow(而不是PIL)
否则会显示找不到匹配的模块~
(PS:这里其实有个问题,上述代码运行完成后,并没有截取全屏,最后生成的图片仅仅为部分图片,查看网上攻略后并没有找到比较好的解决方法,残念…)
(2)自由截图
好了,全屏截图完成,那么我们其实只想要截取需要的部分就行了,那么怎么去完成这个功能呢~
看了一部分网上的做法,最常见的就是监听鼠标动作实现选择截图区域。其中,其中使用较多的是tkinter,以及pyHook(tkinter实现那个稍微复杂一点),我个人倾向于后者,因为实现起来非常简单,哈哈~
那么先上部分代码
# coding:utf-8 import win32api import os from PIL import ImageGrab, Imageimport pyHook import 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 Image import pytesseract text=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-8 import inspect import win32api import os from PIL import ImageGrab, Image import pyHook # 钩子~ import pythoncom import pytesseract # 图像识别文字包 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 ImageGrab im = 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 pytesseract text=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 # 图像识别文字包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() # 进入循环,程序一直监听
The above is the detailed content of Python implements a simple picture text recognition script. For more information, please follow other related articles on the PHP Chinese website!