目录

  • 一、实现效果与数据下载链接
  • 二、相应代码
  • 三、yolo原理讲解

一、实现效果与数据下载链接

视频识别效果,链接如下:
https://www.bilibili.com/video/BV1fa4y1p7eg

数据下载链接:https://pan.baidu.com/s/1nm72db7e9GbBR-vQ5bWNAg
提取码:cng5
–>解压后

二、相应代码

video_detection.py

import numpy as np
import cv2
import os
import time
import matplotlib.pyplot as plt
import randomplt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号# 参数
yolo_dir = r'D:\python_project_file\video_recognition\yolov3\data'  # YOLO文件路径
CONFIDENCE = 0.5  # 过滤弱检测的最小概率
THRESHOLD = 0.4  # 非最大值抑制阈值def yolov3_vedio(img, yolo_dir, CONFIDENCE, THRESHOLD):weightsPath = os.path.join(yolo_dir, 'yolov3.weights')  # 权重文件configPath = os.path.join(yolo_dir, 'yolov3.cfg')  # 配置文件labelsPath = os.path.join(yolo_dir, 'coco.names')  # label名称# 加载网络、配置权重net = cv2.dnn.readNetFromDarknet(configPath, weightsPath)  # 利用下载的文件print("[INFO] loading YOLO from disk...")  # 可以打印下信息blobImg = cv2.dnn.blobFromImage(img, 1.0 / 255.0, (416, 416), None, True,False)  # net需要的输入是blob格式的,用blobFromImage这个函数来转格式net.setInput(blobImg)  # 调用setInput函数将图片送入输入层# 获取网络输出层信息(所有输出层的名字),设定并前向传播outInfo = net.getUnconnectedOutLayersNames()  # 前面的yolov3架构也讲了,yolo在每个scale都有输出,outInfo是每个scale的名字信息,供net.forward使用start = time.time()layerOutputs = net.forward(outInfo)  # 得到各个输出层的、各个检测框等信息,是二维结构。end = time.time()print("[INFO] YOLO took {:.6f} seconds".format(end - start))  # 可以打印下信息# 拿到图片尺寸(H, W) = img.shape[:2]# 过滤layerOutputs# layerOutputs的第1维的元素内容: [center_x, center_y, width, height, objectness, N-class score data]# 过滤后的结果放入:boxes = []  # 所有边界框(各层结果放一起)confidences = []  # 所有置信度classIDs = []  # 所有分类ID# 1)过滤掉置信度低的框框for out in layerOutputs:  # 各个输出层for detection in out:  # 各个框框# 拿到置信度scores = detection[5:]  # 各个类别的置信度classID = np.argmax(scores)  # 最高置信度的id即为分类idconfidence = scores[classID]  # 拿到置信度# 根据置信度筛查if confidence > CONFIDENCE:box = detection[0:4] * np.array([W, H, W, H])  # 将边界框放会图片尺寸(centerX, centerY, width, height) = box.astype("int")x = int(centerX - (width / 2))y = int(centerY - (height / 2))boxes.append([x, y, int(width), int(height)])confidences.append(float(confidence))classIDs.append(classID)# 2)应用非最大值抑制(non-maxima suppression,nms)进一步筛掉idxs = cv2.dnn.NMSBoxes(boxes, confidences, CONFIDENCE, THRESHOLD)  # boxes中,保留的box的索引index存入idxs# 得到labels列表with open(labelsPath, 'rt') as f:labels = f.read().rstrip('\n').split('\n')# 应用检测结果np.random.seed(42)COLORS = np.random.randint(0, 255, size=(len(labels), 3),dtype="uint8")  # 框框显示颜色,每一类有不同的颜色,每种颜色都是由RGB三个值组成的,所以size为(len(labels), 3)if len(idxs) > 0:for i in idxs.flatten():  # indxs是二维的,第0维是输出层,所以这里把它展平成1维(x, y) = (boxes[i][0], boxes[i][1])(w, h) = (boxes[i][2], boxes[i][3])color = [int(c) for c in COLORS[classIDs[i]]]cv2.rectangle(img, (x, y), (x + w, y + h), color, 2)  # 线条粗细为2pxtext = "{}: {:.4f}".format(labels[classIDs[i]], confidences[i])print("[INFO] predect result is: ", text)(text_w, text_h), baseline = cv2.getTextSize(text, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 2)cv2.rectangle(img, (x, y - text_h - baseline), (x + text_w, y), color, -1)cv2.putText(img, text, (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0),2)  # cv.FONT_HERSHEY_SIMPLEX字体风格、0.5字体大小、粗细2pxreturn img# 视频路径
video_path = r"D:\python_project_file\video_recognition\yolov3\data\video\test_video.mp4"
# 读取视频
videoCapture = cv2.VideoCapture(video_path)# 获取视频的帧率(FPS,pictures per second)
fps = videoCapture.get(cv2.CAP_PROP_FPS)# 获取视频的帧宽(frame width)和帧高(frame height)size = (int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)), int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
# 为了保存视频,要先指定FourCC编码,该编码可从fourcc.org查到
fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')# 创建一个videoWriter对象
videoWriter = cv2.VideoWriter('out_%d.avi' % (random.randint(1, 10)), fourcc, fps, size)# 通过read读取视频中的每一帧,每一帧是一副基于BGR格式的图像,然后通过write将图像一帧帧写入要保存的视频。可以理解成,读取的每一帧图片存到一列表中,最后一张存完就返回一个False
success, frame = videoCapture.read()
yolov3_vedio(frame, yolo_dir, CONFIDENCE, THRESHOLD)while (True):videoWriter.write(frame)success, frame = videoCapture.read()if success == False:breakyolov3_vedio(frame, yolo_dir, CONFIDENCE, THRESHOLD)videoCapture.release()
videoWriter.release()

