0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

EAST模型結(jié)構(gòu)

OpenCV學(xué)堂 ? 來(lái)源:OpenCV學(xué)堂 ? 作者:OpenCV學(xué)堂 ? 2022-08-17 10:08 ? 次閱讀

EAST模型

EAST( An Efficient and Accurate Scene Text Detector)是標(biāo)題的英文首字母縮寫,模型出自曠視科技。相比其他幾種場(chǎng)景文字檢測(cè)模型,表現(xiàn)開掛。在ICDAR 2015數(shù)據(jù)集上表現(xiàn)優(yōu)異,見下圖:

88ab2dcc-1d6b-11ed-ba43-dac502259ad0.jpg

可以看到紅色點(diǎn)標(biāo)記EAST模型的速度與性能超過(guò)之前的模型。EAST模型是一個(gè)全卷積神經(jīng)網(wǎng)絡(luò)(FCN)它會(huì)預(yù)測(cè)每個(gè)像素是否是TEXT或者WORDS,對(duì)比之前的一些卷積神經(jīng)網(wǎng)絡(luò)剔除了區(qū)域候選、文本格式化等操作,簡(jiǎn)潔明了,后續(xù)操作只需要根據(jù)閾值進(jìn)行過(guò)濾以及通過(guò)非最大抑制(NMS)得到最終的文本區(qū)域即可,EAST模型結(jié)構(gòu)如下:

88c3c6e8-1d6b-11ed-ba43-dac502259ad0.jpg

其中stem網(wǎng)絡(luò)是一個(gè)基于ImageNet預(yù)訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)(CNN)比如VGG-16,剩下的分別是通過(guò)卷積不斷降低尺度大小,再通過(guò)不同層的反卷積進(jìn)行合并,這個(gè)有點(diǎn)像UNet圖像分割網(wǎng)絡(luò),最后輸出層,通過(guò)1x1的卷積分別得到score、RBOX、QUAD,輸出參數(shù)的解釋如下:

88e71620-1d6b-11ed-ba43-dac502259ad0.jpg

OpenCV DNN使用

OpenCV4.0 的深度神經(jīng)網(wǎng)絡(luò)(DNN)模塊能力大大加強(qiáng),不僅支持常見的圖像分類、對(duì)象檢測(cè)、圖像分割網(wǎng)絡(luò),還實(shí)現(xiàn)了自定義層與通用網(wǎng)絡(luò)模型支持,同時(shí)提供了非最大抑制相關(guān)API支持,使用起來(lái)十分方便。EAST模型的tensorflow代碼實(shí)現(xiàn)參見如下:

https://github.com/argman/EAST

下載預(yù)訓(xùn)練模型,生成pb文件,OpenCV DNN中導(dǎo)入tensorflow模型的API如下:

Netcv::readNet(
constString&model,
constString&config="",
constString&framework=""
)
model表示模型路徑
config表示配置文件,缺省為空
framework表示框架,缺省為空,根據(jù)導(dǎo)入模型自己決定

OpenCV DNN已經(jīng)實(shí)現(xiàn)非最大抑制算法,支持的API調(diào)用如下:

voidcv::NMSBoxes(
conststd::vector&bboxes,
conststd::vector&scores,
constfloatscore_threshold,
constfloatnms_threshold,
std::vector&indices,
constfloateta=1.f,
constinttop_k=0
)
Bboxes表示輸入的boxes
Score表示每個(gè)box得分
score_threshold表示score的閾值
nms_threshold表示非最大抑制閾值
indices表示輸出的結(jié)果,是每個(gè)box的索引index數(shù)組
eta表示自適應(yīng)的閾值nms閾值方式
top_k表示前多少個(gè),為0表示忽略

代碼實(shí)現(xiàn)

首先加載模型,然后打開攝像頭,完成實(shí)時(shí)檢測(cè),C++的代碼如下:

#include>
#include

usingnamespacecv;
usingnamespacecv::dnn;

voiddecode(constMat&scores,constMat&geometry,floatscoreThresh,
std::vector&detections,std::vector&confidences);

