0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用EAST文本检测器在自然场景下检测文本

DPVg_AI_era 来源:未知 作者:李倩 2018-08-24 08:40 次阅读

众所周知,自然场景下的文本检测是极具挑战性的。本文便使用OpenCV和EAST文本检测器在自然场景下对文本进行了检测,包括图像中的文本检测,以及视频中的文本检测,并对其原理与实现过程做了详尽的描述。

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

本教程的主要目的是教读者利用OpenCV和EAST文本检测器来检测文本。

运行环境:

EAST文本检测器需要OpenCV3.4.2或更高版本,有需要的读者可以先安装OpenCV。

主要内容:

教程第一部分分析为何在自然场景下进行文本检测的挑战性是如此之高。

接下来简要探讨EAST文本检测器,为何使用,算法新在何处,并附上相关论文供读者参考。

最后提供 Python + OpenCV文本检测实现方式,供读者在自己的应用中使用。

为何在自然场景下进行文本检测的挑战性是如此之高

由于光照条件、图片质量以及目标非线性排列等因素的限制,自然场景下的文本检测任务难度较大

受约束的受控环境中的文本检测任务通常可以使用基于启发式的方法来完成,比如利用梯度信息或文本通常被分成段落呈现,并且字符一般都是成直线排列等信息。

但自然场景下文本检测则不同,而且更具挑战性。

由于廉价数码相机和智能手机的普及,我们需要高度关注图像拍摄时的条件。Celine Mancas-Thillou和Bernard Gosselin在其2017年发表的优秀论文《自然场景文本理解》中描述了的自然场景文本检测面对的主要挑战:

图像/传感器噪音:手持式相机的传感器噪音通常要高于传统扫描仪。此外,廉价相机通常会介入原始传感器的像素以产生真实的颜色。

视角:自然场景中的文本存在不平行的观测角度问题,使文本更难以识别。

模糊:不受控制的环境下,文本往往会变模糊,尤其是如果最终用户使用的智能手机的拍摄稳定性不足时,问题就更明显。

照明条件:我们无法对自然场景图像中的照明条件做出任何假设。可能在接近黑暗的条件下,相机上的闪光灯可能会亮起,也可能在艳阳高照的条件下,使整个图像趋于饱和。

分辨率:每台图像捕捉设备都是不同的,可能存在分辨率过低的摄像机拍出的图像。

非纸质对象:大多数(但不是全部)纸张是不反光的。而自然场景中的文字可能是反光的,比如徽标,标志等。

非平面目标:想象文字印在瓶子上的情况,瓶子表面上的文本会扭曲和变形。虽然我们自己仍可以轻松地“检测”并阅读文本,但算法做起来就会很困难。我们需要能够处理这种情况的用例。

处理条件未知:我们不能使用任何先验信息来为算法提供关于文本所在位置的“线索”。

OpenCV’sEAST文本检测器甚至可以识别模糊图片中的文字

EAST深度学习文本检测器

EAST文本检测器全卷积网络结构

EAST是一种基于深度学习的文本探测器,即高效、准确的场景文本检测(Efficient andAccurateSceneText detectionpipeline)。更重要的是,深度学习模型是端对端的,因此可能绕开一般文本识别器用的计算成本高昂的子算法,比如候选对象聚合和词汇分割等。

项目结构

首先使用Tree终端命令来浏览项目结构:

1$tree--dirsfirst 2. 3├──images 4│├──car_wash.png 5│├──lebron_james.jpg 6│└──sign.jpg 7├──frozen_east_text_detection.pb 8├──text_detection.py 9└──text_detection_video.py10111directory,6files

在images/目录下已有三张样图,读者可以自己添加更多图片。

我们使用两个.py文件:

text_detection.py: 检测静态图像中的文本

text_detection_video.py: 检测网络摄像头或输入图像文件中的文本

两个脚本都使用EAST模型 (frozen_east_text_detection.pb)

注意事项

本文中介绍的实例基于OpenCV的官方C++实例,在转换为Python的过程中可能会遇见一些问题。

比如,Python中没有Point2f和RotatedRect函数,所以不能完全再现C++环境下的实现。

其次,NMSBoxes函数不返回Python绑定的任何值,最终导致OpenCV报错。 NMSBoxes函数可以在OpenCV3.4.2中使用,但我无法对其进行详尽的测试。

使用OpenCV实现文本检测器的构建

