目标检测和识别PythonOpenCVYolov3
1 说明:
=====
1.1 熟悉Python+OpenCV+Yolov3的目标检测和识别,以上三个都是强大的计算机视觉编程语言和库。
1.2 本代码注释清楚,小白秒懂。
1.3 图片来源今日头条正版免费图库。
1.4 原图:
1.5 效果图:
2 准备:
=====
2.1 环境:python3.8+OpenCV4.2.0
2.2 三个文件:yolov3.cfg、coco.names和yolov3.weights.
Weight file:这是训练有素的模型,是检测物体的算法的核心。
Cfg file: 它是配置文件,其中包含算法的所有设置。
Name files: 包含算法可以检测到的对象的名称。
2.2.1 yolov3.cfg和coco.names,简单。https://github.com/jielingao/yolov3 #下载地址
2.2.2 yolov3.weights文件较大,下载较慢。#文件很大,官网下载很慢 https://pjreddie.com/media/files/yolov3.weights #感谢网友提供,指定下载yolov3.weights,较快 https://pan.baidu.com/s/1__zDF-pC-0eXcZc1gm6kFA #提取码:jnhn (永久有效)
3 注释版的代码main.py:
==================
3.1 第1步:导入模块import cv2 import numpy as np
3.2 第2步:加载yolov3文件(3个文件,注意路径)#权重和配置 net = cv2.dnn.readNet("/home/xgj/Desktop/pyyolo/yolov3.weights", "/home/xgj/Desktop/pyyolo/yolov3.cfg") #定义一个空的列表存放名字 classes = [] #打开文件并读取 with open("/home/xgj/Desktop/pyyolo/coco.names","r") as f: classes = [ line.strip() for line in f.readlines() ] layer_names = net.getLayerNames() outputlayers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]
3.3 第3步:相关设置颜色和读取图片# 颜色设置:随机色 colors= np.random.uniform(0,255,size=(len(classes),3)) #字体设置 font = cv2.FONT_HERSHEY_PLAIN #读取需要检测图片,注意路径 img = cv2.imread("/home/xgj/Desktop/pyyolo/pic4.jpeg") #获取图片的高、宽和通道 height,width,channels = img.shape
3.4 第4步:侦测物体# Blob用于提取图片中的特征并调整其大小。 YOLO接受三种尺寸: #320×320 很小,所以精度较低,但速度快 #609×609 很大,因此精度高、但速度慢 #416×416位于中间,两者的折中。 blob = cv2.dnn.blobFromImage(img,0.00392,(416,416),(0,0,0),True,crop=False) net.setInput(blob) #Outs是一个数组,包含有关所检测对象的所有信息,它们的位置以及对检测的置信度的信息 outs = net.forward(outputlayers) #初始化定义三个空列表 class_ids=[] #有时候叫Label:它是检测到的对象的名称 confidences=[] #从0到1的检测置信度。 boxes=[] #包含围绕检测到的对象的矩形的坐标。 #遍历列表读取,存入三个列表中 for out in outs: for detection in out: scores = detection[5:] class_id = np.argmax(scores) confidence = scores[class_id] if confidence > 0.5: #onject detected center_x= int(detection[0]*width) center_y= int(detection[1]*height) w = int(detection[2]*width) h = int(detection[3]*height) x=int(center_x - w/2) y=int(center_y - h/2) #存入列表中 boxes.append([x,y,w,h]) #put all rectangle areas confidences.append(float(confidence)) #how confidence was that object detected and show that percentage class_ids.append(class_id) #name of the object tha was detected #执行检测时,碰巧我们在同一物体上有更多的BOX,因此我们应该使用另一个函数来消除这种"噪音"。 称为非最大限制 indexes = cv2.dnn.NMSBoxes(boxes,confidences,0.4,0.6)
3.5 第5步:绘制框font = cv2.FONT_HERSHEY_PLAIN for i in range(len(boxes)): if i in indexes: x,y,w,h = boxes[i] label = str(classes[class_ids[i]]) color = colors[i] cv2.rectangle(img,(x,y),(x+w,y+h),color,2) #显示颜色255,255,255=白色;绿色=0,255,0 #3为字体大小,默认为1 cv2.putText(img,label,(x,y+30),font,3,(0,255,0),2)
3.6 第6步:显示效果图片 cv2.imshow("Image",img) cv2.waitKey(0) cv2.destroyAllWindows()
4 小结:
=====
4.1 猴子没有检测出来,小bug。
4.2 漏掉一个人,没检测出来,小bug。
班主任表面嫌弃这3种学生,实则如心头肉,班长惹不得在学生时代,班主任对学生的态度对学生的学习成绩存在很多的影响,如果老师能够多照顾学生一点,学生可能就会更积极一点,如果老师总是责骂一名学生的话,这名学生有90的可能放弃学习。在一个
教育部新消息不及560分考生或将无缘高中,学生该何去何从高考告一段落之后,各省份将会迎来另一个重要的考试中考。虽说中考的阵势和重要性都不及高考,但是对每个参加中考的考生来说,也是改变自己的一个重要转机。中考的命题和考试时间都由各省份教育
315消费维权用心理学原理,教你做到只买好的,不买贵的3。15特别策划或或君用心理学原理,教你识别那些我们都曾经掉入过的消费陷阱昨天的白色情人节,各位过得都还好吧?做为一个结婚多年的过来人,我要用我亲身的经验告诉那些还没结婚的男士给女
自行孕周矫正好办法十一周啦!10w5d,终于来建档了!本来期待NT秒过,检查的时候发现孕周还是太小了,小胳膊小腿看的不是很清楚,只能十天后再来NT哭惹R但看见宝宝在屋里子打挺,还是很激动啊!飞吻R飞
依恋心理03岁宝宝安全感哪里来?妈妈就是他的全世界上一篇,我聊了自己和小W在宝宝母乳期截然不同的喂养方式,用我的切身经历推翻了母乳的产量和胸的大小成正比这一错误观点,并提到了一点点关于幼儿发展心理学上的问题,下面我们继续聊聊宝宝在
为什么我们听了,孩子还是不肯说?(育儿书里不会告诉你的经验)1hr为什么读了这么多育儿书,什么积极倾听,什么共情,我都懂。但是在孩子面前,还是被秒成了渣渣?小桔子的妈妈和我这样讨论。其实她的困惑,我也有。都说妈妈跟孩子的关系,是世界上最微妙
春节七大姑八大姨应对指南转眼间就是除夕了,或或君在这里给大家拜年啦,祝大家新年快乐,万事如意。说到过年,听我们节目的大多数朋友都还很年轻,作为晚辈,我们中的大多数人都会到长辈家拜年,在这里或或君要提醒大家
宝宝第一次发烧201092五一过后小郭辞职去了北京,本月底晓亮要去合生创展,接下来9月份是小李,好不容易建立起来的团队,转眼就四分五裂。记得刚刚到集团资金部的时候,小李告诉我老大会常常不记得属下
夏季防蚊虫,常见的六大驱蚊误区应避免,为宝宝的健康保驾护航进入盛夏,蚊虫越来越多了,尤其困扰有宝宝的家庭。宝宝皮肤娇嫩,更容易成为蚊虫的叮咬目标,一不注意宝宝皮肤上就会被咬出许多又红又肿的包,家长跟着抓狂。常见的驱蚊办法花露水风油精涂抹维
8个月的宝宝该怎么喂养尽管这时的宝宝有着不错的胃口,也没有生病,但是宝宝身高体重的增加并不如之前那么快了,宝宝的身体发育在这一时期趋于稳定。随着宝宝手眼协调能力的不断完善,现在的宝宝拿东西已经不是一把抓
妈妈,我终于和最爱的人离婚了1hr要不是光棍节那天一大爷举牌为儿子征婚的新闻爆红网络,恐怕大家都快因为剁手节而忘记了双十一原来还有希冀脱单的寓意所在。大爷为子征婚截图这大爷借着马爸爸光棍节的双重东风,大呼只要