安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

3种方法用yolov3pythoncv2实现视频目标检测

11月15日 碧落盟投稿
  1说明:
  1。1技术要点:yolov3pythoncv2(OpenCV)实现目标检测,本文由浅入深,代码注释,小白秒懂,值得收藏。
  1。23种方法:摄像头视频目标检测、小视频cv2目标检测,和视频目标检测生成avi视频。
  1。3yolo的基本介绍。
  pic1:单张静态图片目标检测
  1。4单张静态图片目标检测,我已经讲过,可参考文章
  《目标检测和识别:PythonOpenCVYolov3》,文章中三个文件:yolov3。cfg、coco。names和yolov3。weights。下载已经告知,本文省略。建议先看这篇文章后,再看本文。
  2效果图:
  2。1摄像头实时目标检测
  bottle矿泉水瓶;cellphone手机;person人
  2。2读取视频实时目标检测:
  person人;
  2。3目标检测后生成avi视频:
  来自网络,仅供学习,如有侵权,请联系,定删除
  3摄像头实时目标检测代码:代码来源,进行注释和分析https:blog。csdn。netqq39567427articledetails105451962?utmmediumdistribute。pcrelevant。nonetaskblogBlogCommendFromMachineLearnPai21。addparamisCfdepth1utmsourcedistribute。pcrelevant。nonetaskblogBlogCommendFromMachineLearnPai21。addparamisCf摄像头实时目标检测第1步:导入模块importcv2importnumpyasnp第2步:加载yolov3的模型和三个文件注意路径netcv2。dnn。readNet(homexgjDesktopyolov3yolov3。weights,homexgjDesktopyolov3yolov3。cfg)名字分类的空的列表classes〔〕withopen(homexgjDesktopyolov3coco。names,r)asf:classes〔line。strip()forlineinf。readlines()〕layernamesnet。getLayerNames()outputlayers〔layernames〔i〔0〕1〕foriinnet。getUnconnectedOutLayers()〕第3步:初始化相关参数颜色随机产生colorsnp。random。uniform(0,255,size(len(classes),3))Initializeframeratecalculationframeratecalc1获取频率freqcv2。getTickFrequency()0提示读取摄像头如果格式是xxxxxxxxx。mp4就是读取本地视频文件capcv2。VideoCapture(0)第4步:循环whileTrue:Starttimer(forcalculatingframerate)t1cv2。getTickCount()获取读取摄像头资料ret,framecap。read()以下与单张静态图片类似获取高、宽和通道height,width,channelsframe。shapeDetectingobjects,侦测对象相关设置,与静态图片类似blobcv2。dnn。blobFromImage(frame,0。00392,(416,416),(0,0,0),True,cropFalse)net。setInput(blob)outsnet。forward(outputlayers)Showinginformationsonthescreen屏幕展示信息设置classids〔〕confidences〔〕boxes〔〕outs是上面获取的foroutinouts:fordetectioninout:scoresdetection〔5:〕classidnp。argmax(scores)confidencescores〔classid〕ifconfidence0。5:Objectdetectedcenterxint(detection〔0〕width)centeryint(detection〔1〕height)wint(detection〔2〕width)hint(detection〔3〕height)Rectanglecoordinatesxint(centerxw2)yint(centeryh2)boxes。append(〔x,y,w,h〕)confidences。append(float(confidence))classids。append(classid)indexescv2。dnn。NMSBoxes(boxes,confidences,0。5,0。4)fontcv2。FONTHERSHEYSIMPLEXforiinrange(len(boxes)):ifiinindexes:x,y,w,hboxes〔i〕labelstr(classes〔classids〔i〕〕)colorcolors〔i〕cv2。rectangle(frame,(x,y),(xw,yh),color,1)cv2。putText(frame,label,(x,y20),font,0。7,color,1)cv2。putText(frame,FPS:{0:。2f}。format(frameratecalc),(30,50),font,0。7,(255,255,0),1)cv2。namedWindow(Image,cv2。WINDOWNORMAL)cv2。resizeWindow(Image,960,540)cv2。imshow(Image,frame)以上与单张静态图片类似Calculateframeratet2cv2。getTickCount()time1(t2t1)freqframeratecalc1time1Pressqtoquit,默认为1ifcv2。waitKey(1)ord(q):break第5步:结束关闭cap。release()cv2。destroyAllWindows()
  4读取本地视频进行目标检测:
  代码基本与上面相同,仅需给一下这一行代码为capcv2。VideoCapture(homexgjDesktopyolov3333。mp4)上面注释里有介绍
  5高级一点的视频标准目标检测,并合成新的视频:
  5。1本机环境:python3。8OpenCV4。2。0华为笔记本电脑deepinlinux操作系统。
  5。2代码说明:参考文章,对代码进行注释和适当修改https:my。oschina。netu1464083blog2906860本代码:sp3。py
  5。3代码:第1步:导入模块importnumpyasnpimportargparseimportimutilsimporttimeimportcv2importos第2步:参数构建实例化apargparse。ArgumentParser()当前本代码同目录下的input文件夹:原视频位置ap。addargument(i,input,requiredTrue,helppathtoinputvideo)当前本代码同目录下的output文件夹:目标检测标定后的合成视频位置ap。addargument(o,output,requiredTrue,helppathtooutputvideo)当前本代码同目录下的yolov3文件夹ap。addargument(y,yolov3,requiredTrue,helpbasepathtoYOLOdirectory)参数定义,默认值ap。addargument(c,confidence,typefloat,default0。5,helpminimumprobabilitytofilterweakdetections)ap。addargument(t,threshold,typefloat,default0。3,helpthresholdwhenapplyongnonmaximasuppression)argsvars(ap。parseargs())第3步:加载yolov3的3个文件注意:三个文件在yolov3文件下weightsPathos。path。sep。join(〔args〔yolov3〕,yolov3。weights〕)configPathos。path。sep。join(〔args〔yolov3〕,yolov3。cfg〕)labelsPathos。path。sep。join(〔args〔yolov3〕,coco。names〕)读取标签名文件LABELSopen(labelsPath)。read()。strip()。split()initializealistofcolorstorepresenteachpossibleclasslabelnp。random。seed(42)颜色随机设置COLORSnp。random。randint(0,255,size(len(LABELS),3),dtypeuint8)print(〔INFO〕loadingYOLOfromdisk。。。)netcv2。dnn。readNetFromDarknet(configPath,weightsPath)lnnet。getLayerNames()ln〔ln〔i〔0〕1〕foriinnet。getUnconnectedOutLayers()〕第4步:获取输入的原视频文件vscv2。VideoCapture(args〔input〕)writerNone(W,H)(None,None)trytodeterminethetotalnumberofframesinthevideofiletry:propcv2。cv。CVCAPPROPFRAMECOUNTifimutils。iscv2()elsecv2。CAPPROPFRAMECOUNTtotalint(vs。get(prop))测算本视频内的目标检测识别后的总框架print(〔INFO〕{}totalframesinvideo。format(total))anerroroccurredwhiletryingtodeterminethetotalnumberofframesinthevideofileexcept:print(〔INFO〕couldnotdetermineofframesinvideo)print(〔INFO〕noapprox。completiontimecanbeprovided)total1第5步:循环loopoverframesfromthevideofilestreamwhileTrue:readthenextframefromthefile(grabbed,frame)vs。read()iftheframewasnotgrabbed,thenwehavereachedtheendofthestreamifnotgrabbed:breakiftheframedimensionsareempty,grabthemifWisNoneorHisNone:(H,W)frame。shape〔:2〕constructablobfromtheinputframeandthenperformaforwardpassoftheYOLOobjectdetector,givingusourboundingboxesandassociatedprobabilitiesblobcv2。dnn。blobFromImage(frame,1255。0,(416,416),swapRBTrue,cropFalse)net。setInput(blob)starttime。time()layerOutputsnet。forward(ln)endtime。time()initializeourlistsofdetectedboundingboxes,confidences,andclassIDs,respectivelyboxes〔〕confidences〔〕classIDs〔〕loopovereachofthelayeroutputsforoutputinlayerOutputs:loopovereachofthedetectionsfordetectioninoutput:scoresdetection〔5:〕classIDnp。argmax(scores)confidencescores〔classID〕ifconfidenceargs〔confidence〕:boxdetection〔0:4〕np。array(〔W,H,W,H〕)(centerX,centerY,width,height)box。astype(int)xint(centerX(width2))yint(centerY(height2))boxes。append(〔x,y,int(width),int(height)〕)confidences。append(float(confidence))classIDs。append(classID)绑定boxidxscv2。dnn。NMSBoxes(boxes,confidences,args〔confidence〕,args〔threshold〕)ensureatleastonedetectionexists确保一个侦测存在iflen(idxs)0:loopovertheindexeswearekeepingforiinidxs。flatten():extracttheboundingboxcoordinates(x,y)(boxes〔i〕〔0〕,boxes〔i〕〔1〕)(w,h)(boxes〔i〕〔2〕,boxes〔i〕〔3〕)drawaboundingboxrectangleandlabelontheframecolor〔int(c)forcinCOLORS〔classIDs〔i〕〕〕cv2。rectangle(frame,(x,y),(xw,yh),color,2)text{}:{:。4f}。format(LABELS〔classIDs〔i〕〕,confidences〔i〕)cv2。putText(frame,text,(x,y5),cv2。FONTHERSHEYSIMPLEX,0。5,color,2)checkifthevideowriterisNone写入新的视频文件ifwriterisNone:initializeourvideowriterfourcccv2。VideoWriterfourcc(MJPG)writercv2。VideoWriter(args〔output〕,fourcc,30,(frame。shape〔1〕,frame。shape〔0〕),True)someinformationonprocessingsingleframeiftotal0:elap(endstart)print(〔INFO〕singleframetook{:。4f}seconds。format(elap))print(〔INFO〕estimatedtotaltimetofinish:{:。4f}seconds。format(elaptotal))writetheoutputframetodiskwriter。write(frame)第6步:结束和收尾releasethefilepointersprint(〔INFO〕cleaningup。。。)writer。release()vs。release()
  5。4运行:第7步:使用方法在本代码sp3。py的目录下打开终端本机输入python3。8sp3。pyinputvideos222。mp4outputoutput2222。aviyolov3yolov3
  5。5图:
  视频是一首完整的MV,有点大,时间有一点久
  6小结:
  6。1摄像头视频,有点卡,小bug。
  6。2合成视频,有点慢,xiaobug。
  7yolo介绍:
  7。1yolo是目前比较流行的目标检测算法,速度快结构简单。
  7。2YOLO是2016年提出来的目标检测算法,当前较为火热。
  7。3yoloYouOnlyLookOnce:
  Unified,RealTimeObjectDetection,
  即:YouOnlyLookOnce说的是只需要一次CNN运算,
  Unified指的是这是一个统一的框架,提供endtoend的预测,
  而RealTime体现是Yolo算法速度快,达到实时。
  7。4yolov3比较成熟,但目前已经出现yolov4和yolov5(被认为是v4。5版本)。