三、yolo原理讲解

1、详细原理可以看我的另一篇博客:https://blog.csdn.net/weixin_39615182/article/details/109752498
2、该博主同时在b站进行了讲解,讲的很好,我在他基础上进行归纳总结的:
https://www.bilibili.com/video/BV1XJ411D7wF?p=3

yolov3检测和平精英视频中人物及物体【附源码+数据】相关推荐

  1. 和平精英吃鸡助手微信小程序源码一键设置灵敏度键位捏脸

    这是一款吃鸡小助手类型的微信小程序源码 该小程序由键位,灵敏度,捏脸一键设置组合 小程序内的键位设置,灵敏度设置代码是由各大主播和职业选手那些分享的 然后改小程序通过全网采集而来 另外里面还有捏脸数据 ...

  2. 美!视差滚动在图片滑块中的应用【附源码下载】

    视差滚动(Parallax Scrolling)已经被广泛应用于网页设计中,这种技术能够让原本平面的网页界面产生动感的立体效果.下面分享的这个图片滑块效果是难得一见的结合视差滚动的例子,之前的文章给大 ...

  3. 美!视差滚动特效在图片滑块中的应用【附源码下载】

    视差滚动(Parallax Scrolling)已经被广泛应用于网页设计中,这种技术能够让原本平面的网页界面产生动感的立体效果.下面分享的这个图片滑块效果是难得一见的结合视差滚动的例子,之前的文章给大 ...

  4. 图像sobel梯度详细计算过程_视频处理之Sobel【附源码】

    边缘检测是检测图像中的一些像素点,它们周围的像素点的灰度发生了急剧的变化,我们认为在这过程中,图像中的物体不同导致了这一变化,因此可以将这些像素点作为一个集合,可以用来标注图像中不同物体的边界.边缘区 ...

  5. 视频处理之Sobel【附源码】

    欲观原文,请君移步 边缘检测是检测图像中的一些像素点,它们周围的像素点的灰度发生了急剧的变化,我们认为在这过程中,图像中的物体不同导致了这一变化,因此可以将这些像素点作为一个集合,可以用来标注图像中不 ...

  6. b站学python_Python爬虫学习教程 bilibili网站视频爬取!【附源码】

    python爬虫学习教程,万物皆可爬!每个技术大牛都是从基础慢慢的提升上去的,基础知识越深以后的发展越牛!学好python,才能玩转python,那到底怎么才能学好python? 通过爬取b站案例带领 ...

  7. Android 毕业设计高仿抖音(视频类App)(内附源码)

    背景 抖音这么火,我就想着要不自己也做一个吧,于是就有了我的自制抖音.喜欢的可以点个star或关注一下,以后会保持维护和优化. 主要效果演示 安装包: 整体设计 由于没有接口获取数据,使用的方式是将图 ...

  8. python3网络爬虫--爬取b站视频评论用户信息(附源码)

    文章目录 一.准备工作 1.工具 二.思路 1.整体思路 2.爬虫思路 三.分析网页 1.分析网页加载方式 2.分析数据接口 3.获取oid 四.撰写爬虫 五.存储数据 六.总结 你爱我,我爱你,蜜雪 ...

  9. Silverlight4中右键菜单实现-附源码下载

    在发布Silverlight4 Beta版本和RC时 增加不少新的特性和控件. 类似在WinForm实现右键菜单ContentMenu功能. 在Silverlight 4中也有所体现. 当初在Silv ...

最新文章

  1. Visual Studio插件
  2. Ubuntu常用终端快捷键
  3. boost::coroutine2模块实现协程的测试程序
  4. BOOST_TEST_GT和BOOST_TEST_GE的用法
  5. CentOS7 系统基于Vim8搭建Go语言开发环境
  6. Java多线程之Semaphore用法
  7. 芯片巨头们2019年的AI芯片之争会如何?
  8. 视网膜脱落相关知识(持续更新中)
  9. python_线程、进程和协程
  10. SQLServer 条件查询语句大全
  11. 学习3D图形引擎中使用的基本数学
  12. 如何学会阅读源码,看这篇就够了!
  13. Apple pay 论述
  14. cesium之深圳区域行政图
  15. VB代码窗口鼠标滚轮的使用
  16. redis搭建哨兵模式(哨兵模式原理)
  17. 2021年度训练联盟热身训练赛第三场——C,G,I
  18. 水果店圈子:水果店开业宣传文字怎么发,水果店准备开业怎么发朋友圈
  19. 超融合市场火爆,新华三因何蝉联第一?
  20. 第十七届全国大学生智能车竞赛全国总决赛参赛队伍

热门文章

  1. matlab latex换行,Latex 公式中换行问题
  2. 中国Q4净利3180万美元
  3. java学习路线:入门--进阶--精通的学习方案(书籍推荐)
  4. 超强教程:如何搭建一个 iOS 系统的视频直播 App?
  5. 海思Hi3518e烧录步骤
  6. 什么是可重入函数, 不可重入函数? 哪些原因导致函数不可重入?
  7. element ui 图片加载失败_解决Element UI - el-image 图片初始化加载失败问题
  8. 特斯拉上海工厂预计5月份完工 今年底正式投产
  9. 如何把文字转换成语音?
  10. FineReport帆软测试题1