请直接看原文

文本检测 OpenCV EAST文本检测器 源代码 https://hotdog29.com/?p=643

在 2019年7月11日 上张贴 由 hotdog发表回复
文本检测

文本检测
在本教程中,您将学习如何使用 EAST 文本检 测器使用 OpenCV 检测自然场景图像中的文本。

OpenCV 的 EAST 文本检测器是一种基于新颖架构和训练模式的深度学习模型。它能够(1)在720p图像上以13 FPS接近实时运行,并且(2)获得最先进的 文本检测 精度。

在本教程的其余部分,您将学习如何使用 OpenCV 的 EAST检测器 自动检测图像和视频流中的文本。

OpenCV 文本检测(EAST文本检测器)
在本教程中,您将学习如何使用EAST文本检测器使用OpenCV检测图像中的文本。

EAST文本检测器要求我们在我们的系统上运行OpenCV 3.4.2或OpenCV 4 – 如果您还没有安装OpenCV 3.4.2或更高版本,请参阅我的OpenCV安装指南并按照各自的操作系统进行操作。

在今天的教程的第一部分中,我将讨论为什么在自然场景图像中检测文本会如此具有挑战性。

从那里我将简要讨论EAST文本检测器,为什么我们使用它,以及什么使算法如此新颖 – 我还将包括原始论文的链接,以便您可以阅读详细信息.

最后,我将提供我的Python + OpenCV文本检测实现,以便您可以开始在自己的应用程序中应用文本检测。

为什么自然场景文本检测如此具有挑战性

图1:自然场景图像的示例,其中文本检测由于光照条件,图像质量和非平面物体而具有挑战性(Mancas-Thillou和Gosselin的图1 )。

在受约束的受控环境中检测文本通常可以通过使用基于启发式的方法来完成,例如利用梯度信息或者文本通常被分组成段落并且字符出现在直线上的事实。在我之前关于检测护照图像中的机器可读区域的博客文章中可以看到这种基于启发式的文本检测器的示例 。

自然场景文本检测不同 – 而且更具挑战性。

由于廉价数码相机的普及,更不用说几乎每部智能手机现在都有摄像头这一事实,我们需要高度关注拍摄图像的条件 – 此外,我们能做什么和不能做什么假设。我已经包含了Celine Mancas-Thillou和Bernard Gosselin在2017年优秀论文“ 自然场景文本理解”中描述的自然场景文本检测挑战的总结版本:

图像/传感器噪声:手持式摄像机的传感器噪声通常高于传统扫描仪的噪声。此外,低价相机通常会插入原始传感器的像素以产生真实的颜色。
视角:自然场景文本自然可以具有与文本不平行的视角,使文本更难识别。
模糊:不受控制的环境往往会模糊,特别是如果最终用户使用的智能手机没有某种形式的稳定性。
照明条件:我们无法对自然场景图像中的照明条件做出任何假设。它可能接近黑暗,相机上的闪光灯可能打开,或者太阳可能会照亮,使整个图像饱和。
分辨率:并非所有摄像机都是相同的 – 我们可能正在处理分辨率低的摄像机。
非纸质对象:大多数(但不是全部)纸张都不是反光的(至少在您尝试扫描的纸张环境中)。自然场景中的文字可能是反光的,包括徽标,标志等。
非平面物体:考虑当您将文本环绕在瓶子周围时会发生什么 – 表面上的文本变得扭曲和变形。虽然人类仍然可以轻松地“检测”并阅读文本,但我们的算法会很困难。我们需要能够处理这样的用例。
未知布局:我们不能使用任何先验信息来为我们的算法提供关于文本所在位置的“线索”。
正如我们将要了解的那样,OpenCV的EAST文本检测器实现非常强大,即使文本模糊,反射或部分模糊,也能够对文本进行本地化:

图2: OpenCV的EAST场景文本检测器即使在模糊和模糊的图像中也能检测到。

如果您对自然场景图像中的文本检测相关的挑战更感兴趣,我建议阅读Mancas-Thillou和Gosselin的作品。

EAST深度学习文本检测器

图3: EAST文本检测全卷积网络的结构(Zhou等人的图3 )。

随着OpenCV 3.4.2和OpenCV 4的发布,我们现在可以使用一种名为EAST的基于深度学习的文本检测器,它基于Zhou等人的2017年论文“ EAST:一种高效精确的场景文本检测器”。

我们将算法称为“EAST”,因为它是: E fficient 和A ccurate S cene T ext检测管道。

据作者说,EAST管道能够在720p图像上以任意方向预测文本的单词和行,并且能够以13 FPS运行。