投诉 评论 转载

失踪的弟弟和分崩离析的家题记:这几天郭刚堂找到儿子的信息铺天盖地,功夫不负有心人,就连他自己都说老天待他不薄,尽管24年里他骑着摩托车转战了中国的大部分城市,各种辛苦遍历,自杀的念头时而有之,可是他熬……幼儿园园长决定孩子一生的21个关键期,千万不要错过!【儿童关键期】是指儿童在连续相接短暂的时间里,会有某种强烈的自然行为,在这期间内,对某一种知识或技巧有着非常感觉。关键期的出现使孩子对环境中的某个层面有强烈的兴趣,几乎掩……听说这样吃会毁容?有的人喜欢只用或常用一侧咀嚼食物,另一侧仿佛不存在一样从来不用。但是你知道吗?长时间单侧咀嚼,不仅会给口腔健康带来影响,还有可能让人变丑哦!单侧咀嚼给人带来的危害:……市面上的学习桌琳琅满目,家长该如何选购?孩子大了,要上学了,儿童书桌则成为每个家庭的必备家具,但普通的传统书桌并不适合成长中的儿童使用。儿童正处于生长发育时期,每天的身高都在不断变化,如果学习桌的高度不匹配,容易造成……追溯潜意识,发现儿时说错的一句话竟然影响了我30年当我在与他人沟通时,若对方对我说的话提出反问时,我会产生回避,进而找借口结束聊天或保持沉默。我觉得对方是在质疑我,也不信任我,既然质疑那就没必要继续,上班时我会选择离职,……木材常规项目检测木材是能够次级生长的植物,如乔木和灌木,所形成的木质化组织。木材为林业主产物,木材是维管形成层向内的发展出植物组织的统称,包括木质部和薄壁射线,其对于人类生活起着很大的支持作用……3种方法用yolov3pythoncv2实现视频目标检测1说明:1。1技术要点:yolov3pythoncv2(OpenCV)实现目标检测,本文由浅入深,代码注释,小白秒懂,值得收藏。1。23种方法:摄像头视频目标检测、……这4个信号说明孩子可能缺锌了,家长要重视孩子补锌很重要儿童厌食,补锌是关键各类补锌的广告随处可见,越来越多的家长也开始重视起锌这个熟悉又陌生的营养元素。为什么这么说呢?家家月嫂先带你来看看下面的这些……婆婆的生活费该不该交?话多嘴边,网友出的主意值得借鉴图文均为作者原创,欢迎个人转发分享,未经许可请勿抄袭。小小的婆婆是个退休老干部,守寡多年了,自己带着儿子也不容易,不过她也是个挺有性格的人,小小一生就是俩,这些年,婆婆有……带自闭症娃比普通娃辛苦?对比之后,我觉得自己很幸福养育一个自闭症孩子,生活注定很艰难?做普通孩子的妈妈,一定会比养育自闭症娃幸福得多?想要干预孩子的同时拥有自己的生活,可能吗?当孩子诊断后,这些问题曾像咒语一……求你把儿子和我换换吧!产妇三胎得女,跪求邻床换娃,太心酸如果只能生一个孩子,可以选择,你会选择生儿子,还是生女儿?对于产生这个问题的原因,是在医院遇到了一个荒唐事:一产妇生下第三胎女儿,跪求生了第二胎男孩的人家换孩子!是……好的助听器好在哪里1、声音的还原度虽然现在的科技发展可以极高地还原自然的声音,但是仍然与正常人耳存在差距。这就是考验助听器的性能的一个关键要素之一。价格相对高昂的数字信号助听器,在这方面的……
大学男生身高鄙视链,只要没达到这个数,在学妹眼里都不过关为什么怀孕3个月后才能告诉别人自己怀孕了?这个答案太真实了学会给练习跆拳道的孩子积极心理暗示科学坐月子的50条护理知识,产后妈妈必知!准妈妈收藏备用孩子怯场不敢说话?是时候锻炼他的口才了儿子与我的成长孩子贪吃不长肉,身材瘦小怎么办?多喝这道汤,孩子个子高长的壮狗狗身患白血病,却用幸福的结局与世界告别何谓上等人?何谓下等人?为孩子立规矩时,请坚定而非强硬香蕉燕麦挞外焦里嫩,快手减脂餐(一)男士下面短是因为公摊面积大?医生辟谣勿以长短论英雄

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利