基于YOLO的目标检测(车辆、行人等)

一、目标

完成基于YOLO的目标检测(车辆、行人等),进行去重处理,绘制边框及置信度,分配不同的颜色成功完成对车辆行人等的检测

二、主要监测点
  1. 目标检测:使用YOLO算法对图像或视频中的车辆和行人进行检测,并确定其位置、大小和类别。
  2. 导入所必须的模块,进行初始化,推理:读取网络模型、图像预处理、设置网络、运算
  3. 获取置信度较高的边框、获取候选框的位置、大小
  4.  绘制边框、给每个分类随机分配一个颜色、绘制边框及置信度、分
 三、实施条件

操作系统:Windows

编程环境:Anaconda

开发工具:Jupyter Notebook,Pycharm

第三方模块:matplotlib、keras等       

四、实施步骤
1.导入模块
import cv2
import numpy as np
import matplotlib.pyplot as plt
2、初始化,推理
#初始化、推理
image=cv2.imread("road.image")
plt.imshow(image[:,:,::-1])
plt.show()

#初始化、推理
classes=open('coco.names','rt').read().strip().split("\n")

#步骤1:读取网络模型
net=cv2.dnn.readNetFromDarknet("yolov3.cfg","yolov3.weights")

#步骤2:图像预处理
blob=cv2.dnn.blobFromImage(image,1.0/255.0,(416,416),(0,0,0),True,crop=False)

#步骤3:设置网络
net.setInput(blob)

#步骤4:运算
outInfo=net.getUnconnectedOutLayersNames()
outs=net.forward(outInfo)
结果
3.获取置信度较高的边框,置信度较高的边框相关的三个值:resultIDS、boxes、confidences
resultIDS=[]  #置信度较高的边框对应的分类在classes中的ID值
boxes=[]  #置信度较高的边框集合
confidences=[]  #置信度较高的边框的置信度
(H,W)=image.shape[:2]  #原始图像image的宽、高(辅助图像内各各边框的位置、大小)
for out in outs:  #各个输出层(共三个层,逐层处理)
    for candidate in out:  #每个层中,包含几百个可能的候选框,逐个处理
        scores=candidate[5:]  #先把第5-84个值筛选出来
        classID=np.argmax(scores)  #找到其中最大值对应的索引(位置)
        confidence=scores[classID]  #找到最大的置信度值(概率值)
        #下面开始对置信度大于0.5,小于该值的直接忽略(不做任何处理)
        if confidence>0.5:
            #获取候选框的位置、大小
            #需要注意,位置、大小都是相对原始图像image的百分比形式
            #因此,位置、大小都是相对condidata乘以image的宽度、高度获取
            box=candidate[0:4]*np.array([W,H,W,H])
            (conterX,centerY,width,height)=box.astype("int")
            
            x=int(conterX-(width/2))
            y=int(centerY-(height/2))
            
            boxes.append([x,y,int(width),int(height)])
            confidences.append(float(confidence))
            resultIDS.append(classID)
4.非极大值抑制,将众多重合的边框保留一个最关键的(去重处理)
indexes=cv2.dnn.NMSBoxes(boxes,confidences,0.5,0.4)

#绘制边框
#给每个分类随机分配一个颜色
classesCOLORS=np.random.randint(0,255,size=(len(classes),3),dtype="uint8")
#绘制边框及置信度、分类
for i in range(len(boxes)):
    if i in indexes:
        x,y,w,h=boxes[i]
        color=[int(c) for c in classesCOLORS[resultIDS[i]]]  #边框颜色
        cv2.rectangle(image,(x,y),(x+w,y+h),color,2)
        result="{}:{:.0f}%".format(classes[resultIDS[i]],confidences[i]*100)
        cv2.putText(image,result,(x,y+35),cv2.FONT_HERSHEY_SIMPLEX,1,color,2)
plt.imshow(image[:,:,::-1])
plt.show()

结果:

五、总结

        基于YOLO(You Only Look Once)的目标检测技术是一种高效、实时的计算机视觉方法,它能够在单个前向传播中同时预测图像中多个目标的边界框、置信度以及类别概率,特别适用于车辆、行人等复杂场景下的快速检测。YOLO通过其独特的网络结构和算法设计,不仅保持了高检测精度,还显著提升了处理速度,使得在自动驾驶、智能监控、视频分析等领域具有广泛的应用前景

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅小溪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值