YOLOv5区域入侵检测【附完整代码以及视频演示】

2023-10-29

一、前期准备:

首先你需要有一份yolov5的官方源码,并且能够找到其中的detect.py文件即可。

在检测过程中,有些项目不需要我们检测所有的区域,比如禁止区域的入侵检测,只需要检测制定规划出来的区域就可以。例如下图所示这样,在网上随便找的一段视频,这是其中的一张截图:

二、区域检测原理分析

在使用YOLOv5的有些时候,我们会遇到一些具体的目标检测要求,比如要求不检测全图,只在规定的区域内才检测。所以为了满足这个需求,可以使用掩码操作去覆盖掉不想检测的区域,使得在检测的时候,只检测我们规定的检测范围。

1、确定区域检测范围

 # mask for certain region
        #1,2,3,4 分别对应左上,右上,右下,左下四个点
        hl1 = 1.4 / 10 #监测区域高度距离图片顶部比例
        wl1 = 6.4 / 10 #监测区域高度距离图片左部比例
        hl2 = 1.4 / 10  # 监测区域高度距离图片顶部比例
        wl2 = 6.8 / 10  # 监测区域高度距离图片左部比例
        hl3 = 4.5 / 10  # 监测区域高度距离图片顶部比例
        wl3 = 7.6 / 10  # 监测区域高度距离图片左部比例
        hl4 = 4.5 / 10  # 监测区域高度距离图片顶部比例
        wl4 = 5.5 / 10  # 监测区域高度距离图片左部比例

2、在135行左右的位置:for path, img, im0s, vid_cap in dataset: 下插入代码: 

        # mask for certain region
        #1,2,3,4 分别对应左上,右上,右下,左下四个点
        hl1 = 1.6 / 10 #监测区域高度距离图片顶部比例
        wl1 = 6.4 / 10 #监测区域高度距离图片左部比例
        hl2 = 1.6 / 10  # 监测区域高度距离图片顶部比例
        wl2 = 6.8 / 10  # 监测区域高度距离图片左部比例
        hl3 = 4.5 / 10  # 监测区域高度距离图片顶部比例
        wl3 = 7.6 / 10  # 监测区域高度距离图片左部比例
        hl4 = 4.5 / 10  # 监测区域高度距离图片顶部比例
        wl4 = 5.5 / 10  # 监测区域高度距离图片左部比例
        if webcam:
            for b in range(0,img.shape[0]):
                mask = np.zeros([img[b].shape[1], img[b].shape[2]], dtype=np.uint8)
                #mask[round(img[b].shape[1] * hl1):img[b].shape[1], round(img[b].shape[2] * wl1):img[b].shape[2]] = 255
                pts = np.array([[int(img[b].shape[2] * wl1), int(img[b].shape[1] * hl1)],  # pts1
                                [int(img[b].shape[2] * wl2), int(img[b].shape[1] * hl2)],  # pts2
                                [int(img[b].shape[2] * wl3), int(img[b].shape[1] * hl3)],  # pts3
                                [int(img[b].shape[2] * wl4), int(img[b].shape[1] * hl4)]], np.int32)
                mask = cv2.fillPoly(mask,[pts],(255,255,255))
                imgc = img[b].transpose((1, 2, 0))
                imgc = cv2.add(imgc, np.zeros(np.shape(imgc), dtype=np.uint8), mask=mask)
                #cv2.imshow('1',imgc)
                img[b] = imgc.transpose((2, 0, 1))

        else:
            mask = np.zeros([img.shape[1], img.shape[2]], dtype=np.uint8)
            #mask[round(img.shape[1] * hl1):img.shape[1], round(img.shape[2] * wl1):img.shape[2]] = 255
            pts = np.array([[int(img.shape[2] * wl1), int(img.shape[1] * hl1)],  # pts1
                            [int(img.shape[2] * wl2), int(img.shape[1] * hl2)],  # pts2
                            [int(img.shape[2] * wl3), int(img.shape[1] * hl3)],  # pts3
                            [int(img.shape[2] * wl4), int(img.shape[1] * hl4)]], np.int32)
            mask = cv2.fillPoly(mask, [pts], (255,255,255))
            img = img.transpose((1, 2, 0))
            img = cv2.add(img, np.zeros(np.shape(img), dtype=np.uint8), mask=mask)
            img = img.transpose((2, 0, 1))

