最近,快要期末考试了,平时没有好好学习,在网上搜索了大量的考试复习资料。无奈,大多是收费版本的,对于学生党来说,随便下载一篇内容,无疑要花掉我们好几顿饭的money。有没有好的办法呢?今天带领大家使用Python制作一个简易的OCR图片文字识别工具,来解决这类问题。
Python制作一个OCR工具
【我们需要知道的几个知识点】
OCR:中文叫光学字符识别,英文全称是Optical Character Recognition,说白了就是从电子设备中显示的图片上面查找我们需要的字符,通过检测、识别将字符翻译成计算机文字的过程。截屏键:我们每个人的计算机键盘上面是不是有一个PrtSc,可能有的键盘显示不一样,但我的键盘上是这样,其它键盘肯定也有,除非……呃,可能不是地球上的键盘,再者就是有的小键盘可能没有这个键,但是恕我孤陋寡闻,我没见过这种键盘。mspaint:我们使用windows系统时,按住‘win’+ ‘R’键(什么?你找不到这个键?自行百度吧,兄嘚),会弹出一个对话框,在对话框中输入mspaint会打开系统提供给我们的一个简易的绘图工具,通过这个工具可以实现对图像的简单处理。比如截图,保存图片等等操作。【思 路】
打个比方,如果你在电脑上看到了一篇很不错的文章,使用截屏键(PrtSc)先把它截取下来,如果你刚好是个懒人,不想一个字一个字的去敲这些内容,而你又很想编辑这些内容。这时候,你可以打开mspaint(什么?你找不到?那你可能使用的是别的操作系统,linux、mac、unix……我猜你是个高手,那请略过此文)。然后新建一个图片文件,然后Ctrl+V粘贴屏幕截图,裁剪你需要的文字,保存在一副图片里面。再使用我们的工具(下文烹饪),你就可以轻轻松松的获取图片中的文字了……
上面只是教大家一个方法,我们此文讨论的重点是如何实现这个工具。本文涉及的知识点有:百度AI提供的API接口的使用、百度AI账号的注册以及baidu-aip库的安装。请大家自行上网学习。类似教材网上有好多。我们今天主要是结合这些内容做一个实例供大家使用。
【Python程序实现OCR】
我们要实现这个功能,我总结了一下,现今主要有两种方式,各有优劣,一种是使用Tesseract-OCR库,这种方式实现较为复杂,需要配置一些环境变量和参数,对于小白来说可能有点难度;另一种是使用百度API接口,这种方式较为直接,只要申请一个百度账号即可免费使用,对于申请方式大家自行网络学习,本文不做进一步探讨。开始前我们需要具备下面一些条件:
百度AI中创建一个免费的图像识别应用后,系统给你生成的AppID、API Key、Secret Key,这三个内容我们程序中需要使用的。
安装baidu-aip模块。当然是使用pip install baidu-aip进行安装了。
有了这两个先决条件,我们打开神器PyCharm,开始敲代码吧。
Python实现OCR功能
然后,我们测试下这个方法,看看是否能返回正确的文字,我们以一副李白的《将进酒》图片输入,看下是否能返回里面的文字。如片如下:
李白的《将进酒》图片
我们在PyCharm中测试看下效果。如下图所示。
图片文字提取成功
【把它封装成一个工具】
好了,我们的主要功能已经实现。现在,我们把这个方法封装到类中,制作一个类似OCR的工具,创建一个图形界面类。主要代码如下所示。
首先,导入我们需要的模块
from aip import AipOcrfrom tkinter import *from tkinter.messagebox import askyesnofrom tkinter.simpledialog import messageboxfrom tkinter.filedialog import askopenfilename, asksaveasfilenamefrom tkinter.scrolledtext import ScrolledText
然后自定义一个App类,下面是类的变量初始化代码。
类的初始化和界面的创建
程序比较简单,这里就不一一解释了,有问题的朋友们欢迎留言讨论。
最重要的一步,我们对按钮的点击事件进行响应。
首先是打开图片按钮的响应事件函数,我们看下具体代码,如下图所示。
打开图片文件按钮响应事件函数
然后我们点击另一个按钮就会将获取到的文本内容进行保存,当然,我们可以对识别的错误进行修正后保存哦……保存按钮响应事件如下图所示。
保存文本文件按钮响应事件函数
我们看下界面显示效果吧!如下图所示。
程序执行效果演示
程序成功执行。怎么样,是不是很酷?需要强调的是,调用百度API需要联网哦!并且,好像免费的图像识别功能每天只能调用500次,所以我的AppID没有给大家分享。对这个课题感兴趣的话欢迎大家留言讨论。
转载请注明出处(百家号:Python高手养成)