亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

[譯]OpenCV Text Detection (EAST text detector)

VincentFF / 1964人閱讀

摘要:的文本檢測(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

相關(guān)文章

  • []OpenCV OCR and text recognition with Tesseract

    摘要:納入深度學(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 ...

    gnehc 評(píng)論0 收藏0
  • 】讓你的電腦學(xué)會(huì)同時(shí)識(shí)別多個(gè)物體

    摘要:工作原理以前的檢測(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....

    duan199226 評(píng)論0 收藏0
  • 】讓你的電腦學(xué)會(huì)同時(shí)識(shí)別多個(gè)物體

    摘要:工作原理以前的檢測(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....

    leap_frog 評(píng)論0 收藏0
  • 10分鐘學(xué)會(huì)使用YOLO及Opencv實(shí)現(xiàn)目標(biāo)檢測(cè)(下)|附源碼

    摘要:摘要本文介紹使用和完成視頻流目標(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)檢...

    songze 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<