在开始之前,我想再次指出,您至少需要在系统上安装OpenCV 3.4.2(或OpenCV 4)才能使用OpenCV的EAST文本检测器,因此如果您还没有安装OpenCV 3.4.2或更高版本,请参阅后文的OpenCV安装指南。

接下来,安装或升级你的系统中的imutils。

1$pipinstall--upgradeimutils

此时,系统设置已经完成,打开text_detection.py,输入以下代码:

1#importthenecessarypackages 2fromimutils.object_detectionimportnon_max_suppression 3importnumpyasnp 4importargparse 5importtime 6importcv2 7 8#constructtheargumentparserandparsethearguments 9ap=argparse.ArgumentParser()10ap.add_argument("-i","--image",type=str,11help="pathtoinputimage")12ap.add_argument("-east","--east",type=str,13help="pathtoinputEASTtextdetector")14ap.add_argument("-c","--min-confidence",type=float,default=0.5,15help="minimumprobabilityrequiredtoinspectaregion")16ap.add_argument("-w","--width",type=int,default=320,17help="resizedimagewidth(shouldbemultipleof32)")18ap.add_argument("-e","--height",type=int,default=320,19help="resizedimageheight(shouldbemultipleof32)")20args=vars(ap.parse_args())

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

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

--image:输入图像的路径。

--east:EAST场景文本检测器模型文件路径。

--min-confidence:确定文本的概率阈值。可选,默认值= 0.5。

--width:调整后的图像宽度 - 必须是32的倍数。可选,默认值= 320。

--height:调整后的图像高度 - 必须是32的倍数。可选,默认值= 320。

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

然后加载图像并调整大小:

22#loadtheinputimageandgrabtheimagedimensions23image=cv2.imread(args["image"])24orig=image.copy()25(H,W)=image.shape[:2]2627#setthenewwidthandheightandthendeterminetheratioinchange28#forboththewidthandheight29(newW,newH)=(args["width"],args["height"])30rW=W/float(newW)31rH=H/float(newH)3233#resizetheimageandgrabthenewimagedimensions34image=cv2.resize(image,(newW,newH))35(H,W)=image.shape[:2]

第23和24行加载并复制输入图像。

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

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

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

37#definethetwooutputlayernamesfortheEASTdetectormodelthat38#weareinterested--thefirstistheoutputprobabilitiesandthe39#secondcanbeusedtoderivetheboundingboxcoordinatesoftext40layerNames=[41"feature_fusion/Conv_7/Sigmoid",42"feature_fusion/concat_3"]

我们在40-42行构建了layerNames的表:

第一层是我们的输出sigmoid激活,它给出了包含文本或不包含文本的区域的概率。

第二层是表示图像“几何”的输出要素图。我们使用它来导出输入图像中文本的边界框坐标。

加载OpenCV的EAST文本检测器:

44#loadthepre-trainedEASTtextdetector45print("[INFO]loadingEASTtextdetector...")46net=cv2.dnn.readNet(args["east"])4748#constructablobfromtheimageandthenperformaforwardpassof49#themodeltoobtainthetwooutputlayersets50blob=cv2.dnn.blobFromImage(image,1.0,(W,H),51(123.68,116.78,103.94),swapRB=True,crop=False)52start=time.time()53net.setInput(blob)54(scores,geometry)=net.forward(layerNames)55end=time.time()5657#showtiminginformationontextprediction58print("[INFO]textdetectiontook{:.6f}seconds".format(end-start))

我们使用cv2.dnn.readNet将神经网络加载到内存中,方法是将路径传递给EAST检测器作为第46行的参数。

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

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

通过将layerNames作为参数提供给net.forward,我们指示OpenCV返回我们感兴趣的两个特征映射:

输出几何图用于导出输入图像中文本的边界框坐标

类似地,分数图包含文本的给定区域的概率:

我们需要逐一循环这些值:

60#grabthenumberofrowsandcolumnsfromthescoresvolume,then61#initializeoursetofboundingboxrectanglesandcorresponding62#confidencescores63(numRows,numCols)=scores.shape[2:4]64rects=[]65confidences=[]6667#loopoverthenumberofrows68foryinrange(0,numRows):69#extractthescores(probabilities),followedbythegeometrical70#datausedtoderivepotentialboundingboxcoordinatesthat71#surroundtext72scoresData=scores[0,0,y]73xData0=geometry[0,0,y]74xData1=geometry[0,1,y]75xData2=geometry[0,2,y]76xData3=geometry[0,3,y]77anglesData=geometry[0,4,y]

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

