精华内容
下载资源
问答
  • 谷歌的语言检测项目(language detection java) 自己转成C#版 VS2010, .net 4.0, 引用vjslib(好像要有J#才有这个类库)。 可以通过减少profiles 里的文件来减少语言,使语言更准确判断。
  • franc 是检测文本语言的 JavaScript 库,支持比其他任何库更多的语言,甚至是 Google。 在线演示 标签:Franc
  • Google语言检测工具(language-detection),版本号:03-03-2014. 该版本优化了短文本(10-20 char)的识别,支持47种语言。
  • 检测图像中包含多语言文本的矩形区域。 该项目基于Michael R. Lyu,Jiqiang Song和Min Cai的“一种用于多语言视频文本检测,本地化和提取的综合方法”。 提取部分被省略。 默认配置最适合水平对齐的,对比度良好的...
  • 语言检测 建立状态 代码覆盖率 版 下载总次数 最低PHP版本 执照 该库可以检测给定文本字符串的语言。 它可以将给定的训练用语在许多不同的惯用法中解析为一系列并用PHP构建一个数据库文件以供检测阶段使用。 然后,...
  • 语言检测器 PHP类可从任何自由文本中检测语言。 它遵循描述的方法,将给定的文本标记为 (在执行此步骤之前,我们先清除空白)。 然后,我们对tokens进行排序,并与语言model进行比较。 这个怎么运作 我们需要的第...
  • 检测文本语言。 法郎有什么好看的? franc可以支持比其他任何库更多的语言(†) 法郎打包带支持 , ,或种语言 franc有一个CLI †-根据 ,这是世界上翻译最多的文件。 法郎有什么不好的? franc支持多种语言...
  • 数据集下载 - ICDAR 2019多语言场景文本检测和识别的强大阅读挑战 在训练数据集下方下载每个任务的相关基础事实。 您可能还想阅读本页末尾的“常见问题解答”部分。 任务1:多脚本文本检测 训练集: 训练集由10...

    数据集下载 - ICDAR 2019多语言场景文本检测和识别的强大阅读挑战

    在训练数据集下方下载每个任务的相关基础事实。

    您可能还想阅读本页末尾的“常见问题解答”部分。

    任务1:多脚本文本检测

    训练集:

    训练集由10,000个图像组成,可以从以下2个链接下载:

    TrainSetImagesTask1_Part1  (3.5G)

    TrainSetImagesTask1_Part2  (3.3G)

    基本事实由10,000个文本文件(对应于图像)组成,具有文字级本地化,脚本和转录,可以从以下链接下载:

    TrainSetGT(6.5M)

    请注意,此任务仅需要本地化结果(如任务页面中的结果格式所示),但基本事实还提供每个边界框和转录的脚本ID。任务3和4中将需要此额外信息。

    有关培训集的额外信息(对于专注于一种或几种语言的研究人员而言,可能非常有用,而不是所有的多语言集合):

    10,000个图像在训练集中排序,使得:每个连续的1000个图像包含一种主要语言的文本(当然它可以包含来自1种或2种其他语言的附加文本,全部来自10种语言的集合)
    00001 - 01000 :Arabic 
    01001 - 02000:English 
    02001 - 03000:French 
    03001 - 04000:Chinese 
    04001 - 05000:German 
    05001 - 06000:Korean 
    06001 - 07000:Japanese 
    07001 - 08000:Italian 
    08001 - 09000:Bangla 
    09001 - 10000:Hindi

    测试集: 

    图像(10,000张图像):

    MLT19_TestImagesPart1.zip

    MLT19_TestImagesPart2.zip

    任务2:裁剪的Word脚本标识

    训练集:

    Word_Images_Part1  (单词图像[2个文件]的基本事实也在这里[与图像在同一个文件夹中])

    Word_Images_Part2

    Word_Images_Part3

    测试集: 

    裁剪的文字图片:

    MLT19_images_task2.zip

    任务3:联合文本检测和脚本识别

    训练集:

    与任务1中相同的训练集和基本事实(参见上面的任务1)。

    测试集: 任务1的相同测试集。

    任务-4:端到端文本检测和识别

    训练集:它有两部分:

    1. 真实数据集:与任务1中相同的训练集和基本事实(参见上面的任务1)。
    2. 合成数据集:我们提供一个合成数据集,根据脚本匹配真实数据集,以帮助完成此任务的培训:

    请注意,我们为此任务提供了基准方法:  E2E-MLT。您可以在以下位置找到该方法的详细信息以及合成数据集:

    E2E-MLT - 一种用于多语言场景文本的无约束端到端方法:https//arxiv.org/abs/1801.09919

    测试集:任务1的相同测试集。

    使用条款

    “多语言场景文本检测和脚本识别(MLT)”数据集和相应的注释根据  知识共享署名4.0许可进行许可

    经常问的问题:

    问:如何为任务1,3和4完成排名/评估:

    对于任务1:  
    排名基于f-measure(Hmean)[NOT average precision],并在最后使用方法的平均召回和平均精度计算,其中:
    methodRecall =匹配数/边界框数GT(正确检测到框时匹配的位置)
    methodPrecision = 检测方法中的匹配数/数字边界框
    _Hanan = 2 * methodRecall * methodPrecision /(methodRecall + methodPrecision)

    不会为每个图像单独计算召回率,精度和f度量。它们是基于所有图像中检测到的框计算的(当然,这些框是按图像匹配/处理的)。有一个混乱,因为在MLT-2017的论文中,描述评估协议时出现了错误(在论文中,提到f-measure是按照图像计算的,然后在图像中取平均值 - 这不是我们做了什么)

    对于任务3:除“匹配”的定义外,具有相同的排名和评估。当正确检测到框并且具有正确的脚本标识时,将计算匹配。

    对于任务4:相同的排名和评估,但是当正确检测和识别框时计算匹配。额外信息:1)识别度量是编辑距离,2)包含未出现在列车组中的字符的测试集词将被设置为“不关心”检测和识别。这意味着无论您是否正确检测到它们,或者是否正确识别它们,它们都不会计入评估中。

     

    ============

     

     

    任务 - ICDAR 2019对多语言场景文本检测和识别的强大阅读挑战

    为了参加RRC-MLT-2019挑战,您必须参加至少一项任务。这是任务的描述。前三项任务类似于RRC-MLT-2017中的任务,但它们为RRC-MLT-2019重新开放,为数据集添加了新语言,并提高了整个数据集的基础事实质量。我们还在End-2-End文本检测和识别方面引入了新的第四项任务。

    任务1:多脚本文本检测

    在此任务中,参与者方法应该能够概括为检测不同脚本的文本。此任务的输入是具有各种语言的嵌入文本的场景图像,并且所需的检测是在单词级别。

    地面真相(GT)格式

    注意:为此任务提供的GT包含的信息多于此任务所需的信息,因为此GT也与任务3和4共享。因此,请确保您的方法生成的结果格式如“结果格式”段落中所述。

    根据单词边界框提供了基本事实。边界框不是面向轴的,它们由四个角的坐标以时钟方式指定。对于训练集中的每个图像,按照命名约定提供相应的UTF-8编码文本文件:

    gt_ [图片名称] .txt

    文本文件是逗号分隔文件,其中每行对应于图像中的一个文本块,并以下列格式给出其边界框坐标(四个角,顺时针),其脚本及其转录:

    X1,Y1,X2,Y2,X3,Y3,X4,Y4,脚本,转录

    有效的脚本是:“阿拉伯语”,“拉丁语”,“中文”,“日语”,“韩语”,“孟加拉语”,“印地语”,“符号”,“混合”,“无”

    请注意,转录是第9个逗号后面的任何内容,直到行尾。不使用转义字符。

    如果转录被提供为“###”,则文本块(单词)被认为是“不关心”。一些“不关心”单词具有与语言对应的脚本类,而其他单词具有“无”脚本类。后一种情况是由于低分辨率或其他失真而无法识别单词脚本。

    结果格式

    预期本地化(检测)结果如下:预期每个测试图像一个UTF-8编码的文本文件。要求参与者在单个zip文件中提交所有结果。结果文件应按照命名约定以测试图像ID命名:

    res_ [图像名称] .txt 

    (例如res_1245.txt)。每行应对应图像中的一个单词,并提供其边界框坐标(四个角,顺时针)和格式的置信度分数:

    X1,Y1,X2,Y2,X3,Y3,X4,Y4,信心

    评估

    f-measure(Hmean)用作对参与者方法进行排名的度量。标准f-度量基于检测到的单词边界框的回忆和精确度与基础事实相比较。如果检测到的边界框与GT框具有超过50%的重叠(交叉结合),则认为检测是正确的(真正的正)。有关如何计算得分的详细信息,请参见本文第III-B节:MLT2017

    问题:任务1和3:如果我们检测到“不关心”框(转录为“####”),将如何评估?
    答:“不关心”的盒子不计入评价。这意味着检测或丢失不关心框不会影响您的最终得分。

    任务-2:裁剪的Word脚本标识

    我们的数据集图像中的文本以10种不同的语言显示,其中一些语言共享相同的脚本。此外,标点符号和一些数学符号有时会显示为单独的单词,这些单词会被分配一个名为“符号”的特殊脚本类。因此,我们共有8个不同的脚本。我们已经为此任务排除了具有“混合”脚本的单词。我们也排除了所有“不关心”字样,无论它们是否有识别的脚本。

    地面真相格式

    对于单词脚本识别任务,我们将数据集中的所有单词(裁剪单词)作为单独的图像文件提供,以及相应的地面真实脚本和转录。转录不用于此任务,可以忽略。对于每个文本块,提供了紧密包含文本块的面向轴的区域。

    所有单词的脚本和转录都在整个集合的SINGLE UTF-8文本文件中提供。地面实况文件中的每一行都具有以下格式

    [字图像名称],脚本,转录

    请注意,转录是第二个逗号之后的任何内容,直到行尾。不使用转义字符。有效的脚本是“阿拉伯语”,“拉丁语”,“中文”,“日语”,“韩语”,“孟加拉语”,“印地语”,“符号”。

    此外,我们提供有关从中提取单词图像的原始图像的信息,如下所示:定义切出的文本块图像中的文本块的(非轴定向)边界框的相对坐标是在整个集合的单独的SINGLE文本文件中提供。文本块的坐标是参考切出框给出的,作为时钟方式的边界框的四个角。地面实况文件中的每一行都具有以下格式。

    [字图像名称],x1,y1,x2,y2,x3,y3,x4,y4,[原始图像名称]

    结果格式

    参与者方法应该提供每个图像的脚本,其中每个输入图像是裁剪的单词图像(来自场景图像的剪切文本块)。请求每个图像一个脚本名称。所有输出脚本应该使用以下格式列在单个UTF-8编码的文本文件中,每个单词图像一个脚本:

    [word图像名称],脚本

    评估

    结果与地面实况的评估以下列方式计算:参与者为每个单词图像提供脚本ID,如果结果正确,则递增正确结果的计数。对给定方法的最终评估是这种预测的准确性。这可以通过以下简单定义进行总结:

    设G = {g1,g2 ,. 。。,gi ,. 。。,gm}是基础事实中正确的脚本类的集合,并且T = {t1,t2,.... 。。,ti ,. 。。,tm}是给定方法返回的一组脚本类,其中gi和ti引用相同的原始图像。每个单词的脚本标识被计为正确(一个)如果gi = ti,否则它是假(零),所有m个标识的总和除以m给出该任务的总体准确度。

    任务-3:联合文本检测和脚本识别

    此任务结合了多脚本文本识别所需的所有准备步骤。参与者方法应该将完整的场景图像作为输入,然后找到所有单词的边界框,并根据脚本id找到关于每个单词的信息。

    地面真相格式

    基本事实的格式与任务1中的相同。

    结果格式

    应在单个zip文件中提供联合检测和脚本识别结果。期望每个图像的文本文件。应使用以下命名约定在测试映像ID后面命名该文件:

    res_ [图像名称] .txt 

    在每个文本文件中,应提供检测到的边界框坐标列表(四个角,顺时针),以及检测和脚本类的置信度:

    X1,Y1,X2,Y2,X3,Y3,X4,Y4,信心,脚本

    评估

    此任务的评估是文本框的正确本地化(检测)正确的脚本分类的级联。如果根据任务1的评估标准正确检测到单词边界框,并且正如在任务2中正确识别该正确检测到的单词的脚本,则将该单词的联合检测和脚本识别计为正确。

    任务-4:端到端文本检测和识别

    对于多语言的统一OCR来说,这是一项非常具有挑战性的任务。多语言设置中的端到端场景文本检测和识别任务与其英语对应物一致。给定输入场景图像,目标是定位一组边界框及其对应的转录。

    地面真相格式

    基本事实的格式与任务1中的相同。

    结果格式

    联合检测和识别结果应在单个zip文件中提供。期望每个图像的文本文件。应使用以下命名约定在测试映像ID后面命名该文件:

    res_ [图像名称] .txt 

    在每个文本文件中,应提供检测到的边界框坐标列表(四个角,顺时针),以及检测的转录:

    X1,Y1,X2,Y2,X3,Y3,X4,Y4,信心,转录

    评估

    该任务的评估是文本框的正确定位(检测)  正确识别(单词转录)的级联  。如果根据任务1的评估标准正确检测到单词边界框,并且正确识别该正确检测到的单词的转录(根据编辑距离测量),则将该单词的联合检测和识别计为正确。

    测试集中包含未出现在训练集中的字符的所有单词将被设置为“不关心”,因此无论是否通过您的方法正确检测/识别它们,都不会影响评估,他们根本不计算在内。这意味着您可以根据训练集的词典进行训练。

    展开全文
  • 用于语言检测文本提取的Docker微服务 服务 该服务基于 ,使用进行语言检测,并基于进行文本提取。 这是一个托管在容器,用于拉取: docker pull scotti2scotti/language-service 这是一个默认监听0.0.0.0:5656...
  • 使用检测文本语言。 安装 : npm install retext-language retext-language也可用于 , 和以及和的AMD,CommonJS和globals模块。 用法 var retext = require ( 'retext' ) ; var inspect = require ( 'unist-...
  • 文本为价值很高的检测系统使用的说明文档, 知网万方的设计方案来源,软件开发必需要了解的知识
  • 【NLP】文本语种检测

    2020-06-10 21:52:09
    langid ...特点 ...检测接口 classify rank >>> import langid # classify 输出最可能的语言 >>> langid.classify("I do not speak english") ('en', 0.57133487679900674) >>

    langid

    github源码:https://github.com/saffsd/langid.py

    特点

    • 支持97中语言
    • 滤过速度快
    • 准确率高
    • 不支持中文繁体(香港),中文繁体(台湾)

    检测接口 classify rank

    >>> import langid
    # classify 输出最可能的语言
    >>> langid.classify("I do not speak english")
    ('en', 0.57133487679900674)
    >>> langid.set_languages(['de','fr','it'])
    >>> langid.classify("I do not speak english")
    ('it', 0.99999835791478453)
    >>> langid.set_languages(['en','it'])
    >>> langid.classify("I do not speak english")
    ('en', 0.99176190378750373)
    
    # rank 输出最可能的几种语言
    >>> langid.rank("I do not speak english")
    [('en', -49.99176190378750373), ('pl', -48.99176190378750373), ...)
    

    fasttext

    TODO

    langdetect

    Java包language-detection (03/03/2014版) 的Python接口
    Github源码 https://github.com/Mimino666/langdetect

    特点

    • 支持55种语言
    • 可识别 简体 繁体
    • 个人测试 效率和准确率 不及langid

    检测接口 detect detect_langs

    # detect 输出最可能的语种
    
    >>> from langdetect import detect
    >>> detect("War doesn't show who's right, just who's left.")
    'en'
    >>> detect("Ein, zwei, drei, vier")
    'de'
    
    # detect_langs 输出最可能的几种语言
    >>> from langdetect import detect_langs
    >>> detect_langs("Otec matka syn.")
    [sk:0.572770823327, pl:0.292872522702, cs:0.134356653968]
    

    sklearn实现的语种检测

    csdn看到的基于sklearn模型训练实现的语种检测, 未做测试
    多语种检测

    展开全文
  • 语言检测器 这个golang库提供了基于文本分析和识别语言的功能。 该实现基于以下文件: 基于N-Gram的文本分类威廉·B·卡夫纳(William B.Cavnar)和约翰·特伦克(John M.Trenkle) 密歇根州环境研究所邮政信箱...
  • 语言检测器 概述: 给定文本输入,可以检测其上使用的主要语言 实施细节: 用户在文本字段中写入文本,然后将其作为发布请求提交 后端收到发布请求 使用正则表达式或nltk(自然语言工具包)将文本拆分为标记 对于...
  • ist的matlab代码文字语言检测 检测给定文本的语言。 该软件包尝试通过将排名的3克频率与已知语言的3克频率表相关联来检测文本样本的语言。 它实现了最初由Cavnar&Trenkle(1994)提出的一种技术版本:“基于N-Gram...
  • 一个快速的文本检测程序,python语言编写,代码简单实用
  • 语言检测 Java中的自动语言检测 功能性 这是使用n-gram频率配置文件进行语言检测的直接实现,如以下所述: 威廉·卡夫纳(William B. Cavnar)和约翰·特伦克(John M.Trenkle)。 基于N-Gram的文本分类。 在SDAIR-...
  • 该库试图解决非常短的单词和短语甚至比tweet短的语言检测 利用统计和基于规则的方法 超过70种语言的性能优于Apache Tika , Apache OpenNLP和Optimaize Language Detector 可在每个Java 6+应用程序中以及在Android...
  • 它的任务很简单:它告诉您某些提供的文本数据是用哪种语言编写的。对于自然语言处理应用程序中的语言数据(例如文本分类和拼写检查),这是非常有用的预处理步骤。 例如,其他用例可能包括根据电子邮件的语言将电子...
  • 文本检测算法CTPN

    千次阅读 2020-04-17 21:15:55
    OCR的第一步是文本检测,首先要定位文字的位置,即文字检测,CTPN是文本检测领域经典算法。 论文地址:https://arxiv.org/abs/1609.03605 CTPN是在ECCV 2016提出的一种文字检测算法。CTPN结合CNN与LSTM深度网络,能...

    Detecting Text in Natural Image with Connectionist Text Proposal Network
    OCR的第一步是文本检测,首先要定位文字的位置,即文字检测,CTPN是文本检测领域经典算法。
    论文地址:https://arxiv.org/abs/1609.03605

    CTPN是在ECCV 2016提出的一种文字检测算法。CTPN结合CNN与LSTM深度网络,能有效的检测出复杂场景的横向分布的文字,效果如图1,是目前比较好的文字检测算法。由于CTPN是从Faster RCNN改进而来,本文默认读者熟悉CNN原理和Faster RCNN网络结构。

    主要创新点

    • 文本检测可以当层目标检测来做,Faster RCNN有效果,但是长宽比不好设定,文本长宽变化很大,不好检测,所以将将大的文本框切分为一系列宽度固定的小文本框进行检测,这样在检测过程中只需要对文本的高度进行先验性的设置anchor。
    • 作者认为文本具有时序性,即和阅读习惯一直,从左到右。因此作者加入RNN获取这种语义性。
    • 后处理算法:文本连接算法

    标签构造

    在这里插入图片描述
    如上图所示,给定一个文本的标注框,这里为(x, y, w, h)。作者沿着水平方向进行切分,偏移为16个像素。这样就得到了一系列的文本小片。这里左右标记为红色的小片,作者将他们(落在左右两端50像素以内的小片)作为side refinement时候的标签,用来约束网络对文本起始和终止点的矫正。至于这里取偏移为16的原因,是因为conv5的stride为16,相当于feature map中的一个像素对应标签的16的宽度。当然,这里关于感受野,conv5中的感受野为228x228,因此文本行anchor的高度最大不能超过228,如果超出则网络不能很好的进行预测。

    CTPN网络结构

    在这里插入图片描述

    CTPN与Faster RCNN对比
    如上图所示,作图为RPN,右图为CTPN的网络结构。可以看到,CTPN本身就是RPN,唯一不同的是加入了双向LSTM获取时序方向的信息,使得模型可以序列性的预测文本的小片。当然这里的不同之处主要有以下几点

    原始CTPN只检测横向排列的文字。CTPN结构与Faster R-CNN基本类似,但是加入了LSTM层。假设输入为B张图片

    • 首先VGG提取特征,获得大小为 BxCxHxW的conv5 feature map。
    • 之后在conv5上做 [公式] 的滑动窗口,即每个点都结合周围3x3区域特征获得一个长度为 [公式] 的特征向量。输出 Bx9CxHxW的feature map,该特征显然只有CNN学习到的空间特征。 注意这一步不是卷积,没有计算过程。
    • 再将这个feature map进行Reshape
      Nx9CxHxW ->(NH)xWx9C
    • 然后以 Batch=NH且最大时间长度 T m a x = W T_{max} = W Tmax=W 的数据流输入双向LSTM,学习每一行的序列特征。双向LSTM输出 [公式] ,再经Reshape恢复形状:
      R e s h a p e : N ∗ 9 C ∗ H ∗ W → ( N H ) ∗ W ∗ 9 C Reshape:N\ast 9C\ast H\ast W\rightarrow (NH)\ast W\ast 9C Reshape:N9CHW(NH)W9C
      该特征既包含空间特征,也包含了LSTM学习到的序列特征。
    • 然后经过“FC”卷积层,变为 [公式] 的特征
    • 最后经过类似Faster R-CNN的RPN网络,获得text proposals,如图2-b。

    为何使用双向LSTM?

    文本线构造算法

    在上一个步骤中,已经获得了图7所示的一串或多串text proposal,接下来就要采用文本线构造办法,把这些text proposal连接成一个文本检测框。
    图一三十三岁三十三岁三十三岁

    图1
    为了说明问题,假设某张图有图1所示的2个text proposal,即蓝色和红色2组Anchor,CTPN采用如下算法构造文本线: * 按照水平 [公式] 坐标排序Anchor * 按照规则依次计算每个Anchor [公式] 的 [公式] ,组成 [公式] * 通过 [公式] 建立一个Connect graph,最终获得文本检测框 * 下面详细解释。假设每个Anchor index如绿色数字,同时每个Anchor Softmax score如黑色数字。 文本线构造算法通过如下方式建立每个Anchor [公式] 的 [公式] : 正向寻找: * 沿水平正方向,寻找和 [公式] 水平距离小于50的候选Anchor * 从候选Anchor中,挑出与 [公式] 竖直方向 [公式] 的Anchor * 挑出符合条件2中Softmax score最大的 [公式]

    再反向寻找:

    • 沿水平负方向,寻找和 [公式] 水平距离小于50的候选Anchor
    • 从候选Anchor中,挑出与 [公式] 竖直方向 [公式] 的Anchor
    • 挑出符合条件2中Softmax score最大的 [公式]

    最后对比 [公式] 和 [公式] :
    如果 [公式] ,则这是一个最长连接,那么设置 [公式]
    如果 [公式] ,说明这不是一个最长的连接(即该连接肯定包含在另外一个更长的连接中)。

    训练策略

    由于作者没有给出CTPN原始训练代码,所以此处仅能根据论文分析。
    在这里插入图片描述
    明显可以看出,该Loss分为3个部分:

    • Anchor Softmax loss:该Loss用于监督学习每个Anchor中是否包含文本。 [公式] 表示是否是Groud truth。
    • Anchor y coord regression loss:该Loss用于监督学习每个包含为本的Anchor的Bouding box regression y方向offset,类似于Smooth L1 loss。其中 [公式] 是 [公式] 中判定为有文本的Anchor,或者与Groud truth vertical IoU>0.5。
    • Anchor x coord regression loss:该Loss用于监督学习每个包含文本的Anchor的Bouding box regression x方向offset,与y方向同理。前两个Loss存在的必要性很明确,
      说明一下,在Bounding box regression的训练过程中,其实只需要注意被判定成正的Anchor,不需要去关心杂乱的负Anchor。这与Faster R-CNN类似。

    总结

    • 由于加入LSTM,所以CTPN对水平文字检测效果超级好。
    • 因为Anchor设定的原因,CTPN只能检测横向分布的文字,小幅改进加入水平Anchor即可检测竖直文字。但是由于框架限定,对不规则倾斜文字检测效果非常一般。
    • CTPN加入了双向LSTM学习文字的序列特征,有利于文字检测。但是引入LSTM后,在训练时很容易梯度爆炸,需要小心处理。

    改进思路

    CTPN中的双向LSTM过于笨重,因此我们需要思考如何替代它。发现有人使用conv1x7替代双向LSTM,实验可行。
    CTPN的算法虽然是2016的算法,但是其针对水平长行的检测现在也是工业级的,算法鲁棒。而这个算法也是文字检测领域对RPN的应用之一。CTPN就讲解这么多,具体还需要阅读论文,阅读代码。

    展开全文
  • language_detector:检测文本样本的语言
  • 前言 文字识别分为两个具体步骤:文字的检测和文字的识别,两者缺一不可,尤其是文字检测,是...文本检测不是一件简单的任务,尤其是复杂场景下的文本检测,非常具有挑战性。自然场景下的文本检测有如下几个难点:...

    文章转载自:https://www.cnblogs.com/skyfsm/p/9776611.html

    前言

    文字识别分为两个具体步骤:文字的检测和文字的识别,两者缺一不可,尤其是文字检测,是识别的前提条件,若文字都找不到,那何谈文字识别。今天我们首先来谈一下当今流行的文字检测技术有哪些。

    文本检测不是一件简单的任务,尤其是复杂场景下的文本检测,非常具有挑战性。自然场景下的文本检测有如下几个难点:

    • 文本存在多种分布,文本排布形式多样;
    • 文本存在多个方向;
    • 多种语言混合。
      在这里插入图片描述

    我们先从直观上理解文本检测任务。给定一张图片,我们需要找出这张图里文字出现的所有位置位置,那这个任务其实跟目标检测任务差别不大,即找出每个物体在图片中的位置,并标出该包围框里的物体的类别。而文本检测就是,找出每个文本在图片中出现的位置,因为我们的类别只有2个(有文字和没文字),看起来就像一个简单的单类别目标检测的任务,自然而然我们就会想到用经典的目标检测网络来进行文本检测,比如经典的Faster R-CNN。
    在这里插入图片描述

    Faster RCNN

    Faster RCNN来做文本检测从任务上分析是可行的,毕竟文本说到底还是一个Object。我们回顾一下Faster RCNN做目标检测的关键步骤有哪些:

    1. 基础网络做特征提取;
    2. 特征送入RPN做候选框提取;
    3. 分类层对候选框内物体进行分类,回归层对候选框的(x,y,w,h)进行精细调整。

    Faster RCNN做文本检测感觉问题不大,但是从效果来看,仅套用Faster RCNN来做文本检测效果并不好,原因在于,文本有自己独有的特点,这种通用的文本检测框架并不能很好地解决文本的这些特点。那文本有什么特点呢?我总结如下:

    1. 文本大多数以长矩形形式存在,即长宽比一般较大或较小,这与普通的目标检测中的物体不一样(这些长宽比较接近1)
    2. 普通物体(比如猫)存在明显的闭合边缘轮廓,而文本没有;
    3. 文本中包含多个文字,而文字之间是有间隔的,如果检测做得不好,我们就会把每个字都当成文本行给框出来而非整行作为文本框,这与我们的期望不一样。
      基于以上文本检测的特点,我们必须对Faster RCNN这类通用网络进行改进,设计出适合文本检测的全新网络架构。

    CTPN(2016)

    2016年出了一篇很有名的文本检测的论文:《Detecting Text in Natural Image with
    Connectionist Text Proposal Network》,这个深度神经网络叫做CTPN,直到今天这个网络框架一直是OCR系统中做文本检测的一个常用网络,极大地影响了后面文本检测算法的方向。

    这个算法很有创新,我打算一步一步介绍其闪光点。我们回顾一下Faster RCNN做目标检测的一个缺点就是,没有考虑带文本自身的特点。文本行一般以水平长矩形的形式存在,而且文本行中每个字都有间隔。针对这个特点,CTPN剔除一个新奇的想法,我们可以把文本检测的任务拆分,第一步我们检测文本框中的一部分,判断它是不是一个文本的一部分,当对一幅图里所有小文本框都检测之后,我们就将属于同一个文本框的小文本框合并,合并之后就可以得到一个完整的、大的文本框了,也就完成了文本的检测任务。这个想法真的很有创造性,有点像“分治法”,先检测大物体的一小部分,等所有小部分都检测出来,大物体也就可以检测出来了。
    在这里插入图片描述
    如图所示,左边的图是直接使用Faster RCNN中的RPN来进行候选框提取,可以看出,这种候选框太粗糙了,效果并不好。而右图是利用许多小候选框来合并成一个大文本预测框,可以看出这个算法的效果非常不错,需要说明的是,红色框表示这个小候选框的置信度比较高,而其他颜色的候选框的置信度比较低,我们可以看到,一个大文本的边界都是比较难预测的,那怎么解决这个边界预测不准的问题呢?后面会提到。

    刚提到CTPN的其中一个闪光点,即检测小框代替直接检测大文本框。除了这个新意,CTPN还提出了在文本检测中应加入RNN来进一步提升效果。为什么要用RNN来提升检测效果?文本具有很强的连续字符,其中连续的上下文信息对于做出可靠决策来说很重要。我们知道RNN常用于序列模型,比如事件序列,语言序列等等,那我们CTPN算法中,把一个完整的文本框拆分成多个小文本框集合,其实这也是一个序列模型,可以利用过去或未来的信息来学习和预测,所以同样可以使用RNN模型。而且,在CTPN中,用的还是BiLSTM(双向LSTM),因为一个小文本框,对于它的预测,我们不仅与其左边的小文本框有关系,而且还与其右边的小文本框有关系!这个解释就很有说服力了,如果我们仅仅根据一个文本框的信息区预测该框内含不含有文字其实是很草率的,我们应该多参考这个框的左边和右边的小框的信息后(尤其是与其紧挨着的框)再做预测准确率会大大提升。
    在这里插入图片描述
    如上图所示,如果我们单纯依靠1号框内的信息来直接预测1号框中否存在文字(或者说是不是文本的一部分),其实难度相当大,因为1号框只包含文字的很小一部分。但是如果我们把2号框和3号框的信息都用上,来预测1号框是否存在文字,那么我们就会有比较大的把握来预测1号框确实有文字。我们还可以看看为什么边缘的文本框的置信度会较中间的低呢?个人认为很大一部分原因就在于因为这些框都位于总文本的边缘,没有办法充分利用左右相邻序列的信息做预测(比如位于最左的文本框丢失了其右边的信息)。这就是双向LSTM的作用,把左右两个方向的序列信息都加入到学习的过程中去。
    在这里插入图片描述
    我们已经对CTPN这个算法的总体思路有了一点理解,那关键问题来了,我们怎么把这些小文本框准确地检测出来呢?

    CTPN借助了Faster RCNN中anchor回归机制,使得RPN能有效地用单一尺寸的滑动窗口来检测多尺寸的物体。当然CTPN根据文本检测的特点做了比较多的创新。比如RPN中anchor机制是直接回归预测物体的四个参数(x,y,w,h),但是CTPN采取之回归两个参数(y,h),即anchor的纵向偏移以及该anchor的文本框的高度,因为每个候选框的宽度w已经规定为16个像素,不需要再学习,而x坐标直接使用anchor的x坐标,也不用学习,所以CTPN的思路就是只学习y和h这两个参数来完成小候选框的检测!跟RPN相类似,CTPN中对于每个候选框都使用了K个不同的anchors(k在这里默认是10),但是与RPN不同的是,这里的anchors的width是固定的16个像素,而height的高度范围为11~273(每次对输入图像的height除以0.7,一共K个高度)。当然CTPN中还是保留了RPN大多数的思路,比如还是需要预测候选框的分数score(该候选框有文本和无文本的得分)。

    这么多小尺度候选框怎么才能串联成一个完整的文本行呢?

    文本行构建很简单,通过将那些text/no-text score > 0.7的连续的text proposals相连接即可。文本行的构建如下。首先,为一个proposal Bi定义一个邻居(Bj):Bj−>Bi,其中:

    1. Bj在水平距离上离Bi最近
    2. 该距离小于50 pixels
    3. 它们的垂直重叠(vertical overlap) > 0.7

    另外,如果同时满足Bj−>Bi和Bi−>Bj,会将两个proposals被聚集成一个pair。接着,一个文本行会通过连续将具有相同proposal的pairs来进行连接来构建。

    接下来我们就较为细节地学习一下这个CTPN经典网络。
    在这里插入图片描述
    首先CTPN的基础网络使用了VGG16用于特征提取,在VGG的最后一个卷积层CONV5,CTPN用了3×3的卷积核来对该feature map做卷积,这个CVON5 特征图的尺寸由输入图像来决定,而卷积时的步长却限定为16,感受野被固定为228个像素。卷积后的特征将送入BLSTM继续学习,最后接上一层全连接层FC输出我们要预测的参数:2K个纵向坐标y,2k个分数,k个x的水平偏移量。看到这里大家可能有个疑问,这个x的偏移到底是什么,为什么需要回归这个参数?如果需要X的参数,为什么不在候选框参数回归时直接预测成(x,y,h)三个参数呢,而要多此一举把该参数单独预测?这个X的作用作者提到这也是他们论文的一大亮点,称之为Side-refinement,我理解为文本框边缘优化。我们回顾一下上面提到的一个问题,文本框检测中边缘部分的预测并不准确。那么改咋办,CTPN就是用这个X的偏移量来精修边缘问题。这个X是指文本框在水平方向的左边界和右边界,我们通过回归这个左边界和右边界参数进而可以使得我们对文本框的检测更为精准。在这里想举个例子说明一下回归这个x参数的重要性。

    我们观察下图,第一幅图张我们看到我们有很多小候选框,位于左边的候选框我标记为1、2、3、4号框,1号框和2号框为蓝色,表明得分不高我们不把这两个框合并到大文本框内,对于3号框和4号框那就比较尴尬了,如果取3号框作为文本框的边缘框,那么显然左边边缘留白太多,精准度不够,但如果去掉3号框而使用4号框作为左边缘框,则有些字体区域没有检测出来,同样检测精度不足。这种情况其实非常容易出现,所以CTPN采取了Side-refinement 思路进一步优化边缘位置的预测即引入回归X参数,X参数直接标定了完整文本框的左右边界,做到精确的边界预测。第二幅图中的红色框就是经过Side-refinement后的检测结果,可以看出检测准确率有了很大的提升。 side-refinement确实可以进一步提升位置准确率,在SWT的Multi-Lingual datasets上产生2%的效果提升。
    在这里插入图片描述
    再看多几幅图,体验一下Side-refinement后的效果。
    在这里插入图片描述
    最后总结一下CTPN这个流行的文本检测框架的三个闪光点:

    1. 将文本检测任务转化为一连串小尺度文本框的检测;
    2. 引入RNN提升文本检测效果;
    3. Side-refinement(边界优化)提升文本框边界预测精准度。
      在这里插入图片描述

    当然,CTPN也有一个很明显的缺点:对于非水平的文本的检测效果并不好。CTPN论文中给出的文本检测效果图都是文本位于水平方向的,显然CTPN并没有针对多方向的文本检测有深入的探讨。那对于任意角度的文本检测应该采取什么的算法思路呢?下面的SegLink算法给出了一个新奇的解决方案。

    SegLink(2017)

    CVPR2017的一篇spotlight论文《Detecting Oriented Text in Natural Images by Linking Segments》介绍以一种可以检测任意角度文本的检测算法,我们一般称这个算法为SegLink,这篇论文既融入CTPN小尺度候选框的思路又加入了SSD算法的思路,达到了当时自然场景下文本检测state-of-art的效果。

    现在我想先介绍为什么要针对多方向的文本检测做特定的研究。对于普通目标检测,我们并不需要对其做所谓的多方向目标检测,比如下面这个检测任务,我们直接把单车和狗的位置找出来即可。
    在这里插入图片描述
    但是对于文本检测任务可不一样,文本的特点就是高宽比特别大或小,而且文本通常存在一定的旋转角度,如果我们对于带角度的文本仍然使用目标检测那个思路回归四个参数(x,y,w,h)来指定一个目标的位置的话(如下图红色框),那显然误差太大了,这个检测效果并不是我们所能接受的。作为对比,下图的绿色框的检测效果才是我们的终极目标。那么怎么基于原来经典的目标检测算法做相应的优化以适应这种检测效果的要求呢?
    在这里插入图片描述
    一个最直接的思路就是让模型再学习一个参数θ!这个θ表示文本框的旋转角度,也就是我们最终要回归的参数从原来的(x,y,w,h)变成(x,y,w,h,θ)。SegLink确实也采取了这个思路,除此之外,他还提出了Segment和Linking两个重要概念,这个才是这篇CVPR论文的核心创新点。

    什么是segment?segment从中文上理解为文本行的一部分,这一部分可以是一个字符或文本行的任意一部分。如下图示,黄色框表示一个segment,一个完整的文本行中包含多个segment,每个sgment之间通过link(图中的绿色线)连接组合起来。那么Segment做文本检测的思路其实跟CTPN的思路很像,先检测文本行的一部分,再把他们连接起来构成一个完整文本行。
    在这里插入图片描述
    我们把图片的关键部位放大看看细节:首先每个segment是有一定的重合区域的,然后每两个segment连接的部位是两个segment的中心点。每一个segment和link仅依靠局部图像的纹理信息即可完成检测,而无需整张图像的信息。
    在这里插入图片描述
    接下来我们通过分析SegLink的网络架构进一步理解SegLink如何做到高效的多角度文本检测。下图是SegLink的网络架构,显然这个架构采取了SSD的思路,首先使用VGG16作为backbone进行特征提取,其中VGG16的全连接层(fc6,fc7)替换成卷积层(conv6,conv7),再接卷积层conv8到conv11。值得说明的是,conv4~conv11之间的尺寸依次减少(每一层是前一层的1/2)。这个做法是为了做多尺度下的目标检测,即大的feature map擅长做小物体的检测,而小的feature map则擅长检测大物体。借助多个不同尺度的feature map,从6个feature layer上检测segment和link,我们就可以检测出不同尺寸的文本行了。
    在这里插入图片描述
    观察后面的卷积层可以发现,对不同层的feature map使用3×3的卷积层产生最终的输出(包括segment和link),不同特征层输出的维度是不一样的,因为除了conv4_3层外,其它层存在跨层的link。这里segment是text的带方向bbox信息(它可能是个单词,也可能是几个字符,总之是文本行的部分),link是不同segment的连接信息(文章将其也增加到网络中自动学习)。

    当所有segments都被检测出来后,我们就可以通过融合规则(combining segments),将各个feature map的segment的box信息和link信息进行融合,得到最终的文本行。

    SegLink所使用的目标函数由三个部分构成,是否是text的二类分类的softmax损失,box的smooth L1 regression损失,是否link的二类的softmax损失。λ1和λ2控制权重,最后都设为1。
    在这里插入图片描述
    现在计算一下每个feature map输出的参数有哪些呢?

    • segment的位置信息:(x,y,w,h,θ),一共5个参数
    • 每个segment内的分类分数,即判断框内有字符还是无字符的分数(2分类),共2个参数
    • 同层(within-layer)的每个segment的link的分数,表示该方向有link还是没link(2分类问题),而一个segment有八邻域所以有八个方向,参数一共有2×8=16
    • 相邻层(cross-layer)之间也存在link,同样是该方向有link还是没link(2分类问题),而link的个数是4个,所以参数总数为2×4=8

    下图很清楚地表示出每个feature map输出的参数有多少个,输出参数总数为(2+5+16+8=31)。假设当前的feature map的尺度为(w,h),那么该层卷积后输出为w×h×31。
    在这里插入图片描述
    这里想再谈谈Within-Layer Link和Cross-Layer Link的作用。

    within-layer link表示在同一层feature layer里,每个Segment与8邻域内的segment的连接状况,如下图(a)所示。且每个link有2维,一维是正分,表示两个segment属于同一文本,一维是负分,表示两个segment不属于同一文本。所以,每个predictor输出16(8×2)维向量。
      
    cross-layer link:在不同的feature layer上有可能会检测到同一文本的segments,造成冗余,cross-layer link的提出就是为了解决这个问题。cross-layer link连接了两个相邻feature layer上的segments,如图(b)所示。需要注意的是,由于下采样使后一层为前一层scale的1/2,定义一个segment的cross-layer邻居为前一层4邻域更小的segment,即前一层是后一层的邻居,但后一层不是前一层的邻居,所以conv4_3的feature layer没有cross-layer邻居。图中所示的黄框为当前层的segment,蓝框为上一层更小更细的segment,绿色的线代表cross-layer link有连接,属于同一文本,在后续的combine算法中会将他们融合,即去除了冗余。

    在这里插入图片描述

    读到这里我们已经知道如何获取segment和相应的link了,那接下来要做的就是怎么把这些link和segment合并成一个完整的文本行。先贴一下论文中使用到的合并算法:
    在这里插入图片描述
    看起来真的是头都大,其实思想很简单,我尝试用中文解释一下:

    1. 假设我们有一个集合B,里面有很多相关联的segment待合并;
    2. 每一个segment都有自己的角度θ,那我们求集合B中所有segment角度的平均值θb;
    3. 求一条直线L使得所有segment的中心到这条直线的距离最小,也就是最小二乘法线性回归啦;
    4. 每个segment的中心往直线L做垂直投影;
    5. 从所有投影点中选出相距最远的两个点,记做(xp,yp)和(xq,yq);
    6. 最终合并好的文本框的位置参数记为(xb,yb,wb,hb,θb)那么xb:=1/2(xp+xq,yb:=1/2(yp+yq)
    7. 文本行的宽度wb就是两个最远点的距离(即(xp,yp)和(xq,yq))再加上最远两个点所处的segment的宽度的一半(Wp和Wq)。
    8. 文本行高度hb就是所有segment高度求平均值

    我画了下图辅助理解合并算法,橙色直线是拟合出的最佳直线,红色点表示segment的中心,黄点表示红点在直线上的投影,绿框就是合并后的完整本文框。
    在这里插入图片描述

    这样子我们就求解完一个完整文本框的所有参数,也就完成了segment合并成文本行的任务。

    SegLink算法对于各种角度的文本检测具有很强的鲁棒性。
    在这里插入图片描述

    SegLink论文中并没有提到该算法能不能检测弯曲的文本,从理论上解读,SegLink是可以做到的。比如下图,只是合并算法要做一些改变而已。
    在这里插入图片描述

    EAST(2017)

    对于以上把完整文本行先分割检测再合并的思路,有人提出质疑,觉得这种做法比较麻烦,把文本检测切割成多个阶段来进行,这无疑增大了文本检测精度的损失和时间的消耗,对于文本检测任务上中间处理越多可能效果越差。所以有篇CVPR2017的文章提出,我们有一种方法能优雅且简洁地完成多角度文本检测,这个算法叫做EAST,论文为《EAST: An Efficient and Accurate Scene Text Detector》。

    通过下图我们知道,一个文本检测有多个阶段,就以region proposals系的检测算法为例,他们通常包含候选框提取、候选框过滤、bouding box回归、候选框合并等阶段,EAST的作者认为,一个文本检测算法被拆分成多个阶段其实并没有太多好处,实现真正端到端的文本检测网络才是正确之举。所以EAST的pipeline相当优雅,只分为FCN生成文本行参数阶段和局部感知NMS阶段,网络的简洁是的检测的准确性和速度都有了进一步的提高。

    在这里插入图片描述

    我们从网络架构来理解EAST做文本检测的优势。首先EAST采取了FCN的思路,一开始我以为EAST是一个通过语义分割来解决文本检测的难题,深入阅读后才发现并不是,而只是借助了FCN的架构做特征提取和学习,最终还是一个回归问题,在EAST最后预测出相应的文本行参数。

    EAST网络分为特征提取层+特征融合层+输出层三大部分。

    特征提取层: backbone采取PVANet来做特征提取,接下来送入卷积层,而且后面的卷积层的尺寸依次递减(size变为上一层的一半),而且卷积核的数量依次递增(是前一层的2倍)。抽取不同level的feature map,这样可以得到不同尺度的特征图,目的是解决文本行尺度变换剧烈的问题,size大的层可用于预测小的文本行,size小的层可用于预测大的文本行。

    特征合并层,将抽取的特征进行merge.这里合并的规则采用了U-net的方法,合并规则:从特征提取网络的顶部特征按照相应的规则向下进行合并,这里描述可能不太好理解,具体参见下述的网络结构图。

    网络输出层:网络的最终输出有5大部分,他们分别是:

    • score map:一个参数,表示这个预测框的置信度;
    • text boxes: 4个参数,(x,y,w,h),跟普通目标检测任务的bounding box参数一样,表示一个物体的位置;
    • text rotation angle: 1个参数,表示text boxe的旋转角度;
    • text quadrangle coordinates:8个参数,表示任意四边形的四个顶点坐标,即(x1,y1),(x2,y2),(x3,y3),(x4,y4)。
      在这里插入图片描述
      所以从整体看来,EAST就是借助FCN架构直接回归出文本行的(x,y,w,h,θ)+置信度+四边形的四个坐标!非常简洁!但是看到这里或许会有个问题,为什么要生成四边形的四个坐标呢?(x,y,w,h,θ)这个参数不足以解决文本行定位问题?还真不能,看看下面这个图片。
      在这里插入图片描述
      对于这种带放射变换的文本行(可能还有的是透视变换),呈现出来的形状是平行四边形(黄色虚线为ground true),如果我们以(x,y,w,h,θ)来表示这个文本的位置,就是粉色框所示,显然不合适。所以对于这种场合,直接预测四边形的四个顶点坐标才是正确之举。

    EAST目标函数分两部分,如下,第一部分是分类误差,第二部分是几何误差,文中权衡重要性,λg=1。
    在这里插入图片描述
    Ls称为分类误差函数,采用 class-balanced cross-entropy,这样做可以很实用的处理正负样本不均衡的问题。
    在这里插入图片描述
    其中β=反例样本数量/总样本数量 (balance factor)
    在这里插入图片描述
    Lg为几何误差函数
    在这里插入图片描述
    对于RBOX,采用IoU loss
    在这里插入图片描述
    角度误差则为:
    在这里插入图片描述
    对于QUAD采用smoothed L1 loss
    CQ={x1,y1,x2,y2,x3,y3,x4,y4},NQ*指的是四边形最短边的长度
    在这里插入图片描述
    下面看看EAST文本检测的效果,注意观察一些带放射变换or透视变换的文本行的检测效果。
    在这里插入图片描述
    总结
    文本介绍了我一直关注且实验效果都相当不错的三个经典的文本检测算法,他们都是基于深度学习,可以这么说,现在做文本检测都是深度学习的天下了。当然深度学习流派做文本检测远不止以上几个思路,比如基于语义分割的思路做文本检测的、基于角点检测做文本检测、各种方法混合的文本检测的论文也非常多,同时也取得非常不错的效果。可以说,现在基于深度学习的文本检测论文可谓百花齐放。
    在这里插入图片描述

    展开全文
  • 文本检测之CTPN

    万次阅读 热门讨论 2018-09-10 16:28:54
    文本检测的难点在于文本的长度是不固定,可以是很长的文本,也可以是很短的文本.如果采用通用目标检测的方法,将会面临一个问题:**如何生成好的text proposal**.针对上述问题,作者提出了一个vertical anchor的...
  • 该脚本采用PDF输入,提取文本检测语言,将其翻译为英语,然后将输出打印到文本文件。 控制台输出示例 Input: 汽车是用于运输的轮式车辆。 汽车的大多数定义都说,汽车主要在道路上行驶,可容纳1至8人, 有四个...
  •  第六章:话题检测跟踪技术(3学时)  第七章:文本过滤技术(3学时)  第八章:关联分析技术(1学时)  第九章:文档自动摘要技术(2学时)  第十章:信息抽取(3学时)  第十一章:智能问答(QA...
  • 摘要 本文介绍图像文本识别(OCR)领域的最新技术进展。...然后介绍最近三年来出现的各种文本边框检测模型、文字内容识别模型、端到端图文识别模型。最后介绍图文识别领域的大型公开数据集。 应用概述 OCR...
  • 简单语言检测器 这可用于检测任何输入文本的语言,包括印地语和俄语等非拉丁文字的语言。 这个项目可以很容易地扩展到在同一概念上包含更多的语言。 最后,这是一个非常简单的语言检测器实现。 更复杂的 NLP 可用于...
  • 场景中的文字的检测和识别对我们理解世界很有帮助,它应用在图像搜索、即时翻译、机器人导航、工业自动化等领域。 一个场景文字识别检测示例: 目前,场景文字检测和识别主要存在3个难点: 自然场景中文本多样性和...
  • 除此之外还包含学习笔记(PDF版和GoodNotes5版),DOSBox0.74-3入门教程以及汇编环境搭建教程,功能强大的文本编辑器UE(支持官网更新),教材用到的所有文件以及汇编常用文件,例如masm5.0/debug.exe/link.exe/tc2.0....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 135,852
精华内容 54,340
关键字:

文本语言检测