摘要:的文本檢測(cè)器是一種基于新穎架構(gòu)和訓(xùn)練模式的深度學(xué)習(xí)模型。深度學(xué)習(xí)文本檢測(cè)器圖文本檢測(cè)全卷積網(wǎng)絡(luò)的結(jié)構(gòu)等人的圖。隨著和的發(fā)布,我們現(xiàn)在可以使用一種名為的基于深度學(xué)習(xí)的文本檢測(cè)器,它基于等人的年論文一種高效精確的場(chǎng)景文本檢測(cè)器。
by Adrian Rosebrock on August 20, 2018 in Deep Learning, Optical Character Recognition (OCR), Tutorials
點(diǎn)擊這里下載這篇文章的源代碼
在本教程中,您將學(xué)習(xí)如何使用EAST文本檢測(cè)器使用OpenCV檢測(cè)自然場(chǎng)景圖像中的文本。
OpenCV的EAST文本檢測(cè)器是一種基于新穎架構(gòu)和訓(xùn)練模式的深度學(xué)習(xí)模型。它能夠(1)在720p圖像上以13 FPS接近實(shí)時(shí)運(yùn)行,并且(2)獲得最先進(jìn)的文本檢測(cè)精度。
在本教程的其余部分,您將學(xué)習(xí)如何使用OpenCV的EAST檢測(cè)器自動(dòng)檢測(cè)圖像和視頻流中的文本。
在本教程中,您將學(xué)習(xí)如何使用EAST文本檢測(cè)器使用OpenCV檢測(cè)圖像中的文本。
EAST文本檢測(cè)器要求我們?cè)谖覀兊南到y(tǒng)上運(yùn)行OpenCV 3.4.2或OpenCV 4 - 如果您還沒有安裝OpenCV 3.4.2或更高版本,請(qǐng)參閱我的OpenCV安裝指南并按照各自的操作系統(tǒng)進(jìn)行操作。
在今天的教程的第一部分中,我將討論為什么在自然場(chǎng)景圖像中檢測(cè)文本會(huì)如此具有挑戰(zhàn)性。
從那里我將簡要討論EAST文本檢測(cè)器,我們?yōu)槭裁词褂盟?,以及使算法如此新穎的原因 - 我還將包含原始論文的鏈接,以便您可以閱讀詳細(xì)信息,如果您如此傾向。
最后,我將提供我的Python + OpenCV文本檢測(cè)實(shí)現(xiàn),以便您可以開始在自己的應(yīng)用程序中應(yīng)用文本檢測(cè)。
為什么自然場(chǎng)景文本檢測(cè)如此具有挑戰(zhàn)性
圖1:自然場(chǎng)景圖像的示例,其中文本檢測(cè)由于光照條件,圖像質(zhì)量和非平面物體而具有挑戰(zhàn)性(Mancas-Thillou和Gosselin的圖1)。
在受約束的受控環(huán)境中檢測(cè)文本通??梢酝ㄟ^使用基于啟發(fā)式的方法來完成,例如利用梯度信息或者文本通常被分組成段落并且字符出現(xiàn)在直線上的事實(shí)。在我之前關(guān)于檢測(cè)護(hù)照?qǐng)D像中的機(jī)器可讀區(qū)域的博客文章中可以看到這種基于啟發(fā)式的文本檢測(cè)器的示例。
自然場(chǎng)景文本檢測(cè)雖然不同 - 而且更具挑戰(zhàn)性。
由于廉價(jià)數(shù)碼相機(jī)的普及,更不用說幾乎每部智能手機(jī)現(xiàn)在都有攝像頭這一事實(shí),我們需要高度關(guān)注拍攝圖像的條件 - 此外,我們能做什么和不能做什么假設(shè)。我已經(jīng)包含了Celine Mancas-Thillou和Bernard Gosselin在2017年優(yōu)秀論文“自然場(chǎng)景文本理解”中描述的自然場(chǎng)景文本檢測(cè)挑戰(zhàn)的總結(jié)版本:
.圖像/傳感器噪聲:手持式攝像機(jī)的傳感器噪聲通常高于傳統(tǒng)掃描儀的噪聲。此外,低價(jià)相機(jī)通常會(huì)插入原始傳感器的像素以產(chǎn)生真實(shí)的顏色。
.視角:自然場(chǎng)景文本自然可以具有與文本不平行的視角,使文本更難識(shí)別。
.模糊:不受控制的環(huán)境往往會(huì)模糊,特別是如果最終用戶使用的智能手機(jī)沒有某種形式的穩(wěn)定性。
.照明條件:我們無法對(duì)自然場(chǎng)景圖像中的照明條件做出任何假設(shè)。它可能接近黑暗,相機(jī)上的閃光燈可能會(huì)亮起,或者太陽可能會(huì)發(fā)出明亮的光線,使整個(gè)圖像飽和。
.分辨率:并非所有攝像機(jī)都是相同的 - 我們可能在處理分辨率低于標(biāo)準(zhǔn)的相機(jī)。
.非紙質(zhì)對(duì)象:大多數(shù)(但不是全部)紙張都不是反光的(至少在您嘗試掃描的紙張環(huán)境中)。自然場(chǎng)景中的文字可能是反光的,包括徽標(biāo),標(biāo)志等。
.非平面物體:考慮當(dāng)您將文本環(huán)繞在瓶子周圍時(shí)會(huì)發(fā)生什么 - 表面上的文本變得扭曲和變形。雖然人類仍然可以輕松地“檢測(cè)”并閱讀文本,但我們的算法會(huì)很困難。我們需要能夠處理這樣的用例。
.未知布局:我們不能使用任何先驗(yàn)信息來為我們的算法提供關(guān)于文本所在位置的“線索”。
正如我們將要了解的那樣,OpenCV的EAST文本檢測(cè)器實(shí)現(xiàn)非常強(qiáng)大,即使文本模糊,反射或部分模糊,也能夠?qū)ξ谋具M(jìn)行本地化:
圖2:OpenCV的EAST場(chǎng)景文本檢測(cè)器即使在模糊和模糊的圖像中也能檢測(cè)到。
EAST深度學(xué)習(xí)文本檢測(cè)器
圖3:EAST文本檢測(cè)全卷積網(wǎng)絡(luò)的結(jié)構(gòu)(Zhou等人的圖3)。
隨著OpenCV 3.4.2和OpenCV 4的發(fā)布,我們現(xiàn)在可以使用一種名為EAST的基于深度學(xué)習(xí)的文本檢測(cè)器,它基于Zhou等人的2017年論文“EAST:一種高效精確的場(chǎng)景文本檢測(cè)器”。
我們將算法稱為“EAST”,因?yàn)樗牵焊咝覝?zhǔn)確的場(chǎng)景文本檢測(cè)管道。
據(jù)作者說,EAST管道能夠在720p圖像上以任意方向預(yù)測(cè)文本的單詞和行,并且能夠以13 FPS運(yùn)行。
也許最重要的是,由于深度學(xué)習(xí)模型是端到端的,因此可以回避其他文本檢測(cè)器通常應(yīng)用的計(jì)算上昂貴的子算法,包括候選聚合和字分區(qū)。
為了構(gòu)建和訓(xùn)練這樣一種深度學(xué)習(xí)模型,EAST方法采用了新穎,精心設(shè)計(jì)的損失函數(shù)。
有關(guān)EAST的更多詳細(xì)信息,包括架構(gòu)設(shè)計(jì)和培訓(xùn)方法,請(qǐng)務(wù)必參考作者的出版物。
項(xiàng)目結(jié)構(gòu)
首先,請(qǐng)?jiān)L問“下載”部分,確保將源代碼+圖像抓取到今天的帖子。從那里,只需使用tree terminal命令查看項(xiàng)目結(jié)構(gòu):
$ tree --dirsfirst . ├── images │ ├── car_wash.png │ ├── lebron_james.jpg │ └── sign.jpg ├── frozen_east_text_detection.pb ├── text_detection.py └── text_detection_video.py 1 directory, 6 files
請(qǐng)注意,我在images /目錄中提供了三張示例圖片。您可能希望添加自己使用智能手機(jī)收集的圖像或在線查找的圖像。
我們今天將審查兩個(gè).py文件:
text_detection.py:檢測(cè)靜態(tài)圖像中的文本。
text_detection_video.py:通過網(wǎng)絡(luò)攝像頭或輸入視頻文件檢測(cè)文本。
這兩個(gè)腳本都使用了序列化的EAST模型(frozen_east_text_detection.pb),以便在“下載”中提供。
實(shí)施說明
我今天包含的文本檢測(cè)實(shí)現(xiàn)基于OpenCV的官方C ++示例;但是,我必須承認(rèn)在將其轉(zhuǎn)換為Python時(shí)遇到了一些麻煩。
首先,Python中沒有Point2f和RotatedRect函數(shù),因此,我無法100%模仿C ++實(shí)現(xiàn)。 C ++實(shí)現(xiàn)可以生成旋轉(zhuǎn)的邊界框,但不幸的是,我今天與你分享的那個(gè)不能。
其次,NMSBoxes函數(shù)不返回Python綁定的任何值(至少對(duì)于我的OpenCV 4預(yù)發(fā)布安裝),最終導(dǎo)致OpenCV拋出錯(cuò)誤。 NMSBoxes函數(shù)可以在OpenCV 3.4.2中工作,但我無法對(duì)其進(jìn)行詳盡的測(cè)試。
我解決了這個(gè)問題,我在imutils中使用我自己的非最大值抑制實(shí)現(xiàn),但同樣,我不相信這兩個(gè)是100%可互換的,因?yàn)榭雌饋鞱MSBoxes接受其他參數(shù)。
鑒于這一切,我盡力使用我的工作功能和資源為您提供最好的OpenCV文本檢測(cè)實(shí)現(xiàn)。如果您對(duì)方法有任何改進(jìn),請(qǐng)隨時(shí)在下面的評(píng)論中分享。
使用OpenCV實(shí)現(xiàn)我們的文本檢測(cè)器
在我們開始之前,我想指出您至少需要在系統(tǒng)上安裝OpenCV 3.4.2(或OpenCV 4)才能使用OpenCV的EAST文本檢測(cè)器,因此如果您尚未安裝OpenCV 3.4.2或更高版本在您的系統(tǒng)上,請(qǐng)參閱我的OpenCV安裝指南。
接下來,確保您的系統(tǒng)上還安裝/升級(jí)了imutils:
pip install --upgrade imutils
此時(shí)您的系統(tǒng)已配置好,因此打開text_detection.py并插入以下代碼:
首先,我們?cè)诘?-6行導(dǎo)入我們所需的包和模塊。值得注意的是,我們從imutils.object_detection導(dǎo)入NumPy,OpenCV和我的non_max_suppression實(shí)現(xiàn)。
然后我們繼續(xù)解析第9-20行的五個(gè)命令行參數(shù):
--image:輸入圖像的路徑。
--east:EAST場(chǎng)景文本檢測(cè)器模型文件路徑。
--min-confidence:確定文本的概率閾值??蛇x,默認(rèn)值= 0.5。
--width:調(diào)整后的圖像寬度 - 必須是32的倍數(shù)。可選,默認(rèn)值= 320。
--height:調(diào)整后的圖像高度 - 必須是32的倍數(shù)??蛇x,默認(rèn)值= 320。
重要提示:EAST文本要求輸入圖像尺寸為32的倍數(shù),因此如果您選擇調(diào)整--width和--height值,請(qǐng)確保它們是32的倍數(shù)!
從那里,讓我們加載我們的圖像并調(diào)整它的大?。?/p>
在第23和24行,我們加載并復(fù)制輸入圖像。
從那里,第30行和第31行確定原始圖像尺寸與新圖像尺寸的比率(基于為--width和--height提供的命令行參數(shù))。
然后我們調(diào)整圖像大小,忽略縱橫比(第34行)。
為了使用OpenCV和EAST深度學(xué)習(xí)模型執(zhí)行文本檢測(cè),我們需要提取兩層的輸出特征映射:
我們?cè)?0-42行構(gòu)建一個(gè)layerNames列表:
第一層是我們的輸出sigmoid激活,它給出了包含文本或不包含文本的區(qū)域的概率。
第二層是表示圖像“幾何”的輸出要素圖 - 我們將能夠使用此幾何來導(dǎo)出輸入圖像中文本的邊界框坐標(biāo)
讓我們加載OpenCV的EAST文本檢測(cè)器:
我們使用cv2.dnn.readNet將神經(jīng)網(wǎng)絡(luò)加載到內(nèi)存中,方法是將路徑傳遞給EAST檢測(cè)器(包含在我們的命令行args字典中)作為第46行的參數(shù)。
然后我們通過將其轉(zhuǎn)換為第50行和第51行的blob來準(zhǔn)備我們的圖像。要了解有關(guān)此步驟的更多信息,請(qǐng)參閱深度學(xué)習(xí):OpenCV的blobFromImage如何工作。
要預(yù)測(cè)文本,我們可以簡單地將blob設(shè)置為輸入并調(diào)用net.forward(第53和54行)。這些行被抓取時(shí)間戳包圍,以便我們可以在第58行打印經(jīng)過的時(shí)間。
通過將layerNames作為參數(shù)提供給net.forward,我們正在指示OpenCV返回我們感興趣的兩個(gè)特征映射:
輸出幾何圖用于導(dǎo)出輸入圖像中文本的邊界框坐標(biāo)
類似地,分?jǐn)?shù)圖包含包含文本的給定區(qū)域的概率
我們需要逐個(gè)遍歷每個(gè)值:
我們首先抓住得分量的維度(第63行),然后初始化兩個(gè)列表:
rects:存儲(chǔ)文本區(qū)域的邊界框(x,y) - 坐標(biāo)
置信度:存儲(chǔ)與rects中每個(gè)邊界框關(guān)聯(lián)的概率
我們稍后將對(duì)這些區(qū)域應(yīng)用非最大值抑制。
在第68行開始循環(huán)。
第72-77行提取當(dāng)前行的分?jǐn)?shù)和幾何數(shù)據(jù)y。
接下來,我們遍歷當(dāng)前所選行的每個(gè)列索引:
對(duì)于每一行,我們開始循環(huán)第80行的列。
我們需要通過忽略不具有足夠高概率的區(qū)域來過濾掉弱文本檢測(cè)(第82和83行)。
當(dāng)文本通過網(wǎng)絡(luò)時(shí),EAST文本檢測(cè)器自然地減小了體積大小 - 我們的體積大小實(shí)際上比輸入圖像小4倍,所以我們乘以4使坐標(biāo)回到原始圖像的方向。
我已經(jīng)介紹了如何在第91-93行提取角度數(shù)據(jù);但是,正如我在上一節(jié)中所提到的,我無法像在C ++實(shí)現(xiàn)中那樣構(gòu)建一個(gè)旋轉(zhuǎn)的邊界框 - 如果你想要處理任務(wù),從第91行的角度開始將是你的第一個(gè)步。
從那里,第97-105行導(dǎo)出文本區(qū)域的邊界框坐標(biāo)。
然后,我們分別更新我們的rects和confidences列表(第109和110行)。
我們差不多完成了!
最后一步是將非最大值抑制應(yīng)用于我們的邊界框以抑制弱重疊邊界框,然后顯示結(jié)果文本預(yù)測(cè):
正如我在上一節(jié)中提到的,我無法在我的OpenCV 4安裝(cv2.dnn.NMSBoxes)中使用非最大值抑制,因?yàn)镻ython綁定沒有返回值,最終導(dǎo)致OpenCV錯(cuò)誤輸出。我無法完全在OpenCV 3.4.2中進(jìn)行測(cè)試,因此它可以在v3.4.2中運(yùn)行。
相反,我使用了imutils包中提供的非最大值抑制實(shí)現(xiàn)(第114行)。結(jié)果仍然很好;但是,我無法將輸出與NMSBoxes函數(shù)進(jìn)行比較,看看它們是否相同。
第117-126行環(huán)繞我們的邊界框,將坐標(biāo)縮放回原始圖像尺寸,并將輸出繪制到我們的原始圖像。顯示原始圖像,直到按下一個(gè)鍵(第129和130行)。
作為最后的實(shí)現(xiàn)說明,我想提一下,我們的兩個(gè)嵌套for循環(huán)用于循環(huán)第68-110行的分?jǐn)?shù)和幾何體積,這將是一個(gè)很好的例子,你可以利用Cython來大大加速你的管道。我已經(jīng)展示了Cython在Fast中的強(qiáng)大功能,使用OpenCV和Python優(yōu)化了"for"像素循環(huán)。
OpenCV文本檢測(cè)結(jié)果
你準(zhǔn)備好對(duì)圖像應(yīng)用文本檢測(cè)了嗎?
首先抓住此博客文章的“下載”并解壓縮文件。
從那里,您可以在終端中執(zhí)行以下命令(記下兩個(gè)命令行參數(shù)):
$ python text_detection.py --image images/lebron_james.jpg --east frozen_east_text_detection.pb [INFO] loading EAST text detector... [INFO] text detection took 0.142082 seconds
您的結(jié)果應(yīng)類似于以下圖像:
圖4:著名的籃球運(yùn)動(dòng)員,Lebron James的球衣文字通過OpenCV和EAST文本檢測(cè)成功識(shí)別。
勒布朗詹姆斯確定了三個(gè)文本區(qū)域。
現(xiàn)在讓我們嘗試檢測(cè)商業(yè)標(biāo)志的文字:
$ python text_detection.py --image images/car_wash.png --east frozen_east_text_detection.pb [INFO] loading EAST text detector... [INFO] text detection took 0.142295 seconds
圖5:在洗車站的這個(gè)自然場(chǎng)景中使用EAST和Python以及OpenCV可以輕松識(shí)別文本。
最后,我們將嘗試一個(gè)路標(biāo):
$ python text_detection.py --image images/sign.jpg --east frozen_east_text_detection.pb [INFO] loading EAST text detector... [INFO] text detection took 0.141675 seconds
圖6:使用Python + OpenCV進(jìn)行場(chǎng)景文本檢測(cè),EAST文本檢測(cè)器成功檢測(cè)到此西班牙語停止標(biāo)志上的文本。
此場(chǎng)景包含西班牙停車標(biāo)志。 OpenCV和EAST正確檢測(cè)到“ALTO”這個(gè)詞。
正如您所知,EAST非常準(zhǔn)確且相對(duì)較快,每張圖像的平均時(shí)間約為0.14秒。
使用OpenCV在視頻中進(jìn)行文本檢測(cè)
現(xiàn)在我們已經(jīng)看到了如何檢測(cè)圖像中的文本,讓我們繼續(xù)使用OpenCV檢測(cè)視頻中的文本。
這個(gè)解釋非常簡短;有關(guān)詳細(xì)信息,請(qǐng)參閱上一節(jié)。
打開text_detection_video.py并插入以下代碼:
# import the necessary packages from imutils.video import VideoStream from imutils.video import FPS from imutils.object_detection import non_max_suppression import numpy as np import argparse import imutils import time import cv2
我們首先導(dǎo)入我們的包。我們將使用VideoStream訪問網(wǎng)絡(luò)攝像頭和FPS以對(duì)此腳本的每秒幀數(shù)進(jìn)行基準(zhǔn)測(cè)試。其他所有內(nèi)容與上一節(jié)中的相同。
為方便起見,讓我們定義一個(gè)新函數(shù)來解碼我們的預(yù)測(cè)函數(shù) - 它將被重用于每個(gè)幀并使我們的循環(huán)更清晰
def decode_predictions(scores, geometry): # grab the number of rows and columns from the scores volume, then # initialize our set of bounding box rectangles and corresponding # confidence scores (numRows, numCols) = scores.shape[2:4] rects = [] confidences = [] # loop over the number of rows for y in range(0, numRows): # extract the scores (probabilities), followed by the # geometrical data used to derive potential bounding box # coordinates that surround text scoresData = scores[0, 0, y] xData0 = geometry[0, 0, y] xData1 = geometry[0, 1, y] xData2 = geometry[0, 2, y] xData3 = geometry[0, 3, y] anglesData = geometry[0, 4, y] # loop over the number of columns for x in range(0, numCols): # if our score does not have sufficient probability, # ignore it if scoresData[x] < args["min_confidence"]: continue # compute the offset factor as our resulting feature # maps will be 4x smaller than the input image (offsetX, offsetY) = (x * 4.0, y * 4.0) # extract the rotation angle for the prediction and # then compute the sin and cosine angle = anglesData[x] cos = np.cos(angle) sin = np.sin(angle) # use the geometry volume to derive the width and height # of the bounding box h = xData0[x] + xData2[x] w = xData1[x] + xData3[x] # compute both the starting and ending (x, y)-coordinates # for the text prediction bounding box endX = int(offsetX + (cos * xData1[x]) + (sin * xData2[x])) endY = int(offsetY - (sin * xData1[x]) + (cos * xData2[x])) startX = int(endX - w) startY = int(endY - h) # add the bounding box coordinates and probability score # to our respective lists rects.append((startX, startY, endX, endY)) confidences.append(scoresData[x]) # return a tuple of the bounding boxes and associated confidences return (rects, confidences)
我們定義了decode_predictions函數(shù)。此函數(shù)用于提?。?br>文本區(qū)域的邊界框坐標(biāo)
以及文本區(qū)域檢測(cè)的概率
這個(gè)專用函數(shù)將使代碼在以后的腳本中更易于閱讀和管理。
# construct the argument parser and parse the arguments ap = argparse.ArgumentParser() ap.add_argument("-east", "--east", type=str, required=True, help="path to input EAST text detector") ap.add_argument("-v", "--video", type=str, help="path to optinal input video file") ap.add_argument("-c", "--min-confidence", type=float, default=0.5, help="minimum probability required to inspect a region") ap.add_argument("-w", "--width", type=int, default=320, help="resized image width (should be multiple of 32)") ap.add_argument("-e", "--height", type=int, default=320, help="resized image height (should be multiple of 32)") args = vars(ap.parse_args())
我們的命令行參數(shù)解析:
--east:EAST場(chǎng)景文本檢測(cè)器模型文件路徑。
--video:輸入視頻的路徑??蛇x - 如果提供了視頻路徑,則不會(huì)使用網(wǎng)絡(luò)攝像頭。
--min-confidence:確定文本的概率閾值??蛇x,默認(rèn)值= 0.5。
--width:調(diào)整后的圖像寬度(必須是32的倍數(shù))。可選,默認(rèn)值= 320。
--height:調(diào)整后的圖像高度(必須是32的倍數(shù))。可選,默認(rèn)值= 320。
上一節(jié)中僅使用圖像的腳本(就命令行參數(shù)而言)的主要變化是我用--video替換了--image參數(shù)。
重要提示:EAST文本要求輸入圖像尺寸為32的倍數(shù),因此如果您選擇調(diào)整--width和--height值,請(qǐng)確保它們是32的倍數(shù)!
接下來,我們將執(zhí)行模仿前一個(gè)腳本的重要初始化:
第84-86行的高度/寬度和比率初始化將允許我們稍后正確地縮放我們的邊界框。
定義了輸出層名稱,我們?cè)诘?1-97行加載了預(yù)訓(xùn)練的EAST文本檢測(cè)器。
以下塊設(shè)置我們的視頻流和每秒幀數(shù)計(jì)數(shù)器:
我們的視頻流設(shè)置為:
網(wǎng)絡(luò)攝像頭(100-103行)
或視頻文件(第106-107行)
從那里我們初始化我們?cè)诘?10行的每秒幀數(shù),并開始循環(huán)傳入幀:
我們開始在113行??的視頻/網(wǎng)絡(luò)攝像頭幀上循環(huán)。
我們的框架調(diào)整大小,保持縱橫比(第124行)。從那里,我們抓住尺寸并計(jì)算比例比(第129-132行)。然后我們?cè)俅握{(diào)整框架的大?。ū仨毷?2的倍數(shù)),這次忽略縱橫比,因?yàn)槲覀円呀?jīng)存儲(chǔ)了安全保持的比率(第135行)。
預(yù)測(cè)和繪圖文本區(qū)域邊界框發(fā)生在以下行:
在這個(gè)塊中我們:
使用EAST通過創(chuàng)建blob并將其傳遞通過網(wǎng)絡(luò)來檢測(cè)文本區(qū)域(第139-142行)
解碼預(yù)測(cè)并應(yīng)用NMS(第146和147行)。我們使用此腳本中先前定義的decode_predictions函數(shù)和我的imutils non_max_suppression便利函數(shù)。
環(huán)繞邊界框并在框架上繪制它們(第150-159行)。這涉及通過先前收集的比率來縮放框。
從那里我們將關(guān)閉幀處理循環(huán)以及腳本本身:
我們?cè)谘h(huán)的每次迭代中更新我們的fps計(jì)數(shù)器(第162行),以便在我們突破循環(huán)時(shí)計(jì)算并顯示計(jì)時(shí)(第173-175行)。
我們?cè)?65行顯示EAST文本檢測(cè)的輸出并處理按鍵(第166-170行)。如果按“q”進(jìn)行“退出”,我們就會(huì)跳出循環(huán)并繼續(xù)清理并釋放指針。
視頻文本檢測(cè)結(jié)果
要使用OpenCV將文本檢測(cè)應(yīng)用于視頻,請(qǐng)務(wù)必使用此博客文章的“下載”部分。
從那里,打開一個(gè)終端并執(zhí)行以下命令(這將啟動(dòng)你的網(wǎng)絡(luò)攝像頭,因?yàn)槲覀儧]有通過命令行參數(shù)提供--video):
$ python text_detection_video.py --east frozen_east_text_detection.pb [INFO] loading EAST text detector... [INFO] starting video stream... [INFO] elasped time: 59.76 [INFO] approx. FPS: 8.85
我們的OpenCV文本檢測(cè)視頻腳本可實(shí)現(xiàn)7-9 FPS。
這個(gè)結(jié)果并不像作者報(bào)道的那么快(13 FPS);但是,我們使用的是Python而不是C ++。通過使用Cython優(yōu)化for循環(huán),我們應(yīng)該能夠提高文本檢測(cè)管道的速度。
摘要
在今天的博客文章中,我們學(xué)習(xí)了如何使用OpenCV的新EAST文本檢測(cè)器來自動(dòng)檢測(cè)自然場(chǎng)景圖像中是否存在文本。
文本檢測(cè)器不僅準(zhǔn)確,而且能夠在720p圖像上以近似實(shí)時(shí)的速度運(yùn)行,大約13 FPS。
為了提供OpenCV的EAST文本檢測(cè)器的實(shí)現(xiàn),我需要轉(zhuǎn)換OpenCV的C ++示例;然而,我遇到了許多挑戰(zhàn),例如:
無法使用OpenCV的NMSBox進(jìn)行非最大值抑制,而是必須使用imutils的實(shí)現(xiàn)。
由于缺少RotatedRect的Python綁定,無法計(jì)算真正的旋轉(zhuǎn)邊界框。
我試圖讓我的實(shí)現(xiàn)盡可能接近OpenCV,但請(qǐng)記住,我的版本與C ++版本沒有100%完全相同,并且可能會(huì)有一兩個(gè)小問題需要隨著時(shí)間的推移而解決。
無論如何,我希望你喜歡今天的OpenCV文本檢測(cè)教程!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/43439.html
摘要:納入深度學(xué)習(xí)模型來進(jìn)一步提升準(zhǔn)確率只是時(shí)間問題,事實(shí)上,這個(gè)時(shí)間已經(jīng)到來。最新版本支持基于深度學(xué)習(xí)的,準(zhǔn)確率顯著提高。該函數(shù)使用基于深度學(xué)習(xí)的文本檢測(cè)器來檢測(cè)不是識(shí)別圖像中的文本區(qū)域。高效使用概率最高的文本區(qū)域,刪除其他重疊區(qū)域。 By Adrian Rosebrock on September 17, 2018 in Deep Learning, Optical Character ...
摘要:工作原理以前的檢測(cè)系統(tǒng)通過重復(fù)利用分類器和定位器來實(shí)現(xiàn)目標(biāo)識(shí)別。修改檢測(cè)閾值缺省情況下,只顯示信心大于的對(duì)象。用法如下這個(gè),呵呵,不完美把白馬識(shí)別成綿羊了,把黑狗識(shí)別成奶牛了,但確實(shí)很快。 原標(biāo)題:YOLO: Real-Time Object Detection英文原文:https://pjreddie.com/darknet/... 強(qiáng)烈推薦(TED視頻):https://www....
摘要:工作原理以前的檢測(cè)系統(tǒng)通過重復(fù)利用分類器和定位器來實(shí)現(xiàn)目標(biāo)識(shí)別。修改檢測(cè)閾值缺省情況下,只顯示信心大于的對(duì)象。用法如下這個(gè),呵呵,不完美把白馬識(shí)別成綿羊了,把黑狗識(shí)別成奶牛了,但確實(shí)很快。 原標(biāo)題:YOLO: Real-Time Object Detection英文原文:https://pjreddie.com/darknet/... 強(qiáng)烈推薦(TED視頻):https://www....
摘要:摘要本文介紹使用和完成視頻流目標(biāo)檢測(cè),代碼解釋詳細(xì),附源碼,上手快。將應(yīng)用于視頻流對(duì)象檢測(cè)首先打開文件并插入以下代碼同樣,首先從導(dǎo)入相關(guān)數(shù)據(jù)包和命令行參數(shù)開始。 摘要:?本文介紹使用opencv和yolo完成視頻流目標(biāo)檢測(cè),代碼解釋詳細(xì),附源碼,上手快。 在上一節(jié)內(nèi)容中,介紹了如何將YOLO應(yīng)用于圖像目標(biāo)檢測(cè)中,那么在學(xué)會(huì)檢測(cè)單張圖像后,我們也可以利用YOLO算法實(shí)現(xiàn)視頻流中的目標(biāo)檢...
閱讀 863·2023-04-25 15:13
閱讀 1479·2021-11-22 12:03
閱讀 880·2021-11-19 09:40
閱讀 1983·2021-11-17 09:38
閱讀 1800·2021-11-08 13:18
閱讀 703·2021-09-02 15:15
閱讀 1813·2019-08-30 15:54
閱讀 2788·2019-08-30 11:12