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

yolov8 区域声光报警+计数

yolov8 区域报警+计数

  • 1. 基础
  • 2. 报警功能
    • 2. 1声音报警代码
    • 2. 2画面显示报警代码
  • 3. 完整代码
  • 4. 源码

1. 基础

本项目是在 yolov8 区域多类别计数 的基础上实现的,具体区域计数原理可见上边文章

2. 报警功能

设置一个区域region_points,当行人这一类别进入该区域范围内,会触发报警系统,产生警报

2. 1声音报警代码

pygame.mixer.init()  # 初始化
pygame.mixer.music.load('out.wav')  # 加载报警音源
pygame.mixer.music.set_volume(1)   # 设置声音
pygame.mixer.music.play()  # 播放音乐

2. 2画面显示报警代码

text = "ALARM"
cv2.putText(annotated_frame, text, (600, 300), cv2.FONT_ITALIC, 2.0,(0, 0, 255), 3)

请添加图片描述

3. 完整代码


import cv2
import numpy as np
from ultralytics import YOLO
import pygamedef is_inside_region(point, region_points):"""判断点是否在指定区域内"""return cv2.pointPolygonTest(np.array(region_points), point, False) >= 0def detect():model = YOLO("yolov8n.pt")cv2.namedWindow('region couter', cv2.WINDOW_NORMAL)cv2.resizeWindow('region couter', 960, 540)  # 设置宽高cap = cv2.VideoCapture('ultralytics/assets/people.mp4')out_video = cv2.VideoWriter('output.avi', cv2.VideoWriter_fourcc(*'XVID'), 30, (1920, 1080))region_points = [(640, 270), (640, 540), (1280, 540), (1280, 270)]region_points_np = np.array(region_points)assert cap.isOpened(), "Error reading video file"while cap.isOpened():success, im0 = cap.read()if not success:print("Video frame is empty or video processing has been successfully completed.")breaktracks = model.track(im0, persist=True)annotated_frame = tracks[0].plot()boxes = tracks[0].boxes.datacount_class1 = 0count_class2 = 0for i, box in enumerate(boxes):x1, y1, x2, y2 = box[:4]x_center = (x1 + x2) / 2y_center = (y1 + y2) / 2center_point = (int(x_center), int(y_center))if is_inside_region(center_point, region_points):if box[-1] == 0:  # 类别1的标签.人count_class1 += 1pygame.mixer.init()pygame.mixer.music.load('out.wav')pygame.mixer.music.set_volume(1)pygame.mixer.music.play()text = "ALARM"cv2.putText(annotated_frame, text, (960, 400), cv2.FONT_ITALIC, 2.0,(0, 255, 255), 3)elif  box[-1] == 2:  # 类别2的标签,车count_class2 += 1# cv2.polylines(annotated_frame, [region_points_np], isClosed=True, color=(255, 0, 0), thickness=2)region_mask = np.zeros_like(annotated_frame)cv2.fillPoly(region_mask, [region_points_np], color=(255, 0, 0))# 使用透明度将填充后的区域与原始帧混合alpha = 0.3  # 调整透明度annotated_frame = cv2.addWeighted(annotated_frame, 1 - alpha, region_mask, alpha, 0)print("Number of objects in class 1:", count_class1)print("Number of objects in class 2:", count_class2)cv2.imshow("region couter", annotated_frame)out_video.write(annotated_frame)if cv2.waitKey(1) == ord('q'):breakout_video.release()cap.release()cv2.destroyAllWindows()
if __name__ == '__main__':detect()

4. 源码

下载链接:https://download.csdn.net/download/qq_45077760/89212535

有问题可以在评论区交流

http://www.lryc.cn/news/341259.html

相关文章:

  • 《QT实用小工具·五十五》带有标签、下划线的Material Design风格输入框
  • 用Go实现一个无界资源池
  • Apache Seata基于改良版雪花算法的分布式UUID生成器分析2
  • 13、揭秘JVM垃圾回收器:面试必备知识,你掌握了吗?
  • 治疗耳鸣患者案例分享第二期
  • 数据加密的方法
  • Android BINDER是干嘛的?
  • 运维各种中间件的手动安装(非常详细)
  • 【Android】Android应用性能优化总结
  • FBA头程海运发货流程是怎样的?
  • 二、VLAN原理和配置
  • stackqueue类——适配器模式 双端队列deque(C++)
  • SpringCloud知识点梳理
  • 【NOI】C++程序结构入门之分支结构二
  • web自动化系列-使用普通模式编写测试用例以及存在问题(十六)
  • VSCode 配置 Qt 开发环境
  • 【Jenkins】持续集成与交付 (七):Gitlab添加组、创建用户、创建项目和源码上传到Gitlab仓库
  • L1-017 到底有多二
  • 常用语音识别开源四大工具:Kaldi,PaddleSpeech,WeNet,EspNet
  • python笔记 | 哥德巴赫猜想
  • IO基础-IO多路复用基础
  • Python机器学习项目开发实战:如何进行人脸识别
  • 管理能力学习笔记五:识别团队角色,因才施用
  • Real3DPortrait照片对口型,数字人,音频/视频驱动数字人
  • Stable Diffusion之Ubuntu下部署
  • LeetCode-15-三数之和问题
  • springboot2集成东方通tongweb嵌入式版
  • 【二分查找】Leetcode 33. 搜索旋转排序数组【中等】
  • Zephyr Windows开发环境搭建
  • 如何安全地设置MySQL数据库的IP白名单