3、画检测区域线 :在196行: p, s, im0, frame = path, ‘’, im0s.copy(), getattr(dataset, ‘frame’, 0) 后添加

            if webcam:  # batch_size >= 1
                p, s, im0, frame = path[i], f'{i}: ', im0s[i].copy(), dataset.count
                cv2.putText(im0, "Detection_Region", (int(im0.shape[1] * wl1 - 5), int(im0.shape[0] * hl1 - 5)),
                            cv2.FONT_HERSHEY_SIMPLEX,
                            1.0, (255, 255, 0), 2, cv2.LINE_AA)

                pts = np.array([[int(im0.shape[1] * wl1), int(im0.shape[0] * hl1)],  # pts1
                                [int(im0.shape[1] * wl2), int(im0.shape[0] * hl2)],  # pts2
                                [int(im0.shape[1] * wl3), int(im0.shape[0] * hl3)],  # pts3
                                [int(im0.shape[1] * wl4), int(im0.shape[0] * hl4)]], np.int32)  # pts4
                # pts = pts.reshape((-1, 1, 2))
                zeros = np.zeros((im0.shape), dtype=np.uint8)
                mask = cv2.fillPoly(zeros, [pts], color=(0, 165, 255))
                im0 = cv2.addWeighted(im0, 1, mask, 0.2, 0)
                cv2.polylines(im0, [pts], True, (255, 255, 0), 3)
                # plot_one_box(dr, im0, label='Detection_Region', color=(0, 255, 0), line_thickness=2)
            else:
                p, s, im0, frame = path, '', im0s.copy(), getattr(dataset, 'frame', 0)
                cv2.putText(im0, "Detection_Region", (int(im0.shape[1] * wl1 - 5), int(im0.shape[0] * hl1 - 5)),
                            cv2.FONT_HERSHEY_SIMPLEX,
                            1.0, (255, 255, 0), 2, cv2.LINE_AA)
                pts = np.array([[int(im0.shape[1] * wl1), int(im0.shape[0] * hl1)],  # pts1
                                [int(im0.shape[1] * wl2), int(im0.shape[0] * hl2)],  # pts2
                                [int(im0.shape[1] * wl3), int(im0.shape[0] * hl3)],  # pts3
                                [int(im0.shape[1] * wl4), int(im0.shape[0] * hl4)]], np.int32)  # pts4
                # pts = pts.reshape((-1, 1, 2))
                zeros = n
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

YOLOv5区域入侵检测【附完整代码以及视频演示】 的相关文章

