使用CV2和Keras OCR从图像中删除文本-600学习网

600学习网终身会员188,所有资源无秘无压缩-购买会员

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

介绍

本文将讨论如何从图像中快速删除文本作为图像分类器的预处理步骤。

删除文本可能有很多或更多的原因。例如,我们可以使用无文本图像进行数据增强。

在本教程中,我们将使用OCR(光学字符识别)检测图像中的文本,并在修复过程中填充照片的缺失部分,以生成完整的图像-删除我们检测到的文本。

手柄

要从图像中删除文本,我们将执行以下三个步骤:

1.识别图像中的文本,并使用KerasOCR获取每个文本的边界框坐标。

2.对于每个边界框,应用一个遮罩来告诉算法我们应该修复图像的哪个部分。

3.最后,应用修复算法对图像的掩模区域进行修复,以获得无文本图像。

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

实现

Keras ocr简介

KerasOCR提供现成的ocr模型和端到端培训渠道,以构建新的ocr模式

在这种情况下,我们将使用预先训练的模型,这对我们的任务非常有效。

KerasOCR将自动下载检测器和识别器的预训练权重。

当图像通过Keras orc传输时,它将返回一个元组(单词,框),其中框包含四个角的坐标(x,y)。

下面是一个简单的例子:

将matplotlib.pyplot导入为plt

进口keras_ocr

pipeline=keras_ocr.pipeline。pipeline()

#从图像路径(jpg/png文件或图像url)读取图像

img=keras_ocr.tools.read(图像_路径)

#预测_组是(单词,方框)元组的列表

预测_组=管道识别(〔img〕)

#打印带有注释和方框的图像

keras_ocr.tools.drawAnnotations(图像=img,预测=预测_组[0])

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

如果我们查看prediction_groups,我们将看到每个元素对应于一组坐标。

例如,prediction_groups[0][10]如下所示:

(“星期二”

数组(〔986.2778,625.07764〕

[1192.3856 , 622.7086 ],

[1192.8888 , 666.4836 ],

〔986.78094,668.8526〕〕,dtype=float32))

数组的第一个元素对应左上角的坐标,第二个元素对应右下角,第三个元素是右上角,第四个元素是左下角。

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

Cv2修复功能

使用OpenCV应用修复算法时,需要提供两个图像:

1.输入包含要删除的文本的图像。

2.屏蔽图像,显示图像中要删除的文本的位置。第二个图像的大小应与输入的大小相同。

Cv2有两种修复算法,允许应用矩形.圆形或线条掩码

在这种情况下,我决定使用行掩码,因为它们在覆盖不同方向的文本时更灵活(矩形掩码仅适用于与x轴平行或垂直的单词,而圆形掩码将覆盖更大的区域)。

为了应用遮罩,我们需要提供线条的起点和终点坐标以及线条的粗细:

起点将是方框左上角和左下角之间的中点,终点将是方框右上角和右下角的中点。

对于厚度,我们将计算左上角和左下角之间的线条长度。

导入数学

将numpy导入为np

定义中点(x1,y1,x2,y2):

x_mid=int((x1+x2)/2)

y_mid=int((y1+y2)/2)

返回(x_mid,y_mid)

#单词”星期二”的行掩码示例

框=预测_组[0][10]

x0,y0=框[1][0]

x1,y1=框[1][1]

x2,y2=框[1][2]

x3,y3=框[1][3]

x_mid0,y_mid0=中点(x1,y1,x2,y2)

x_mid1,y_mi1=中点(x0,y0,x3,y3)

厚度=int(math.sqrt((x2-x1)**2+(y2-y1)*2))

现在我们可以创建掩码:

掩码=np.零(img.shape〔:2〕,dtype=”uint8″)

cv2.line(掩码,(x_mid0,y_mid1),(x_2mid1,y_mi1),255,厚度)

我们还可以检查遮罩区域以确保其正常工作。

掩码=cv2.bitwise_和(img,img,mask=掩码)

plt.imshow(屏蔽)

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

