当前位置: 首页 > news >正文

做网站合同模板站长统计官方网站

做网站合同模板,站长统计官方网站,企业组网配置实例,兼职做商务标哪个网站在视频中计数对象可能看起来有挑战性,但借助Python和OpenCV的强大功能,变得令人意外地易于实现。在本文中,我们将探讨如何使用YOLO(You Only Look Once)目标检测模型在视频流或文件中计数对象。我们将该过程分解为简单…

在视频中计数对象可能看起来有挑战性,但借助Python和OpenCV的强大功能,变得令人意外地易于实现。在本文中,我们将探讨如何使用YOLO(You Only Look Once)目标检测模型在视频流或文件中计数对象。我们将该过程分解为简单的步骤,使初学者能够轻松跟随。

本文将分为以下几个部分:

  • 需求

  • 启发式:汽车计数

  • 检测过滤

  • 启发式:实现

  • 结论

需求

在我们深入了解该过程之前,让我们确保已安装所需的库。主要需要:

  • PyTorch:通过PyTorch Hub,我们将访问Ultralytics存储库以下载Yolov5模型。

  • OpenCV:用于加载、操作和显示视频的所有实用程序。

  • Matplotlib(可选):我们将使用此实用程序在多边形内进行点验证。

如代码片段1所示,requirements.txt文件中列出了这些要求。

opencv-python==4.8.1.78
torch==2.1.0
matplotlib==3.8.0
ultralytics==8.0.203
pandas==2.1.2
requests==2.31.0

一旦我们查看了主要要求,就该了解我们将开发用于从视频中计数对象的启发式的时间了。

启发式:汽车计数

在此示例中,我们将使用一个视频场景,其中将对汽车进行计数。图2显示了一个示例帧。

f8379ebc1b86d5af155fa36b51a8fa3c.jpeg用于计数汽车的视频帧

为了计数汽车,我们将使用Yolov5来检测视频中的对象。基于检测到的对象,我们将过滤与汽车、公共汽车和卡车有关的类别。由于检测基于边界框(具有坐标xmin、ymin、xmax、ymax的多边形),我们将需要获取每个边界框的中心点(xc, yc),该中心点将是我们对象的参考点。

最后,我们将绘制一个多边形,该多边形将是计数对象的参考,也就是说,如果对象的参考点在多边形内,我们将增加对象计数器,否则计数器不受影响。在下图中,我们可以看到多边形和多边形内的汽车数量的表示。

98207e5a249b966a7dc9247f3f7cc569.jpeg检测(绿色点)、多边形(红色线)和计数器

到此为止,我们已经知道了需求是什么,以及我们将实施用于计数对象的启发式的方法。现在可以加载模型:Yolov5 Nano

在本例中,我们将使用Yolov5的nano版本(即yolov5n),我们将通过PyTorch Hub从Ultralytics存储库中扩展它。同样,为了加载和在每一帧上生成迭代器,我们将使用OpenCV(即cv2),下述代码是具体的实现方式:

import cv2
import torchVIDEO_PATH="data/traffic.mp4"
HUB="ultralytics/yolov5"
YOLO="yolov5n"def count_cars(cap: cv2.VideoCapture):model = torch.hub.load(HUB, model=YOLO, pretrained=True)while cap.isOpened():status, frame = cap.read()if not status:break# Detection filtering and heuristic# will be implemented here.cv2.imshow("frame", frame)if cv2.waitKey(10) & 0xFF == ord('q'):breakcap.release()if __name__ == '__main__':cap = cv2.VideoCapture(VIDEO_PATH)count_cars(cap)

正如我们所看到的,我们已经定义了count_cars()函数,我们将在整个项目中对其进行更新。在4-6行,我们定义了视频所在路径、hub和模型名称的变量。从那里,让我们迅速跳到31-32行,在那里通过初始化cap对象加载视频,然后将其传递给count_cars()函数。

返回到第10行,通过PyTorch Hub,我们下载并初始化了yolov5n模型。随后,在第12行,我们生成一个迭代器,只要有要显示的帧,它就会保持活动状态。一旦帧完成,与迭代器相关的对象就会被释放(第26行)。

在第13行,我们读取帧,验证是否成功读取,并显示它们(第21行)。在这一部分,将出现一个窗口,用于查看从此迭代器显示的视频。最后,第23行是在按q键时删除弹出窗口。

检测过滤

过滤检测是指从Yolo预测中提取感兴趣的类别的过程。在这种情况下,我们将过滤掉分数大于0.5且类别为汽车、公共汽车或卡车的检测。同样,我们将需要找到边界框的中心点,我们将其用作对象的参考点。下面代码显示了这两个函数的实现。