随机推荐

  • 阿里云8888端口设置安全组,宝塔控制台显示链接失败

    问题 阿里云8888端口设置安全组 宝塔控制台显示链接失败 解决思路 在服务器ssh执行 etc init d bt restart 重启宝塔服务 刷新页面以能正常访问
  • CephFS 介绍及使用经验分享

    目录 Ceph架构介绍 NFS介绍 分布式文件系统比较 CephFS介绍 MDS介绍 5 1 单活MDS介绍 5 2 单活MDS高可用 CephFS遇到的部分问题 6 1 客户端缓存问题 6 2 务端缓存不释放 6 3 客户端夯住或者慢查询
  • Socket 中级篇(一)Socket断开后要自动重连的常用几种方法:Connected、心跳包、recv()返回值==-1等等。

    第一章 简介 抛出问题 参考 https www cnblogs com youxin p 4056041 html 功能方面比较简单就是client端与server端建立连接 然后发送消息给server 我在server端会使用专门的线程
  • OLED透明屏安装指南:准备工作、步骤和注意事项

    随着科技的不断发展 OLED透明屏作为一种新型的显示技术 逐渐得到了广泛的应用 OLED透明屏具有高透明度 高亮度和广视角等优势 可以实现透明显示效果 为商业展示 户外广告等领域提供了更广阔的空间 然而 正确的安装方法对于保证OLED透明屏
  • 自动火焰识别项目总结

    步骤分为图像获取 gt 图像预处理 gt 火焰图像分割 gt 火焰图像特征提取 gt 火焰识别 1 图像获取 视频或图片 2 图像预处理 预处理过程一般有数字化 几何变换 归一化 平滑 复原和增强等步骤 图像变换 图像增强 图像去噪 图像压
  • java实现文件下载功能

    目录 单个下载 流 1 设置响应类型和头信息 2 实现文件输出 单个下载 本地文件 1 文件读取 2 设置响应类型和头信息 3 实现文件输出 单个下载 网络文件 1 与服务器建立连接 2 设置响应类型和头信息 3 实现文件输出 压缩ZIP下
  • 第十二届蓝桥杯大赛模拟赛(网上最后一题题解大部分是错的)

    第十题 问题描述 小蓝在一个 n 行 m 列的方格图中玩一个游戏 开始时 小蓝站在方格图的左上角 即第 1 行第 1 列 小蓝可以在方格图上走动 走动时 如果当前在第 r 行第 c 列 他不能走到行号比 r 小的行 也不能走到列号比 c 小
  • 2020年,为什么你该学PHP?!!

    1676对于编程初学者来说一个开发顺手的代码编辑器很重要 可大多数人不了解代码编辑器有哪些 网上有很多种代码编辑器推荐 但是不知道这些代码编辑器哪个好用 所以 今天php中文网就为初学者推荐2020最好用的8个代码编辑器 代码编辑器排行榜
  • 聚类算法——KMeans算法(机器学习)

    KMeans算法 一 输入参数 n clusters 数据集将被划分成 n clusters个 簇 即k值以及 int optional default 8 一般需要选取多个k值进行运算 并用评估标准判断所选k值的好坏 以获得较好的聚类效果
  • 基于消息中间件解决分布式事务的开源框架Myth

    基于消息中间件的解决分布式事务框架 https github com yu199195 myth 1 rpc框架支持 dubbo motan springcloud 2 消息中间件支持 jms activimq amqp rabbitmq
  • uboot启动——lowlevel_init函数详解

    1 将lr寄存器中的值压栈 push lr lr寄存器保存的是函数返回地址 每个模式下只有一个lr寄存器 如果涉及多重函数调用 则lr寄存器会被覆盖 导致返回地址丢失 在之前已经初始化栈 所以这里可以将lr寄存器压栈 将来函数返回的时候再弹
  • 【网络】初识网络

    Linux初识网络 文章目录 Linux初识网络 网络 协议 协议分层 OSI七层模型 TCP IP五层 四层 模型 网络传输基本流程 数据包封装和分用 网络中的地址管理 IP地址 MAC地址 网络 协议 协议 是一种约定 计算机之间的传输
  • 基于YOLOv3算法的交通标志识别系统实现流程(个人学习笔记,仅当参考!!)

    总流程 安装darknet 本文利用linux操作系统上安装的Darknet开源轻型深度学习框架 为了提高训练速度利用CUDA和OPENCV 进行编译 完成对YOLO v3算法LISA数据集中四类不同的交通标志的训练及测试 实现对视频中运动
  • C#开发环境准备

    开发准备 1 安装visual studio code vscode 2 然后vscode的插件库安装 C Dev Kit 该插件会自动安装 C extension 和 IntelliCode for C Dev Kit 该插件需要安装 N
  • BeautifulSoup库的基本使用

    BeautifulSoup库的基本使用 1 库的基本使用 1 1 安装库 1 2 导入库 1 3 不同文件操作 2 获取html结构化数据 3 节点操作 3 1 获取子节点 3 2 获取节点内容 3 2 1 单个内容 3 2 2 多个内容
  • 华为OD机试真题 Java 实现【最多几个直角三角形】【2023Q1 100分】

    一 题目描述 有 N 条线段 长度分别为 a 1 a n 现要求你计算这 N 条线段最多可以组合成几个直角三角形 每条线段只能使用一次 每个三角形包含三条线段 二 输入描述 第一行输入一个正整数 T 1 lt T lt 100 表示有组测试
  • 多线程实现一分钟插入1000万条数据

    首先我们需要建立一个线程类 继承Thread类 并实现run方法 1 获取数据库连接 2 编写插入的sql语句 3 关闭自动提交 conn setAutoCommit false 4 编写for循环 跟着那个的插入方法一样 5 将注入的信息
  • L1-025 正整数A+B(java)

    1 题目详情 题的目标很简单 就是求两个正整数A和B的和 其中A和B都在区间 1 1000 稍微有点麻烦的是 输入并不保证是两个正整数 输入格式 输入在一行给出A和B 其间以空格分开 问题是A和B不一定是满足要求的正整数 有时候可能是超出范
  • 历史辩证唯物主义下的金融业发展的思考*

    历史辩证唯物主义下的金融业发展的思考 摘要 从历史唯物主义的角度来 金融是人类生产力发展到一定阶段的产物 金为黄金 融意味着分开流通之意 金融不是纯主观知识体系 而是基于客观经济规律的产物 是在不断的金融创新和协调金融风险的矛盾中逐渐完善
  • YOLOv5区域入侵检测【附完整代码以及视频演示】

    一 前期准备 首先你需要有一份yolov5的官方源码 并且能够找到其中的detect py文件即可 在检测过程中 有些项目不需要我们检测所有的区域 比如禁止区域的入侵检测 只需要检测制定规划出来的区域就可以 例如下图所示这样 在网上随便找的