网站首页 > 技术文章 正文
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。
猜你喜欢
- 2024-10-19 MindSpore:YOLOv3人体目标检测模型实现(三)
- 2024-10-19 YOLOv3网络在车标检测中的应用 yolo 车辆
- 2024-10-19 [OpenCV实战]8 深度学习目标检测网络YOLOv3的训练
- 2024-10-19 1.3MB超轻YOLO算法!全平台通用,速度快上45%丨开源
- 2024-10-19 YOLOv3目标检测算法如何应用于图片检测?
- 2024-10-19 完爆全部YOLO家族!RT-DETRv3突破目标检测网络的极限!
- 2024-10-19 AAAI 2021中的目标检测(详细版with code)
- 2024-10-19 深度学习图像目标检测:读懂目前工业界最青睐的YOLO V3
- 2024-10-19 高大上的YOLOV3对象检测算法,使用python也可轻松实现
- 2024-10-19 来自北理SlimYOLOv3无人机目标快速检测算法
你 发表评论:
欢迎- 11-18软考系统分析师知识点十六:系统实现与测试
- 11-18第16篇 软件工程(四)过程管理与测试管理
- 11-18编程|实例(分书问题)了解数据结构、算法(穷举、递归、回溯)
- 11-18算法-减治法
- 11-18笑疯了!巴基斯坦首金!没有技巧全是蛮力!解说:真远啊!笑死!
- 11-18搜索算法之深度优先、广度优先、约束条件、限界函数及相应算法
- 11-18游戏中的优化指的的是什么?
- 11-18算法-分治法
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)