rects:存储文本区域的边界框(x,y)坐标

置信度:存储与每个边界框相关的概率

我们稍后将对这些区域使用non-maximasuppression。

在第68行开始循环。

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

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

79#loopoverthenumberofcolumns 80forxinrange(0,numCols): 81#ifourscoredoesnothavesufficientprobability,ignoreit 82ifscoresData[x]< args["min_confidence"]: 83            continue 84 85        # compute the offset factor as our resulting feature maps will 86        # be 4x smaller than the input image 87        (offsetX, offsetY) = (x * 4.0, y * 4.0) 88 89        # extract the rotation angle for the prediction and then 90        # compute the sin and cosine 91        angle = anglesData[x] 92        cos = np.cos(angle) 93        sin = np.sin(angle) 94 95        # use the geometry volume to derive the width and height of 96        # the bounding box 97        h = xData0[x] + xData2[x] 98        w = xData1[x] + xData3[x] 99100        # compute both the starting and ending (x, y)-coordinates for101        # the text prediction bounding box102        endX = int(offsetX + (cos * xData1[x]) + (sin * xData2[x]))103        endY = int(offsetY - (sin * xData1[x]) + (cos * xData2[x]))104        startX = int(endX - w)105        startY = int(endY - h)106107        # add the bounding box coordinates and probability score to108        # our respective lists109        rects.append((startX, startY, endX, endY))110        confidences.append(scoresData[x])

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

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

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

我已经包含了如何在第91-93行提取角度数据;然而,正如我在前一节中提到的,不能像在C++中那样构造一个旋转的边界框——如果你想要处理这个任务,那么从第91行角度开始将是你的第一步。

第97-105行派生出文本区域的边框坐标。

然后我们分别更新rects和confi数据库列表(第109行和第110行)。

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

112#applynon-maximasuppressiontosuppressweak,overlappingbounding113#boxes114boxes=non_max_suppression(np.array(rects),probs=confidences)115116#loopovertheboundingboxes117for(startX,startY,endX,endY)inboxes:118#scaletheboundingboxcoordinatesbasedontherespective119#ratios120startX=int(startX*rW)121startY=int(startY*rH)122endX=int(endX*rW)123endY=int(endY*rH)124125#drawtheboundingboxontheimage126cv2.rectangle(orig,(startX,startY),(endX,endY),(0,255,0),2)127128#showtheoutputimage129cv2.imshow("TextDetection",orig)130cv2.waitKey(0)

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

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

第117-126行循环遍历边界框,将坐标缩放到原始图像尺寸,并将输出绘制到orig图像。直到按下一个按键为止,原始图像将一直显示(129-130行)。

最后一个实验需要注意的是,我们的两个嵌套for循环用于循环第68-110行上的分数和几何体(geometry volume),这是一个很好的例子,说明你可以利用Cython极大地加快pipeline的速度。我已经用OpenCV和Python演示了Cython在快速优化“for”像素循环中的强大功能。

OpenCV文本检测器结果

在终端可以执行一下命令(注意两个命令行参数):

1$pythontext_detection.py--imageimages/lebron_james.jpg2--eastfrozen_east_text_detection.pb3[INFO]loadingEASTtextdetector...4[INFO]textdetectiontook0.142082seconds

结果应该如下图所示:

文本检测器成功识别出篮球巨星勒布朗·詹姆斯球衣上的文字

詹姆斯身上有三个文本区域。

现在让我们尝试检测业务标志的文本:

1$pythontext_detection.py--imageimages/car_wash.png2--eastfrozen_east_text_detection.pb3[INFO]loadingEASTtextdetector...4[INFO]textdetectiontook0.142295seconds

使用EAST文本检测器很容易识别出路边洗车店的招牌文字

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

1$pythontext_detection.py--imageimages/sign.jpg2--eastfrozen_east_text_detection.pb3[INFO]loadingEASTtextdetector...4[INFO]textdetectiontook0.141675seconds

基于Python和OpenCV的场景文本检测器和EAST文本检测器成功检测出西班牙语的停车指示路牌

该场景中包含一个西班牙的停车标志。“ALTO”可以准确的被OpenCV和EAST识别出来。

如你所知,EAST非常精确,且相对较快,平均每张图片耗时约0.14秒。

OpenCV在视频中进行文本检测

我们可以基于上述工作,进一步使用OpenCV在视频中进行文本检测。

开启text_detection_video.py,然后插入如下代码:

1#importthenecessarypackages2fromimutils.videoimportVideoStream3fromimutils.videoimportFPS4fromimutils.object_detectionimportnon_max_suppression5importnumpyasnp6importargparse7importimutils8importtime9importcv2

首先,我们导入一些包。我们将使用VideoStream访问网络摄像头并用FPS来为这个脚本测试每秒帧数。其他内容与前一节相同。

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

11defdecode_predictions(scores,geometry):12#grabthenumberofrowsandcolumnsfromthescoresvolume,then13#initializeoursetofboundingboxrectanglesandcorresponding14#confidencescores15(numRows,numCols)=scores.shape[2:4]16rects=[]17confidences=[]1819#loopoverthenumberofrows20foryinrange(0,numRows):21#extractthescores(probabilities),followedbythe22#geometricaldatausedtoderivepotentialboundingbox23#coordinatesthatsurroundtext24scoresData=scores[0,0,y]25xData0=geometry[0,0,y]26xData1=geometry[0,1,y]27xData2=geometry[0,2,y]28xData3=geometry[0,3,y]29anglesData=geometry[0,4,y]3031#loopoverthenumberofcolumns32forxinrange(0,numCols):33#ifourscoredoesnothavesufficientprobability,34#ignoreit35ifscoresData[x]< args["min_confidence"]:36                continue3738            # compute the offset factor as our resulting feature39            # maps will be 4x smaller than the input image40            (offsetX, offsetY) = (x * 4.0, y * 4.0)4142            # extract the rotation angle for the prediction and43            # then compute the sin and cosine44            angle = anglesData[x]45            cos = np.cos(angle)46            sin = np.sin(angle)4748            # use the geometry volume to derive the width and height49            # of the bounding box50            h = xData0[x] + xData2[x]51            w = xData1[x] + xData3[x]5253            # compute both the starting and ending (x, y)-coordinates54            # for the text prediction bounding box55            endX = int(offsetX + (cos * xData1[x]) + (sin * xData2[x]))56            endY = int(offsetY - (sin * xData1[x]) + (cos * xData2[x]))57            startX = int(endX - w)58            startY = int(endY - h)5960            # add the bounding box coordinates and probability score61            # to our respective lists62            rects.append((startX, startY, endX, endY))63            confidences.append(scoresData[x])6465    # return a tuple of the bounding boxes and associated confidences66    return (rects, confidences)

在第11行,我们定义decode_prediction函数。该函数用于提取:

文本区域的边界框坐标;

文本区域检测的概率。

这个专用函数将使代码更易于阅读和管理。

让我们来解析命令行参数:

68#constructtheargumentparserandparsethearguments69ap=argparse.ArgumentParser()70ap.add_argument("-east","--east",type=str,required=True,71help="pathtoinputEASTtextdetector")72ap.add_argument("-v","--video",type=str,73help="pathtooptinalinputvideofile")74ap.add_argument("-c","--min-confidence",type=float,default=0.5,75help="minimumprobabilityrequiredtoinspectaregion")76ap.add_argument("-w","--width",type=int,default=320,77help="resizedimagewidth(shouldbemultipleof32)")78ap.add_argument("-e","--height",type=int,default=320,79help="resizedimageheight(shouldbemultipleof32)")80args=vars(ap.parse_args())

69-80行代码中命令行参数解析:

--east:EAST场景文本检测器模型文件路径。

--video:输入视频的路径(可选)。如果提供了视频路径,那么网络摄像头将不会被使用。

--Min-confidence:确定文本的概率阈值(可选)。default=0.5。

--width:调整图像宽度(必须是32的倍数,可选)。default=320。

--Height:调整图像高度(必须是32的倍数,可选)。default=320。

与上一节中仅使用图像的脚本(就命令行参数而言)的不同之处在于,用视频替换了图像参数。

接下里,我们将进行重要的初始化工作:

82#initializetheoriginalframedimensions,newframedimensions,83#andratiobetweenthedimensions84(W,H)=(None,None)85(newW,newH)=(args["width"],args["height"])86(rW,rH)=(None,None)8788#definethetwooutputlayernamesfortheEASTdetectormodelthat89#weareinterested--thefirstistheoutputprobabilitiesandthe90#secondcanbeusedtoderivetheboundingboxcoordinatesoftext91layerNames=[92"feature_fusion/Conv_7/Sigmoid",93"feature_fusion/concat_3"]9495#loadthepre-trainedEASTtextdetector96print("[INFO]loadingEASTtextdetector...")97net=cv2.dnn.readNet(args["east"])

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

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

