文本检测 OpenCV EAST 文本检测器 源代码
请直接看原文
文本检测 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文本检测器,为什么我们使用它,以及什么使算法如此新颖 – 我还将包括原始论文的链接,以便您可以阅读详细信息.
最后,我将提供我的Python + OpenCV文本检测实现,以便您可以开始在自己的应用程序中应用文本检测。
图1:自然场景图像的示例,其中文本检测由于光照条件,图像质量和非平面物体而具有挑战性(Mancas-Thillou和Gosselin的图1 )。
图2: OpenCV的EAST场景文本检测器即使在模糊和模糊的图像中也能检测到。
如果您对自然场景图像中的文本检测相关的挑战更感兴趣,我建议阅读Mancas-Thillou和Gosselin的作品。
图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 / 目录中提供了三张示例图片 。您可能希望添加自己使用智能手机收集的图像或在线查找的图像。
实施说明
我今天包含的文本检测实现基于OpenCV的官方C ++示例 ; 但是,我必须承认在将其转换为Python时遇到了一些麻烦。
首先, Python 中没有 Point2f 和 RotatedRect函数,因此,我无法100%模仿 C ++实现。C ++实现可以生成旋转的边界框,但不幸的是,我今天与你分享的那个不能。
我解决了这个问题,我在imutils中使用我自己的 非最大值抑制实现,但同样,我不相信这两个是100%可互换的,因为看起来 NMSBoxes 接受其他参数。
鉴于这一切,我尽力使用我的工作功能和资源为您提供最好的OpenCV文本检测实现。如果您对方法有任何改进,请随时在下面的评论中分享。
1 $ pip install --upgrade imutils
此时您的系统已配置好,因此打开 text_detection .py
首先,我们在第2-6行导入所需的包和模块。值得注意的是,我们 从 imutils导入NumPy,OpenCV和我的 non_max_suppression 实现。object_detection 。
从那里, 第30行和第31行确定原始图像尺寸与新图像尺寸的比率(基于为- width 和 -height提供的命令行参数 )。
为了使用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中每个边界框关联的概率
我们稍后将对这些区域应用非最大值抑制。
我们需要通过忽略不具有足够高概率的区域来过滤掉弱文本检测(第82和83行)。
当文本通过网络时,EAST文本检测器自然地减小了体积大小 – 我们的体积大小实际上比输入图像小4倍,所以我们乘以4使坐标回到原始图像的方向。
我已经介绍了如何 在第91-93行提取 角度数据; 但是,正如我在上一节中提到的,我无法像在C ++实现中那样构建一个旋转的边界框 – 如果你想要处理任务,从第91行的角度开始将是你的第一个步。
然后,我们 分别更新我们的 rects 和 confidences列表(第109和110行)。
最后一步是将非最大值抑制应用于我们的边界框以抑制弱重叠边界框,然后显示结果文本预测
相反,我使用 了imutils 包中提供的 非最大值抑制实现(第114行)。结果仍然很好; 但是,我无法将输出与NMSBoxes 函数进行比较 ,看它们是否相同。
第117-126行环绕我们的边界 框 ,将坐标缩放回原始图像尺寸,并将输出绘制到我们的 原始 图像。显示 原始 图像,直到按下一个键(第129和130行)。
图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检测视频中的文本。
我们首先导入我们的包。我们将使用 VideoStream 访问网络摄像头和 FPS 来对此脚本的每秒帧进行基准测试。其他所有内容与上一节中的相同。
为方便起见,让我们定义一个新函数来解码我们的预测函数 – 它将被重用于每个帧并使我们的循环更清晰
在第11行,我们定义了 decode_predictions 函数。此函数用于提取:
文本区域的边界框坐标
以及文本区域检测的概率
此专用函数将使代码在此脚本中更易于阅读和管理。
重要提示: EAST文本要求输入图像尺寸为32的倍数,因此如果您选择调整 – 宽度 和 – 高度 值,请确保它们是32的倍数!
第84-86行的高度/宽度和比率初始化将允许我们稍后正确地缩放我们的边界框。
定义了输出层名称,我们在第91-97行加载了预训练的EAST文本检测器。
网络摄像头(100-103行)
或视频文件(第106-107行)
从那里我们初始化我们在第110行的每秒帧数, 并开始循环传入帧
我们的框架调整大小,保持纵横比(第124行)。从那里,我们抓住尺寸并计算比例比(第129-132行)。然后,我们调整框架再次(必须是32的倍数),此时忽略纵横比,因为我们已经存储保管在比(135行)。
我们 在循环的每次迭代中更新我们的 fps计数器(第162行),以便在我们突破循环时计算并显示计时(第173-175行)。
我们在165行显示EAST文本检测的输出 并处理按键(第166-170行)。如果按“q”进行“退出”,我们就会 跳出 循环并继续清理并释放指针。
视频文本检测结果
要使用OpenCV将文本检测应用于视频,请务必使用此博客文章的“下载”部分。
从那里,打开一个终端并执行以下命令(这将启动你的网络摄像头,因为我们没有 通过命令行参数提供 – 视频)
这个结果并不像作者报道的那么快(13 FPS); 但是,我们使用的是Python而不是C ++。通过使用Cython优化for循环,我们应该能够提高文本检测管道的速度。
摘要
在今天的博客文章中,我们学习了如何使用OpenCV的新EAST文本检测器来自动检测自然场景图像中是否存在文本。
文本检测器不仅准确,而且能够在720p图像上以大约13 FPS的近实时速度运行。
为了提供OpenCV的EAST文本检测器的实现,我需要转换OpenCV的C ++示例 ; 然而,我遇到了许多挑战,例如:
请直接看原文
文本检测 OpenCV EAST文本检测器 源代码 https://hotdog29.com/?p=643
文本检测 OpenCV EAST 文本检测器 源代码相关推荐
- 文本检测实战:使用OpenCV实现文本检测(EAST 文本检测器)
在本教程中,您将学习如何使用 OpenCV 使用 EAST 文本检测器检测图像中的文本. EAST 文本检测器要求我们在我们的系统上运行 OpenCV 3.4.2 或 OpenCV 4 . 论文原文: ...
- OCR文本检测模型—EAST
文章目录 一.EAST模型简介 二.EAST模型网络结构 三.EAST模型效果 四.Advanced EAST 典型的文本检测模型一般是会分多个阶段(multi-stage)进行,在训练时需要把文本检 ...
- (三十一)论文阅读 | 文本检测之EAST
简介 图1:论文原文 本文介绍的是发表在CVPR2017{\rm CVPR\ 2017}CVPR 2017的一篇关于文本检测的文章.EAST{\rm EAST}EAST是两阶段的文本检测模型,具有简单 ...
- YOLO 对象检测 OpenCV 源代码
请直接查看原文章 YOLO 对象检测 OpenCV 源代码 https://hotdog29.com/?p=621 在 2019年7月8日 上张贴 由 hotdog发表回复 YOLO YOLO 在本教 ...
- EAST实现自然场景下文本检测tensorflow
案例一:python+opencv+EAST做自然场景文本检测 链接:https://blog.csdn.net/luolan9611/article/details/81914251 案例二:高效准 ...
- 基于EAST和Tesseract的文本检测与识别
目录 导言 现实世界问题 说明 问题陈述 业务目标和约束条件 可用于文本检测和识别的数据集 数据集概述和说明 探索性数据分析(EDA) 深度学习时代之前的文本检测方法 EAST(高效精确的场景文本检测 ...
- 机器视觉 OpenCV—python 基于LSTM网络的OCR文本检测与识别
文章目录 一.背景与环境搭建 二.文本检测与识别 一.背景与环境搭建 OpenCV的文本识别流程: OpenCV EAST 文本检测器执行文本检测, 我们提取出每个文本 ROI 并将其输入 Tesse ...
- OCR系列——文本检测任务
1. 简介 文本检测任务是找出图像或视频中的文字位置.不同于目标检测任务,目标检测不仅要解决定位问题,还要解决目标分类问题. 目标检测和文本检测同属于"定位"问题.但是文本检测无需 ...
- CVPR 2023 | 白翔团队提出:将CLIP模型用于场景文本检测
点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入->[计算机视觉]微信技术交流群 转载自:CSIG文档图像分析与识别专委会 本文简要介绍CV ...
最新文章
- LigerUI编辑表格组件单元格校验问题
- C#调用C++的dll文件方法
- apache mediawiki 安装_如何在CentOS 7上安装MediaWiki
- 天池 在线编程 滑动数独(滑动窗口)
- PostgreSQL在Linux上的RPM和源码安装
- 使用实时摄像头预览的iOS对象检测(六)
- 怎么看电脑系统是win几_做设计,用win系统 还是苹果MAC电脑更好 (PS举例)
- [转载] Visual Studio 2017 VC项目设置 printf 输出到 Console 窗口调试
- SQL Server - 深入探讨SQL Server 2016新特性之 --- Temporal Table(历史表)
- MySQL中删除表中并不存在的数据不报错
- protel99se进阶视频教程(手把手教你画51单片机开发板)
- 微信公众号(服务号)申请及微信认证详细流程图解
- 常见的英文文本处理步骤
- python获取文件大小
- UPC 小澳的葫芦 (最短路+01分数规划 )
- WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)
- 电商平台性能测试报告
- 文悦古体仿宋字体官方版
- 第二章:Djgo后台管理
- 利用文件的md5值查重并删除重复的文件
热门文章
- 程序员月入2万,全部上交给女友,每个月就500的生活费,忍无可忍直接提出分手
- Pointet++ Tutorial
- 在 Ubuntu 中添加新用户并给予 root 权限
- 使用 vue-element-admin 开发后台管理系统【安装】
- ResourceQuota 和 LimitRange 实践
- Construct2:自制简易超级玛丽射击游戏进阶
- USB-C正反插带PD快充USB3.0输出转HDMI/VGA音视频数据转换方案AG9321-MCQ
- 永星电子 HDMI LVDS VGA USB 转 to MIPI DSI 驱动DOME支持1080P旋转横屏安卓RK3288音频缩放自适应机顶盒子投影仪相机PS4 T13530080630
- 第一阶段个人冲刺博客第十天
- rest风格使用两个变量_REST风格