也许最重要的是,由于深度学习模型是端到端的,因此可以回避其他文本检测器通常应用的计算上昂贵的子算法,包括候选聚合和字分区。

为了构建和训练这样一种深度学习模型,EAST方法采用了新颖,精心设计的损失函数。

有关EAST的更多详细信息,包括架构设计和培训方法,请务必参考作者的出版物。

项目结构
首先,请访问“下载”部分,确保将源代码+图像抓取到今天的帖子 。从那里,只需使用 tree terminal命令查看项目结构

请注意,我在images / 目录中提供了三张示例图片 。您可能希望添加自己使用智能手机收集的图像或在线查找的图像。

我们 今天将审查两个 py 文件:

text_detection .py :检测静态图像中的文本。
text_detection_video .py :通过网络摄像头或输入视频文件检测文本。
两个脚本都使用序列化的EAST模型(frozen_east_text_detection .pb ),为了方便起见,在“下载”中提供了这些 模型 。

实施说明
我今天包含的文本检测实现基于OpenCV的官方C ++示例 ; 但是,我必须承认在将其转换为Python时遇到了一些麻烦。

首先, Python 中没有 Point2f 和 RotatedRect函数,因此,我无法100%模仿 C ++实现。C ++实现可以生成旋转的边界框,但不幸的是,我今天与你分享的那个不能。

其次, NMSBoxes 函数不返回Python绑定的任何值(至少对于我的OpenCV 4预发布安装),最终导致OpenCV抛出错误。该 NMSBoxes 功能可以在OpenCV的3.4.2工作,但我无法详尽地测试它。

我解决了这个问题,我在imutils中使用我自己的 非最大值抑制实现,但同样,我不相信这两个是100%可互换的,因为看起来 NMSBoxes 接受其他参数。

鉴于这一切,我尽力使用我的工作功能和资源为您提供最好的OpenCV文本检测实现。如果您对方法有任何改进,请随时在下面的评论中分享。

使用OpenCV实现我们的文本检测器
在我们开始之前,我想指出的是,你将需要至少OpenCV的3.4.2(或OpenCV的4)安装在您的系统利用OpenCV的东部文本探测器上,因此,如果您尚未安装的OpenCV 3.4.2或更高在您的系统上,请参阅我的OpenCV安装指南。

接下来,确保您的系统上还 安装/升级了imutils

1 $ pip install --upgrade imutils
此时您的系统已配置好,因此打开 text_detection .py

首先,我们在第2-6行导入所需的包和模块。值得注意的是,我们 从 imutils导入NumPy,OpenCV和我的 non_max_suppression 实现。object_detection 。

然后我们继续解析第9-20行的五个命令行参数:

– image :输入图像的路径。
– east :EAST场景文本检测器模型文件路径。
– min – confidence :确定文本的概率阈值。可选, 默认值= 0.5 。
– width :调整后的图像宽度 – 必须是32的倍数。可选, 默认值= 320 。
– height :调整后的图像高度 – 必须是32的倍数。可选, 默认值= 320 。
重要提示: EAST文本要求输入图像尺寸为32的倍数,因此如果您选择调整 – 宽度 和 – 高度 值,请确保它们是32的倍数!

从那里,让我们加载我们的图像并调整它的大小

在 第23和24行,我们加载并复制输入图像。

从那里, 第30行和第31行确定原始图像尺寸与新图像尺寸的比率(基于为- width 和 -height提供的命令行参数 )。

然后我们调整图像大小,忽略纵横比(第34行)。

为了使用OpenCV和EAST深度学习模型执行文本检测,我们需要提取两层的输出特征映射

我们 在40-42行构建一个layerNames列表 :

第一层是我们的输出sigmoid激活,它给出了包含文本或不包含文本的区域的概率。
第二层是表示图像“几何”的输出要素图 – 我们将能够使用此几何来导出输入图像中文本的边界框坐标
让我们加载OpenCV的EAST文本检测器

我们使用cv2将神经网络加载到内存中 。dnn 。readNet 将路径传递给EAST检测器(包含在我们的命令行 args 字典中)作为第46行的参数 。

然后,我们通过转换准备好图像,形成 blob 第50和51行。要了解有关此步骤的更多信息,请参阅 深度学习:OpenCV的blobFromImage如何工作。

要预测文本,我们可以简单地将blob设置 为输入并调用 net 。前进 (第53和54行)。这些行被抓取时间戳包围,以便我们可以 在第58行打印经过的时间 。

通过提供 layerNames 作为net的参数 。前进 ,我们正在指导的OpenCV返回两个特征的地图