下面的代码设置了我们的视频流和每秒帧数计数器:

99#ifavideopathwasnotsupplied,grabthereferencetothewebcam100ifnotargs.get("video",False):101print("[INFO]startingvideostream...")102vs=VideoStream(src=0).start()103time.sleep(1.0)104105#otherwise,grabareferencetothevideofile106else:107vs=cv2.VideoCapture(args["video"])108109#starttheFPSthroughputestimator110fps=FPS().start()

我们的视频流设置为:

一个摄像头(100-103行)

或一个视频文件(106-107行)

我们在第110行初始化每秒帧计数器,并开始循环传入帧:

112#loopoverframesfromthevideostream113whileTrue:114#grabthecurrentframe,thenhandleifweareusinga115#VideoStreamorVideoCaptureobject116frame=vs.read()117frame=frame[1]ifargs.get("video",False)elseframe118119#checktoseeifwehavereachedtheendofthestream120ifframeisNone:121break122123#resizetheframe,maintainingtheaspectratio124frame=imutils.resize(frame,width=1000)125orig=frame.copy()126127#ifourframedimensionsareNone,westillneedtocomputethe128#ratioofoldframedimensionstonewframedimensions129ifWisNoneorHisNone:130(H,W)=frame.shape[:2]131rW=W/float(newW)132rH=H/float(newH)133134#resizetheframe,thistimeignoringaspectratio135frame=cv2.resize(frame,(newW,newH))

我们从113行开始在视频/摄像头框架上进行循环。

我们的框架调整了大小,保持了纵横比(第124行)。从129-132行中获取维度并计算比例。然后我们再次调整帧的大小(必须是32的倍数),这一次忽略了长宽比,因为我们已经存储了用于安全维护(safe keeping)的比率(第135行)。

推理和绘制文本区域边框发生在以下几行:

137#constructablobfromtheframeandthenperformaforwardpass138#ofthemodeltoobtainthetwooutputlayersets139blob=cv2.dnn.blobFromImage(frame,1.0,(newW,newH),140(123.68,116.78,103.94),swapRB=True,crop=False)141net.setInput(blob)142(scores,geometry)=net.forward(layerNames)143144#decodethepredictions,thenapplynon-maximasuppressionto145#suppressweak,overlappingboundingboxes146(rects,confidences)=decode_predictions(scores,geometry)147boxes=non_max_suppression(np.array(rects),probs=confidences)148149#loopovertheboundingboxes150for(startX,startY,endX,endY)inboxes:151#scaletheboundingboxcoordinatesbasedontherespective152#ratios153startX=int(startX*rW)154startY=int(startY*rH)155endX=int(endX*rW)156endY=int(endY*rH)157158#drawtheboundingboxontheframe159cv2.rectangle(orig,(startX,startY),(endX,endY),(0,255,0),2)

在这一代码块中:

创建一个blob并通过网络传递文本区域(第139-142行);

解码预测并应用NMS(第146行和第147行)。使用之前在这个脚本中定义的decode_forecasts函数和imutils non_max_suppression函数。

循环包围框并在框架上绘制它们(150-159行)。这涉及到按前面收集的比率缩放方框。

而后我们将关闭框架处理循环以及脚本本身:

161#updatetheFPScounter162fps.update()163164#showtheoutputframe165cv2.imshow("TextDetection",orig)166key=cv2.waitKey(1)&0xFF167168#ifthe`q`keywaspressed,breakfromtheloop169ifkey==ord("q"):170break171172#stopthetimeranddisplayFPSinformation173fps.stop()174print("[INFO]elaspedtime:{:.2f}".format(fps.elapsed()))175print("[INFO]approx.FPS:{:.2f}".format(fps.fps()))176177#ifweareusingawebcam,releasethepointer178ifnotargs.get("video",False):179vs.stop()180181#otherwise,releasethefilepointer182else:183vs.release()184185#closeallwindows186cv2.destroyAllWindows()

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

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

视频文本检测结果

要使用OpenCV对视频进行文本检测,请务必点击本文底部“下载内容”链接获取相应资源。

而后,打开终端并执行以下命令(将会开启摄像头,因为通过命令行参数不提供- -video):

