简易OCR图片文字识别工具的进一步改进(增加显示图片的功能)
上一篇文章中我们带领大家制作了一个简易的OCR图片文字识别工具,但是,程序还有一些需要我们进一步完善的地方。比如,我们在识别文字后,如果想对照原始图片对处理的文字进行修正操作,我们还要打开图片,然后在图片浏览器和我们的程序之间切换,以便完成我们的需求。有没有更好的办法呢?当然有咯,在程序中增加一个显示图片的功能。这样,我们在进行修正文字错误时,可以对照图片进行检查。怎么样?是不是很酷?现在我们来实现一下这个功能吧……
增加图片显示功能会更方便哦
【分析】
需要增加的是显示图片的功能,我们需要做下面的前期准备工作。
前期准备很重要哦
我们知道,Python的tkinter控件中有很多控件是可以用于显示图片的,只要是控件有image属性的,基本上都可以用于实现这一功能。比如,Label、Button等控件,程序中我们使用Label控件进行显示。再者,如果在Label控件中显示图片,我们一般是将图片转化为PhotoImage类,但是tkinter默认的PhotoImage类只能打开诸如gif、png一类的图片,打开其它类型的图片一般会抛出异常。我们知道,网上下载的图片一般jpg、gif、png等等各种类型,因此,我们需要第三方库支持。程序中我们使用PIL模块中的Image和ImageTk类来创建图像类,这两个类基本可以处理常见的图像类型了。最后,我们需要知道,每一个可以布局的控件都有一个pack_forget()方法,用于暂时不显示该控件。但是这个控件一旦创建还是存在于内存中的。如果需要,我们就使用pack()方法对控件进行显示。知道了这三点内容,我们就可以实现程序了。在此之前,需要安装第三方库PIL,使用pip install pillow进行安装即可。【程序实现】
废话不多说,我们直接开始编码吧,对于重复的代码,本篇不再展示,主要记录一下跟上一篇《使用Python制作一个简易的OCR图片文字识别工具》不同的新增加的代码。
首先导入模块: from PIL import Image, ImageTk
我们在类变量的初始化代码中增加下面标注的几行内容,如图所示。
变量初始化新增代码
上面图片中的英文翻译过来是这样的:执行此操作时,请确保保留对图像对象的引用,以防止被Python的内存分配器垃圾收集。由此我们知道部分Image控件不显示图片的内容,但也不报错的原因是图像对象被内存分配器进行了垃圾回收,因为刚开始如果没有在全局域中对该对象进行声明,如果对象存在于函数或者自定义类中,引用次数为0的对象一般会被内存分配器进行回收,导致图片不显示。
然后,我们在创建具体控件,具体代码如下图所示。
增加按钮控制图片显示
我们看一下对于新增加的按钮的响应事件函数。
显示隐藏图片按钮响应函数
我们看到,在图片显示事件中我们使用了一个函数self.resize(400, 300, self.image),下面我们看下这个定义函数内容。如下图所示。
设置图片大小随控件展示
好了,编码到此为止。下面我们看看程序实现效果。
【效果展示】
程序打开,显示图片按钮不可用(state=DISABLED)。如下图所示。
程序打开效果
然后我们从本地选择一幅图片,还是之前李白的《将进酒》吧。打开看下效果。如下图所示。
图片内容成功获取并展示
然后我们看下新增的显示图片的功能。关闭提示信息后,打开文件按钮文字相应发生变化,且显示图片按钮变为可用。效果如图所示。
关闭提示信息后显示图片
单击隐藏图片后,图片即可隐藏。如下图所示。
隐藏图片效果成功实现
换个背景看看。
程序执行最终效果
【总结】
今天带大家完成了应用中显示、隐藏图片功能,可以方便我们使用图片和文本框的文本进行修正。我们知道,任何一款好的图像识别算法,不可能做到图像识别正确率100%,这时,我们这个功能的实现就方便了用户更好的进行修正文本。但是,作为Python程序设计,这一块还是存在一些可以改进的地方,如果图片内容太小,或者图片分辨率不够高,我们在原始比例下对图片的文字信息可能看得不是很清楚,这就需要我们对这一程序进行进一步改进,让图像可以缩放,这样是不是就更方便了?后续我们会实现这一功能。感兴趣的读者请持续关注,后续会有精彩内容哦,欢迎大家留言讨论。
转载请注明出处(百家号:Python高手养成)