输出 geometry 图用于导出输入图像中文本的边界框坐标
类似地, scores 图包含包含文本的给定区域的概率
我们需要逐个遍历每个值

我们首先抓住 scores 的维度 (第63行),然后初始化两个列表:

rects :存储文本区域的边界框(x,y) –坐标
confidences 置信度 :存储与 rects中每个边界框关联的概率
我们稍后将对这些区域应用非最大值抑制。

在第68行开始循环 。

第72-77行提取当前行的分数和几何数据 y 。

接下来,我们遍历当前所选行的每个列索引

对于每一行,我们开始循环第80行 。

我们需要通过忽略不具有足够高概率的区域来过滤掉弱文本检测(第82和83行)。

当文本通过网络时,EAST文本检测器自然地减小了体积大小 – 我们的体积大小实际上比输入图像小4倍,所以我们乘以4使坐标回到原始图像的方向。

我已经介绍了如何 在第91-93行提取 角度数据; 但是,正如我在上一节中提到的,我无法像在C ++实现中那样构建一个旋转的边界框 – 如果你想要处理任务,从第91行的角度开始将是你的第一个步。

从那里,第97-105行导出文本区域的边界框坐标。

然后,我们 分别更新我们的 rects 和 confidences列表(第109和110行)。

我们差不多完成了!

最后一步是将非最大值抑制应用于我们的边界框以抑制弱重叠边界框,然后显示结果文本预测

正如我在上一节中提到的,我不能使用非最大值抑制在我的OpenCV 4安装( cv2.dnn.NMSBoxes )作为Python绑定没有返回值,最终导致OpenCV的错误了。我无法完全在OpenCV 3.4.2中进行测试,因此它 可以在v3.4.2中运行。

相反,我使用 了imutils 包中提供的 非最大值抑制实现(第114行)。结果仍然很好; 但是,我无法将输出与NMSBoxes 函数进行比较 ,看它们是否相同。

第117-126行环绕我们的边界 框 ,将坐标缩放回原始图像尺寸,并将输出绘制到我们的 原始 图像。显示 原始 图像,直到按下一个键(第129和130行)。

作为最后的实现说明,我想提一下,我们的两个嵌套 for 循环用于循环第68-110行的 scores 和 geometry ,这将是一个很好的例子,你可以利用Cython来大大加速你的管道。我已经展示了Cython在Fast中的强大功能, 使用OpenCV和Python优化了’for’像素循环。

OpenCV文本检测结果
你准备好对图像应用文本检测了吗?

首先抓住 此博客文章的“下载”并解压缩文件。

从那里,您可以在终端中执行以下命令(记下两个 命令行参数)

12 $ python text_detection.py --image images/lebron_james.jpg \ --east frozen_east_text_detection.pb
您的结果应类似于以下图像:

图4:着名的篮球运动员,Lebron James的球衣文字通过OpenCV和EAST文本检测成功识别。

勒布朗詹姆斯确定了三个文本区域。

现在让我们尝试检测商业标志的文字

12 $ python text_detection.py --image images/car_wash.png \ --east frozen_east_text_detection.pb

图5:在洗车站的这个自然场景中使用EAST和Python以及OpenCV可以轻松识别文本。

最后,我们将尝试一个路标

12 $ python text_detection.py --image images/sign.jpg \ --east frozen_east_text_detection.pb

图6:使用Python + OpenCV进行场景文本检测,EAST文本检测器成功检测到此西班牙语停止标志上的文本。

此场景包含西班牙停车标志。OpenCV和EAST正确检测到“ALTO”这个词。

正如您所知,EAST非常准确且相对较快,每张图像的平均时间约为0.14秒。

使用OpenCV在视频中进行文本检测
现在我们已经看到了如何检测图像中的文本,让我们继续使用OpenCV检测视频中的文本。

这个解释非常简短; 有关详细信息,请参阅上一节。

打开 text_detection_video 。py

我们首先导入我们的包。我们将使用 VideoStream 访问网络摄像头和 FPS 来对此脚本的每秒帧进行基准测试。其他所有内容与上一节中的相同。

为方便起见,让我们定义一个新函数来解码我们的预测函数 – 它将被重用于每个帧并使我们的循环更清晰

在第11行,我们定义了 decode_predictions 函数。此函数用于提取:

文本区域的边界框坐标
以及文本区域检测的概率
此专用函数将使代码在此脚本中更易于阅读和管理。

让我们解析我们的命令行参数

我们的命令行参数在第69-80 行解析:

– east :EAST场景文本检测器模型文件路径。
– video :输入视频的路径。可选 – 如果提供了视频路径,则不会使用网络摄像头。
–min-confidence :确定文本的概率阈值。可选, 默认值= 0.5 。
– width :调整后的图像宽度(必须是32的倍数)。可选, 默认值= 320 。
– height :调整后的图像高度(必须是32的倍数)。可选, 默认值= 320 。
上一节中仅使用图像的脚本(就命令行参数而言)的主要变化是我 用- video替换了 -image参数 。

重要提示: EAST文本要求输入图像尺寸为32的倍数,因此如果您选择调整 – 宽度 和 – 高度 值,请确保它们是32的倍数!

接下来,我们将执行模仿前一个脚本的重要初始化

第84-86行的高度/宽度和比率初始化将允许我们稍后正确地缩放我们的边界框。

定义了输出层名称,我们在第91-97行加载了预训练的EAST文本检测器。

以下块设置我们的视频流和每秒帧数计数器

我们的视频流设置为:

网络摄像头(100-103行)
或视频文件(第106-107行)
从那里我们初始化我们在第110行的每秒帧数, 并开始循环传入帧

我们开始在113行的视频/网络摄像头帧上循环 。

我们的框架调整大小,保持纵横比(第124行)。从那里,我们抓住尺寸并计算比例比(第129-132行)。然后,我们调整框架再次(必须是32的倍数),此时忽略纵横比,因为我们已经存储保管在比(135行)。

推理和绘图文本区域边界框发生在以下行

在这个块中我们:

使用EAST通过创建blob 并将其传递通过网络来检测文本区域 (第139-142行)
解码预测并应用NMS(第146和147行)。我们使用 此脚本中先前定义的decode_predictions函数和我的imutils non_max_suppression 便利函数。
环绕边界框并在框架上绘制它们 (第150-159行)。这涉及通过先前收集的比率来缩放框。
从那里我们将关闭帧处理循环以及脚本本身

我们 在循环的每次迭代中更新我们的 fps计数器(第162行),以便在我们突破循环时计算并显示计时(第173-175行)。

我们在165行显示EAST文本检测的输出 并处理按键(第166-170行)。如果按“q”进行“退出”,我们就会 跳出 循环并继续清理并释放指针。

视频文本检测结果
要使用OpenCV将文本检测应用于视频,请务必使用此博客文章的“下载”部分。

从那里,打开一个终端并执行以下命令(这将启动你的网络摄像头,因为我们没有 通过命令行参数提供 – 视频)

12 $ python text_detection_video.py --east frozen_east_text_detection.pb
我们的OpenCV文本检测视频脚本可实现7-9 FPS。

这个结果并不像作者报道的那么快(13 FPS); 但是,我们使用的是Python而不是C ++。通过使用Cython优化for循环,我们应该能够提高文本检测管道的速度。

摘要
在今天的博客文章中,我们学习了如何使用OpenCV的新EAST文本检测器来自动检测自然场景图像中是否存在文本。

文本检测器不仅准确,而且能够在720p图像上以大约13 FPS的近实时速度运行。

为了提供OpenCV的EAST文本检测器的实现,我需要转换OpenCV的C ++示例 ; 然而,我遇到了许多挑战,例如:

无法使用OpenCV的 NMSBox 进行非最大值抑制,而是必须使用imutils的实现 。
由于缺少RotatedRect的Python绑定,无法计算真正的旋转边界框 。
我试图让我的实现尽可能接近OpenCV,但请记住,我的版本与C ++版本没有100%完全相同,并且可能会有一两个小问题需要随着时间的推移而解决。

无论如何,我希望你喜欢今天的OpenCV文本检测教程!

源代码下载
https://hotdog29.com/?p=620
文章转自 Adrian Rosebrock ,OpenCV Face Recognition,PyImageSearch,https://www.pyimagesearch.com/2018/09/24/opencv-face-recognition/,2009年7月11日访问

相关文章
YOLO 对象检测 OpenCV 源代码
代码下载
dlib 使用OpenCV,Python和深度学习进行人脸识别 源代码
OpenCV 人脸识别 源代码
OpenCV教程 ,资源和指南
张贴在技术博客、opencv标签:opencv、深度学习、文本检测、EAST编辑

请直接看原文

文本检测 OpenCV EAST文本检测器 源代码 https://hotdog29.com/?p=643