import pandas as pddef get_bboxes(preds: object):df = preds.pandas().xyxy[0]df = df[df["confidence"] >= 0.5]df = df[df["name"].isin(["car", "bus", "truck"])]return df[["xmin", "ymin", "xmax", "ymax"]].values.astype(int)def get_center(bbox):center = ((bbox[0] + bbox[2]) // 2, (bbox[1] + bbox[3]) // 2)return center

正如我们所看到的,我们定义了两个函数get_bboxes()和get_center()。get_bboxes()函数(第3行)旨在提取所有分数大于0.5并过滤掉已经提到的类别的预测,返回一个坐标形式的边界框的numpy数组[xmin, ymin, xmax, ymax]。

get_center()函数(第10行)接收一个带有边界框坐标的numpy数组,并使用方程xc, yc = (xmin + xmax) // 2, (ymin + ymax) // 2分别计算中心点。

在这一点上,我们已经下载了模型,过滤了预测,并获得了每个对象的中心点。现在,我们唯一需要的是生成决定启发式区域的多边形。因此,让我们继续下一节!

启发式:实现

我们将定义的多边形可能会因视频、透视等而有所不同。在这种情况下,例如此示例,我们将使用8个点,如下图所示:

4e2525de21aa8977c4f9b28aee5fa756.jpeg 具有坐标的多边形 

一旦我们定义了多边形,我们唯一需要做的就是验证每个对象的参考点是否在多边形内。如果在多边形内,我们就会增加一个计数器,如果不在,我们就继续。

import cv2
import numpy as np
import matplotlib.path as mplPathPOLYGON = np.array([[333, 374],[403, 470],[476, 655],[498, 710],[1237, 714],[1217, 523],[1139, 469],[1009, 393],
])def is_valid_detection(xc, yc):return mplPath.Path(POLYGON).contains_point((xc, yc))def count_cars(cap: object):model = torch.hub.load(HUB, model=YOLO, pretrained=True)while cap.isOpened():status, frame = cap.read()if not status:breakpreds = model(frame)bboxes = get_bboxes(preds)detections = 0for box in bboxes:xc, yc = get_center(box)if is_valid_detection(xc, yc):detections += 1

让我们注意到在第5行,我们定义了多边形。在第17行,我们定义了关键函数:is_valid_detection(),它旨在验证参考点(xc, yc)是否在多边形内。这个函数在第37行调用,如果为真,它会增加有效检测计数器,否则什么也不做。

最后,为了可视化,我们将添加一些OpenCV行来显示计数器、每辆检测到的汽车的参考点和多边形。

def count_cars(cap: object):model = torch.hub.load(HUB, model=YOLO, pretrained=True)while cap.isOpened():status, frame = cap.read()if not status:breakpreds = model(frame)bboxes = get_bboxes(preds)detections = 0for box in bboxes:xc, yc = get_center(box)if is_valid_detection(xc, yc):detections += 1# Draw poit of reference for each detectioncv2.circle(img=frame, center=(xc, yc), radius=5, color=(0,255,0), thickness=-1)# Draw bounding boxes for each detectioncv2.rectangle(img=frame, pt1=(box[0], box[1]), pt2=(box[2], box[3]), color=(255, 0, 0), thickness=1)# Draw the countercv2.putText(img=frame, text=f"Cars: {detections}", org=(100, 100), fontFace=cv2.FONT_HERSHEY_PLAIN, fontScale=3, color=(0,0,0), thickness=3)# Draw the polygoncv2.polylines(img=frame, pts=[POLYGON], isClosed=True, color=(0,0,255), thickness=4)# Display framecv2.imshow("frame", frame)

结论

在本文中,我们看到了如何从视频中实现一个对象计数器。我们开发了一种计算汽车、卡车和公共汽车的实现,基于一个定义的多边形,即如果对象在多边形内,计数器就会增加。

·  END  ·

HAPPY LIFE

fe360590b56be8b1fbe76535ccf5bc97.png

本文仅供学习交流使用,如有侵权请联系作者删除

http://www.dt0577.cn/news/48293.html

相关文章:

  • 建设银行杭州招聘网站深圳网
  • 怎么做网站二级页面最新网站查询工具
  • 河南有名的做网站公司有哪些品牌网站建设公司
  • 企业网站的制作与维护南宁白帽seo技术
  • 如何建一个手机网站网址注册在哪里注册
  • 徐州专业制作网站百度收录怎么查询
  • 网站内容采编怎么做自己有域名怎么建网站
  • 合肥网站建设的公司哪家好宁波关键词优化排名工具
  • vultr wordpress引擎优化
  • 电白区住房和城乡建设局网站互联网推广方案
  • 深圳市设计院排名杭州关键词推广优化方案
  • 做营销网站应该要注意些什么seo优化工作内容做什么
  • 从零精通网站建设国际新闻热点事件
  • 南昌有做网站的吗濮阳网站推广
  • 东莞网站优化域名注册查询软件
  • 网站优化怎么样东莞网站制作
  • 北京专业的网站ui设计公司百度推广后台登陆
  • 网站建设制度搜索引擎技术
  • 用html5做的静态网站sem是什么仪器
  • 购物02网站竞价推广托管公司介绍
  • 企业网站建立会计培训班一般多少钱
  • 如何把自己的网站推广抖音热门搜索关键词
  • 网站留言板怎么做长沙靠谱seo优化
  • 烟台网站设计公司网络营销推广的要点
  • ps的logo设计制作成都百度提升优化
  • 电影怎么做bt种子下载网站百度seo竞价推广是什么
  • 什么叫高端网站定制seo建站公司
  • 做网站项目前怎么收集需求网站ip查询
  • 海口做网站公司收费球队排名世界
  • 淘宝客单页网站程序找推网