最后,我们可以修复图像。

在这种情况下,我们将使用cv2.INPAINT_NS,它是指文章”Navier-Stokes,流体动力学,图像和视频内画”中描述的修复算法

img_inpainted=cv2.inpaint(img,mask,7,cv2.inpaint_NS)

plt.imshow(img_inpainted)

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

如您所见,”星期二”已从图片中删除。

总结

现在,让我们总结一下,并创建一个函数来从任何图像中删除文本。我们只需要生成一个框列表并遍历每个文本框。

将matplotlib.pyplot导入为plt

进口keras_ocr

导入cv2

导入数学

将numpy导入为np

定义中点(x1,y1,x2,y2):

x_mid=int((x1+x2)/2)

y_mid=int((y1+y2)/2)

返回(x_mid,y_mid)

pipeline=keras_ocr.pipeline。pipeline()

def inpaint _ text(img _ path,pipeline):

#读取图像

img=keras_ocr.tools.read(img_路径)

#生成(字,框)元组

预测_组=管道识别(〔img〕)

掩码=np.零(img.shape〔:2〕,dtype=”uint8″)

对于预测框_组[0]:

x0,y0=框[1][0]

x1,y1=框[1][1]

x2,y2=框[1][2]

x3,y3=框[1][3]

x_mid0,y_mid0=中点(x1,y1,x2,y2)

x_mid1,y_mi1=中点(x0,y0,x3,y3)

厚度=int(math.sqrt((x2-x1)**2+(y2-y1)*2))

cv2.line(掩码,(x_mid0,y_mid1),(x_2mid1,y_mi1),255,厚度)

img=cv2.inpaint(img,mask,7,cv2.inpaint _ NS)

返回(img)

以下是最终结果(前后):

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

另外两个例子:

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

请注意,如果您想保存图像,需要将其转换为RGB格式,否则颜涩将反转!

img_rgb=cv2.cvt颜涩(img,cv2.COLOR_BGR2RGB)

cv2.imwrite(文本免费图片.jpg,img rgb)

如果您只想删除一些单词,可以包括If条件,如下所示:

提供要删除的单词列表

删除_列表=〔星期二.星期一〕

我们可以在for循环中包含if条件

def inpaint_text(img_path,remove_list,pipeline):

#读取图像

img=keras_ocr.tools.read(img_路径)

#生成(字,框)元组

预测_组=管道识别(〔img〕)

掩码=np.零(img.shape〔:2〕,dtype=”uint8″)

对于预测框_组[0]:

如果删除_列表中的框[0]:

x0,y0=框[1][0]

x1,y1=框[1][1]

x2,y2=框[1][2]

x3,y3=框[1][3]

x_mid0,y_mid0=中点(x1,y1,x2,y2)

x_mid1,y_mi1=中点(x0,y0,x3,y3)

厚度=int(math.sqrt((x2-x1)**2+(y2-y1)*2))

cv2.line(掩码,(x_mid0,y_mid1),(x_2mid1,y_mi1),255,厚度)

img=cv2.inpaint(img,mask,7,cv2.inpaint _ NS)

返回(img)

当然,这只是一个如何修复特定单词列表的快速示例。

结尾

在本文中,我们讨论了如何实现一种自动从图像中删除文本的算法,该算法使用预先训练的OCR模型(使用Keras)和使用cv2的修复算法。该算法似乎能够在没有训练模型的情况下从图像中快速删除文本。

当文本框靠近其他对象时,它通常表现不好,因为它可能会扭曲周围的环境。

谢谢你的阅读!

免责声明: 1、本站信息来自网络,版权争议与本站无关 2、本站所有主题由该帖子作者发表,该帖子作者与本站享有帖子相关版权 3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和本站的同意 4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责 5、用户所发布的一切软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。 6、您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 7、请支持正版软件、得到更好的正版服务。 8、如有侵权请立即告知本站,本站将及时予与删除 9、本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章和视频仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。
600学习网 » 使用CV2和Keras OCR从图像中删除文本-600学习网