文本检测 OpenCV EAST 文本检测器 源代码相关推荐

  1. 文本检测实战:使用OpenCV实现文本检测(EAST 文本检测器)

    在本教程中,您将学习如何使用 OpenCV 使用 EAST 文本检测器检测图像中的文本. EAST 文本检测器要求我们在我们的系统上运行 OpenCV 3.4.2 或 OpenCV 4 . 论文原文: ...

  2. OCR文本检测模型—EAST

    文章目录 一.EAST模型简介 二.EAST模型网络结构 三.EAST模型效果 四.Advanced EAST 典型的文本检测模型一般是会分多个阶段(multi-stage)进行,在训练时需要把文本检 ...

  3. (三十一)论文阅读 | 文本检测之EAST

    简介 图1:论文原文 本文介绍的是发表在CVPR2017{\rm CVPR\ 2017}CVPR 2017的一篇关于文本检测的文章.EAST{\rm EAST}EAST是两阶段的文本检测模型,具有简单 ...

  4. YOLO 对象检测 OpenCV 源代码

    请直接查看原文章 YOLO 对象检测 OpenCV 源代码 https://hotdog29.com/?p=621 在 2019年7月8日 上张贴 由 hotdog发表回复 YOLO YOLO 在本教 ...

  5. EAST实现自然场景下文本检测tensorflow

    案例一:python+opencv+EAST做自然场景文本检测 链接:https://blog.csdn.net/luolan9611/article/details/81914251 案例二:高效准 ...

  6. 基于EAST和Tesseract的文本检测与识别

    目录 导言 现实世界问题 说明 问题陈述 业务目标和约束条件 可用于文本检测和识别的数据集 数据集概述和说明 探索性数据分析(EDA) 深度学习时代之前的文本检测方法 EAST(高效精确的场景文本检测 ...

  7. 机器视觉 OpenCV—python 基于LSTM网络的OCR文本检测与识别

    文章目录 一.背景与环境搭建 二.文本检测与识别 一.背景与环境搭建 OpenCV的文本识别流程: OpenCV EAST 文本检测器执行文本检测, 我们提取出每个文本 ROI 并将其输入 Tesse ...

  8. OCR系列——文本检测任务

    1. 简介 文本检测任务是找出图像或视频中的文字位置.不同于目标检测任务,目标检测不仅要解决定位问题,还要解决目标分类问题. 目标检测和文本检测同属于"定位"问题.但是文本检测无需 ...

  9. CVPR 2023 | 白翔团队提出:将CLIP模型用于场景文本检测

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入->[计算机视觉]微信技术交流群 转载自:CSIG文档图像分析与识别专委会  本文简要介绍CV ...

最新文章

  1. LigerUI编辑表格组件单元格校验问题
  2. C#调用C++的dll文件方法
  3. apache mediawiki 安装_如何在CentOS 7上安装MediaWiki
  4. 天池 在线编程 滑动数独(滑动窗口)
  5. PostgreSQL在Linux上的RPM和源码安装
  6. 使用实时摄像头预览的iOS对象检测(六)
  7. 怎么看电脑系统是win几_做设计,用win系统 还是苹果MAC电脑更好 (PS举例)
  8. [转载] Visual Studio 2017 VC项目设置 printf 输出到 Console 窗口调试
  9. SQL Server - 深入探讨SQL Server 2016新特性之 --- Temporal Table(历史表)
  10. MySQL中删除表中并不存在的数据不报错
  11. protel99se进阶视频教程(手把手教你画51单片机开发板)
  12. 微信公众号(服务号)申请及微信认证详细流程图解
  13. 常见的英文文本处理步骤
  14. python获取文件大小
  15. UPC 小澳的葫芦 (最短路+01分数规划 )
  16. WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)
  17. 电商平台性能测试报告
  18. 文悦古体仿宋字体官方版
  19. 第二章:Djgo后台管理
  20. 利用文件的md5值查重并删除重复的文件

热门文章

  1. 程序员月入2万,全部上交给女友,每个月就500的生活费,忍无可忍直接提出分手
  2. Pointet++ Tutorial
  3. 在 Ubuntu 中添加新用户并给予 root 权限
  4. 使用 vue-element-admin 开发后台管理系统【安装】
  5. ResourceQuota 和 LimitRange 实践
  6. Construct2:自制简易超级玛丽射击游戏进阶
  7. USB-C正反插带PD快充USB3.0输出转HDMI/VGA音视频数据转换方案AG9321-MCQ
  8. 永星电子 HDMI LVDS VGA USB 转 to MIPI DSI 驱动DOME支持1080P旋转横屏安卓RK3288音频缩放自适应机顶盒子投影仪相机PS4 T13530080630
  9. 第一阶段个人冲刺博客第十天
  10. rest风格使用两个变量_REST风格