我们都知道,部分电子版的书籍是以扫描图片的形式展现的,在阅读过程中无法选取文字。对于平时有记录习惯的人来说,无法复制黏贴真的很不爽! 为了解决这个问题,需要这样一个脚本,他有下面这些功能:

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 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.Positionwin32api.PostQuitMessage()  # 退出监听循环# 截取坐标图片pic = ImageGrab.grab(coordinate)pic.save(file_path)

唯一比较麻烦的就是各种库的安装,重点点名pywin32这个库 = =,真姬儿麻烦~
那么在这里附上链接,防止安装过程中可能出现的问题:
解决安装pywin32后仍然提示找不到模块的问题

文字识别
搞定了截图功能以后,剩下的工作就比较简单了。python的pytesseract为文字识别提供了很好的支持。整个实现只需要一行关键代码即可:

from PIL import Image
import 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 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.Positionwin32api.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()  # 进入循环,程序一直监听

首先,部分电子版的书籍是以扫描图片的形式展现的,在阅读过程中无法选取文字。对于平时有记录习惯的我来说,无法复制黏贴真的很不爽!
为了解决这个问题,我需要这样一个脚本,他有下面这些功能:

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-8
import win32api
import 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-8
import inspectimport win32api
import osfrom PIL import ImageGrab, Imageimport 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 Trueif __name__ == '__main__':
hm = pyHook.HookManager() # 创建一个钩子管理对象
hm.MouseAll = on_mouse_event # 监听所有鼠标事件
hm.HookMouse() # 设定鼠标钩子
pythoncom.PumpMessages() # 进入循环,程序一直监听

python实现简单的图片文字识别脚本相关推荐

  1. (python)实现一个简单的图片文字识别脚本

    文章目录 截图 文字识别## 访问剪切板 总结 快毕业了,除了准备答辩之外,就是看看书,各种瞎晃~ 那么,这两天在看书的时候遇到这么个问题: 首先,部分电子版的书籍是以扫描图片的形式展现的,在阅读过程 ...

  2. 基于Python的离线OCR图片文字识别(一)——命令行方式对图像文件处理生成同名txt文件

    应用背景:在正式开始文章之前,先阐述一下项目的应用背景--项目需要对已有的电子档案数据进行"大数据"处理和呈现,但是由于之前进行档案电子化时都是以扫描文件的图像格式存储在硬盘上(准 ...

  3. python:pytesseract库实现图片文字识别

    import pytesseract from PIL import Imagetext = pytesseract.image_to_string(Image.open(r"E:\repo ...

  4. 基于Python的离线OCR图片文字识别(三)——支持PDF文件

    前面第一个版本实现了基本的ocr功能,可以对某图像文件进行处理,将ocr结果以同名txt文件的方式保存在图像文件同路径下: 然后在第二个版本中又实现了对文件夹参数的支持,也即可以对某个包含大量图像文件 ...

  5. 基于Python的离线OCR图片文字识别(四)——支持txt文件指定路径保存

    虽然在前面在第二次升级时就已经通过json配置文件支持将ocr识别结果txt保存到指定的文件夹里了,但由于指定待识别文件夹时文件夹里面可能包含多个不同的子文件夹.不同的子文件夹里面可能包含同名的图像文 ...

  6. 基于Python的离线OCR图片文字识别(五)——终极版本

    至此,终于迎来了离线ocr的终极大结局,命令行后面参数既支持图像文件.图像文件夹,还支持PDF图像类型的文件,既支持通过json文件进行参数配置,又支持帮助文档,easyOCR包既支持允许字符集(也即 ...

  7. 用Python进行简单的图片数字识别(1)

    一.源代码 from PIL import Image im = Image.open("F:/result/4.jpg") # 先将图片转为固定宽高如55*55以符合一行txt文 ...

  8. 图片文字识别(一):tesseract-ocr-4.00的安装与初步进行图片文字识别

    简介: tesseract-ocr可以对图像文字进行识别,为图文转换的工作时省去了大量时间.我们还可以通过不断的训练字库,使图像转换文本的能力不断增强,也可以调试模型使图像文字进行程序的识别率更高, ...

  9. python学习----网页图片文字识别(简单)

    在接触python后想对图片进行一些处理  python实现的代码很简单 但是关键在于一些包的导入 我使用的python 软件是 pycharm  可以在setting中去下载requests这个包 ...

最新文章

  1. 论工程结构设计的重要性
  2. 将图片的每个像素进行分类
  3. 文件服务器 工作站 通信媒体,【2013年自考“网络操作系统”复习资料(22)】- 环球网校...
  4. mdAAPP:安装后会一直存在手机中,安装数据及缓存都会占用大量内存,而且各家全家桶APP之间都有一些藕断丝连的唤醒关系。 小程序:不需要安装在手机上,微信有严格的小程序内存管理机制,和微信共用内存使
  5. 好看的php验证码,一漂亮的PHP图片验证码实例
  6. 我们为什么要搞长沙.NET技术社区?
  7. 传统的6d位姿估计fangfa1_李飞飞团队最新论文:基于anchor关键点的类别级物体6D位姿跟踪...
  8. 最近准备认真读三本书
  9. Express框架的安装通信测试 - 讲解篇
  10. 使用cppcheck检测代码警告、错误
  11. webstrom命名改名 命令
  12. Prometheus 监控服务端口、网站状态等(黑盒监测)
  13. ajax传图片的方法
  14. android studio发包,androidstudio使用gradle打包配置详解.pdf
  15. 微信和QQ,终于可以互通了!
  16. 程序员自我介绍如何出彩?面试「万能模板」快拿走!
  17. Word文档单页页眉横线如何去除
  18. Android内存优化:Reckon(二)
  19. 错过等一年丨2022全球边缘计算大会深圳站参会指南来啦!
  20. win7打开网络无计算机,Win7电脑系统IPV6无网络访问权限解决方法

热门文章

  1. 计算机没有安装显卡驱动能显示桌面吗,电脑安装了显卡驱动后显示不了怎么处理...
  2. 如何在macOS中创建访客帐户
  3. iPhone微信网页数字识别成了电话
  4. 项目经理面试时常见的18个问题及回答技巧
  5. 【产品经理三节课】第1章 产品经理的学习与成长
  6. 利用和讯博客赚钱步骤详解
  7. (一)软件开发流程与图
  8. 软件测试基础知识回顾复习
  9. TC---教学知识与能力
  10. jsp 按照学号查找学生_jsp+mysql添加查询代码,并把查询结果返回当前页面,可以按学号,姓名或成绩查询...