intmain(intargc,char**argv)
{
floatconfThreshold=0.5;
floatnmsThreshold=0.4;
intinpWidth=320;
intinpHeight=320;
Stringmodel="D:/python/cv_demo/ocr_demo/frozen_east_text_detection.pb";

//Loadnetwork.
Netnet=readNet(model);

//Openacamerastream.
VideoCapturecap(0);

staticconststd::stringkWinName="EAST:AnEfficientandAccurateSceneTextDetector";
namedWindow(kWinName,WINDOW_AUTOSIZE);

std::vectorouts;
std::vectoroutNames(2);
outNames[0]="feature_fusion/Conv_7/Sigmoid";
outNames[1]="feature_fusion/concat_3";

Matframe,blob;
while(waitKey(1)>frame;
if(frame.empty())
{
waitKey();
break;
}

blobFromImage(frame,blob,1.0,Size(inpWidth,inpHeight),Scalar(123.68,116.78,103.94),true,false);
net.setInput(blob);
net.forward(outs,outNames);

Matscores=outs[0];
Matgeometry=outs[1];

//Decodepredictedboundingboxes.
std::vectorboxes;
std::vectorconfidences;
decode(scores,geometry,confThreshold,boxes,confidences);

//Applynon-maximumsuppressionprocedure.
std::vectorindices;
NMSBoxes(boxes,confidences,confThreshold,nmsThreshold,indices);

//Renderdetections.
Point2fratio((float)frame.cols/inpWidth,(float)frame.rows/inpHeight);
for(size_ti=0;ilayersTimes;
doublefreq=getTickFrequency()/1000;
doublet=net.getPerfProfile(layersTimes)/freq;
std::stringlabel=format("Inferencetime:%.2fms",t);
putText(frame,label,Point(0,15),FONT_HERSHEY_SIMPLEX,0.5,Scalar(0,255,0));

imshow(kWinName,frame);
}
return0;
}

voiddecode(constMat&scores,constMat&geometry,floatscoreThresh,
std::vector&detections,std::vector&confidences)
{
detections.clear();
CV_Assert(scores.dims==4);CV_Assert(geometry.dims==4);CV_Assert(scores.size[0]==1);
CV_Assert(geometry.size[0]==1);CV_Assert(scores.size[1]==1);CV_Assert(geometry.size[1]==5);
CV_Assert(scores.size[2]==geometry.size[2]);CV_Assert(scores.size[3]==geometry.size[3]);

constintheight=scores.size[2];
constintwidth=scores.size[3];
for(inty=0;y(0,0,y);
constfloat*x0_data=geometry.ptr(0,0,y);
constfloat*x1_data=geometry.ptr(0,1,y);
constfloat*x2_data=geometry.ptr(0,2,y);
constfloat*x3_data=geometry.ptr(0,3,y);
constfloat*anglesData=geometry.ptr(0,4,y);
for(intx=0;x

python的代碼實(shí)現(xiàn)如下:

if__name__=="__main__":
text_detector=TextAreaDetector("D:/python/cv_demo/ocr_demo/frozen_east_text_detection.pb")
frame=cv.imread("D:/txt.png")
start=time.time()
text_detector.detect(frame)
end=time.time()
print("[INFO]textdetectiontook{:.4f}seconds".format(end-start))
#showtheoutputimage
cv.imshow("TextDetection",frame)
cv.waitKey(0)
cap=cv.VideoCapture(0)
whileTrue:
ret,frame=cap.read()
ifretisnotTrue:
break
text_detector.detect(frame)
cv.imshow("easttextdetectdemo",frame)
c=cv.waitKey(5)
ifc==27:
break
cv.destroyAllWindows()

運(yùn)行結(jié)果

圖書封面 – 圖像檢測(cè)

89054e7e-1d6b-11ed-ba43-dac502259ad0.jpg

視頻場(chǎng)景中文字檢測(cè)

手寫文本檢測(cè)

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:OpenCV4.x的EAST場(chǎng)景文字檢測(cè)

文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    PROFIBUS協(xié)議結(jié)構(gòu)及協(xié)議模型與ISO/OSI協(xié)議模型的關(guān)系

    PROFIBUS協(xié)議模型與ISO/OSI協(xié)議模型的關(guān)系  PROFIBUS協(xié)議結(jié)構(gòu)
    發(fā)表于 11-17 10:33

    結(jié)構(gòu)光成像模型是如何建立的

    【理解】線結(jié)構(gòu)光成像模型
    發(fā)表于 06-09 16:48

    如何對(duì)雙母線結(jié)構(gòu)模型進(jìn)行仿真

    怎樣去搭建一種電力電子仿真模型?如何對(duì)雙母線結(jié)構(gòu)模型進(jìn)行仿真?
    發(fā)表于 09-24 10:28

    EAST技術(shù)診斷系統(tǒng)監(jiān)控子系統(tǒng)分析和設(shè)計(jì)

    EAST是為科學(xué)研究建造的全超導(dǎo)核聚變實(shí)驗(yàn)裝置。根據(jù)EAST的實(shí)驗(yàn)特點(diǎn)和性能要求,技術(shù)診斷系統(tǒng)數(shù)據(jù)監(jiān)控子系統(tǒng)采用管理層、控制層和現(xiàn)場(chǎng)設(shè)備層3 層網(wǎng)絡(luò)結(jié)構(gòu)完成對(duì)裝置的監(jiān)控,通
    發(fā)表于 04-21 08:59 ?9次下載

    DCS 在EAST 低溫系統(tǒng)中的設(shè)計(jì)與應(yīng)用The Desig

    本文介紹了DCS 在EAST 低溫系統(tǒng)中的設(shè)計(jì)與應(yīng)用,特別對(duì)系統(tǒng)的工藝設(shè)計(jì)、硬件結(jié)構(gòu)和軟件設(shè)計(jì)作了詳細(xì)介紹。關(guān)鍵詞:集散控制系統(tǒng);EAST;低溫系統(tǒng);組態(tài)軟件 Abstract
    發(fā)表于 05-25 11:50 ?20次下載

    小型分布式定時(shí)觸發(fā)系統(tǒng)在EAST中的應(yīng)用

    EAST 裝置是一種利用磁場(chǎng)來(lái)約束等離子體的受控?zé)岷司圩兾锢韺?shí)驗(yàn)裝置。分布式定時(shí)觸發(fā)系統(tǒng)是EAST 裝置總控系統(tǒng)的重要組成部分之一,用來(lái)為各子系統(tǒng)提供精確的觸發(fā)時(shí)刻和為數(shù)
    發(fā)表于 07-07 14:05 ?13次下載

    基于PLC與WINCC的EAST快控電源遠(yuǎn)控網(wǎng)絡(luò)設(shè)計(jì)

    EAST快控電源是國(guó)家“九五”大科學(xué)工程EAST非圓截面大型超導(dǎo)托卡馬克裝置的子系統(tǒng)。為了便于EAST快控電源以及控制系統(tǒng)中的多臺(tái)微機(jī)及UPS的統(tǒng)一控制,并針對(duì)快控電源控制邏輯對(duì)
    發(fā)表于 07-20 15:28 ?11次下載

    UMTS的物理結(jié)構(gòu)模型

    UMTS的物理結(jié)構(gòu)模型
    發(fā)表于 09-18 15:13 ?1194次閱讀

    MPOA的模型結(jié)構(gòu),MPOA的模型結(jié)構(gòu)是什么?

    MPOA的模型結(jié)構(gòu),MPOA的模型結(jié)構(gòu)是什么? (1)基本組成 MPOA采用了LANE、NHRP、交換路由器(Switched Router)三種互補(bǔ)的
    發(fā)表于 04-07 13:27 ?507次閱讀

    EAST快控電源遠(yuǎn)程監(jiān)控系統(tǒng)的實(shí)現(xiàn)_管子平

    EAST快控電源遠(yuǎn)程監(jiān)控系統(tǒng)的實(shí)現(xiàn)_管子平
    發(fā)表于 03-19 11:26 ?0次下載

    基于富因特網(wǎng)應(yīng)用的EAST數(shù)據(jù)采集管理系統(tǒng)_楊育

    基于富因特網(wǎng)應(yīng)用的EAST數(shù)據(jù)采集管理系統(tǒng)_楊育
    發(fā)表于 03-17 09:42 ?0次下載

    利用符合AUTOSAR的架構(gòu)描述語(yǔ)言EAST-ADL2開發(fā)汽車產(chǎn)品

    ATESST計(jì)劃 (www.atesst.org)升級(jí)至EAST-ADL2。 本文展示了由EAST-ADL2領(lǐng)域模型帶來(lái)的語(yǔ)言擴(kuò)展的結(jié)
    發(fā)表于 11-30 11:07 ?0次下載

    基于AUTOSAR的架構(gòu)描述語(yǔ)言EAST-ADL2開發(fā)汽車產(chǎn)品

    ATESST計(jì)劃 (www.atesst.org)升級(jí)至EAST-ADL2。 本文展示了由EAST-ADL2領(lǐng)域模型帶來(lái)的語(yǔ)言擴(kuò)展的結(jié)果
    發(fā)表于 12-01 11:43 ?27次下載

    golang的調(diào)度模型-GPM 模型的源碼結(jié)構(gòu)

    【導(dǎo)讀】GMP 模型是讓 go 語(yǔ)言輕量快速高效的重要調(diào)度模型,本文從 GMP 源碼出發(fā)直觀地解析了這一模型。 這篇文章就來(lái)看看 golang 的調(diào)度模型-GPM
    的頭像 發(fā)表于 07-06 11:55 ?2082次閱讀

    手工優(yōu)化ncnn模型結(jié)構(gòu)

    本文模型結(jié)構(gòu)使用 netron visualizer 截圖展示,支持 onnx 和 ncnn 模型的可視化
    發(fā)表于 01-26 18:48 ?0次下載
    手工優(yōu)化ncnn<b class='flag-5'>模型</b><b class='flag-5'>結(jié)構(gòu)</b>