1$pythontext_detection_video.py--eastfrozen_east_text_detection.pb2[INFO]loadingEASTtextdetector...3[INFO]startingvideostream...4[INFO]elaspedtime:59.765[INFO]approx.FPS:8.85

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 检测器
    +关注

    关注

    1

    文章

    806

    浏览量

    47237
  • EAST
    +关注

    关注

    0

    文章

    21

    浏览量

    9473
  • 深度学习
    +关注

    关注

    73

    文章

    5200

    浏览量

    119803

原文标题:10分钟上手,OpenCV自然场景文本检测(Python代码+实现)

文章出处:【微信号:AI_era,微信公众号:新智元】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    文本分类的原理是什么?#硬声创作季

    文本
    电子学习
    发布于 :2022年11月20日 21:09:28

    labview 和LCR检测器

    有哪位高手用LABVIEW控制LCR检测器,测定电阻和电容关系之类的吗?我用的LCR检测器是ZM2371,不知道有没有人用过相同的?或者做过类似实验的,请指点一吧~ {:16:}
    发表于 09-12 14:35

    耐用的破损玻璃检测器

    `描述该参考设计介绍了简单且稳定可靠的玻璃破裂检测器设计,该设计采用 MSP430F2274 且开发用于低功耗条件运行,因此可延长电池使用寿命。这种简单的设计算法是以典型玻璃破裂信号的频谱
    发表于 05-06 11:24

    ECD检测器的原理是什么?

    ECD的发现是一系列射线电离检测器发展的结果。1952 年首次出现了 β-射线横截面电离检测器;1958 年 Lovelock 提出 β-射线氩电离检测器
    发表于 10-16 09:01

    电流检测器分类和选型

    本帖最后由 uyuway 于 2021-2-19 22:34 编辑 文章介绍了电流检测器原理、分类和选型。包括交流电流检测器、直流电流检测器等。分析了电流检测器的精细分类,包括毫
    发表于 02-19 22:30

    场强突变检测器的性能很优秀吗?

    文本介绍的场强突变检测器其性能优于许多其他同类的探测仪。
    发表于 04-15 06:34

    【KV260视觉入门套件试用体验】七、VITis AI字符和文本检测(OCR&amp;Textmountain)

    技术,包括传统文档图像识别与场景文字识别技术。 计算机视觉领域,文本检测是其重要的一个子任务。文本
    发表于 09-26 16:31

    新的文本隐写分析方法

    通过对自然文本的建模和特征统计发现,在自然文本中,文本单词平均长度与该文本词汇表单词的平均长度有
    发表于 04-11 09:39 16次下载

    基于词组学习的视频文本检测方法

    提出一种以词组作为模式识别对象的中英文视频文本检测算法,其根据视频中文本的笔画结构特点和聚集特性构造一个18维的特征向量,利用支持向量机将视频帧分为文本和非
    发表于 04-18 09:51 27次下载

    检测器,光检测器是什么?

    检测器,光检测器是什么?  光信号经过光纤传输到达接收端后,在接收端有一个接收光信号的元件。但是由于目前我们对光的认
    发表于 02-27 17:44 962次阅读

    检测一段文本是否为全中文

    易语言是一门以中文作为程序代码编程语言学习例程:易语言-检测一段文本是否为全中文
    发表于 06-06 17:01 4次下载

    一篇包罗万象的场景文本检测算法综述

    提到文本检测识别,我们会联想到的一个词就是 OCR,OCR 是光学字符识别 Optical Character Recognition的简称,是指对文本资料的图像文件进行分析识别处理,获取文字的过程 [19]。
    的头像 发表于 08-21 14:18 5596次阅读

    一篇包罗万象的场景文本检测算法综述

    提到文本检测识别,我们会联想到的一个词就是 OCR,OCR 是光学字符识别 Optical Character Recognition的简称,是指对文本资料的图像文件进行分析识别处理,获取文字的过程 [19]。
    的头像 发表于 04-15 14:52 3329次阅读
    一篇包罗万象的<b class='flag-5'>场景</b><b class='flag-5'>文本</b><b class='flag-5'>检测</b>算法综述

    基于注意力机制的复杂场景文本检测方法

    传统的文本检测方法大多采用自下而上的流程,它们通常从低级语义字符或笔画检测开始,然后进行非文本组件过滤、文本行构建和
    发表于 05-18 15:14 5次下载

    什么是过零检测器 过零检测器的原理

    过零检测器检测输入信号过零值或零电压电平的次数。零检测器基本上是一个比较器电路,将输入的正弦信号或正弦波信号与零电压电平进行比较。
    的头像 发表于 03-24 12:46 2051次阅读