简介:

目标检测在生活中应用领域非常广泛,列如:道路违规抓拍、未戴口罩识别、工地未佩戴安全帽抓拍、厨房出现老鼠检测。
还可以用在游戏辅助外挂。以枪战为例,在游戏过程中时刻检测有没有人头出现。当检测到目标人头,再调用鼠标把枪口焦点移动到人头的位置,实现爆头效果。
本案例对yolov5官方代码进行了缩减,留下精华的部分,并封装成类。
yolov5默认模型支持80种目标检测,具体类型在文章最后。如果需要检测其他的目标,就需要自己收集数据进行数据标注,再重新训练新的模型。


1.参数初始化

def __init__(self):# classes,模型训练的时候每种目标都有自己的一个标识,类型数字从0开始。这里不指定,默认全部检测。self.classes = None# 加载pt模型self.weights = 'yolov5s.pt'self.imgsz = [640, 640]# 置信度,检测目标小于这个值的将不会被识别出来self.conf_thres = 0.5self.iou_thres = 0.45# Load modelself.device = select_device('')self.model = DetectMultiBackend(self.weights, device=self.device, dnn=False, fp16=False)self.stride, self.names, self.pt = self.model.stride, self.model.names, self.model.ptself.imgsz = check_img_size(self.imgsz, s=self.stride)self.model.warmup(imgsz=(1, 3, *self.imgsz))

2.算法推理

def detect(self, im0s):# 将图片缩放到640的大小进行识别img = letterbox(im0s, new_shape=(640, 640), stride=self.stride, auto=self.pt)[0]# Convertimg = img.transpose((2, 0, 1))[::-1]  # HWC to CHW, BGR to RGBimg = np.ascontiguousarray(img)im = torch.from_numpy(img).to(self.device)im = im.half() if self.model.fp16 else im.float()  # uint8 to fp16/32im /= 255if len(im.shape) == 3:im = im[None]pred = self.model(im, augment=False, visualize=False)pred = non_max_suppression(pred, self.conf_thres, self.iou_thres, self.classes, False, max_det=300)dets = []for i, det in enumerate(pred):# im0 为原图im0 = im0s.copy()if len(det):# 检测是以640进行的,所以需要把比例放到原图一样;det[:, :4] = scale_coords(im.shape[2:], det[:, :4], im0.shape).round()for *xyxy, conf, cls in reversed(det):c = int(cls) # 检测目标对应的名称# xyxy 包含了目标的坐标dets.append([int(xyxy[0]), int(xyxy[1]), int(xyxy[2]), int(xyxy[3]), self.names[c], f'{conf:.2f}'])

3.调用算法:


from detect import SmokeUtil
import cv2
su = SmokeUtil()if __name__ == "__main__":#1.视频cap = cv2.VideoCapture('target.mp4')while True:success, frame = cap.read()if not success:breakdets = su.detect(frame)if len(dets) > 0:for j in dets:cv2.rectangle(frame, (j[0], j[1]), (j[2], j[3]), (11, 44, 55), 3)cv2.imshow('show', frame)if cv2.waitKey(1) == ord('q'):breakcap.release()cv2.destroyAllWindows()# 2.图片frame = cv2.imread('1.jpg')dets = su.detect(frame) #所有识别处理的坐标、名称、置信度if len(dets) > 0:for j in dets:cv2.rectangle(frame, (j[0], j[1]), (j[2], j[3]), (0,255,0), 3)cv2.imwrite('2.jpg', frame)

4.检测效果——以大象为检测目标:

(原图)

(检测效果)

5.视频流检测——车辆检测

6.支持检测类型

['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck',
'boat', 'traffic light', 'fire hydrant', 'stop sign', 'parking meter', 'bench',
'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra','giraffe',
'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard',
'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl',
'banana', 'apple', 'sandwich', 'orange', 'broccoli','carrot', 'hot dog', 'pizza',
'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'dining table', 'toilet',
'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', 'oven',
'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
'hair drier', 'toothbrush']

yolov5 目标检测算法相关推荐

  1. 基于高通SNPE推理引擎的yolov5目标检测算法

    上图源自Snapdragon Neural Processing Engine SDK Reference Guide,它展示了一个Deep Learning Neural Network在SNPE环 ...

  2. 【快速入门】YOLOv5目标检测算法

    文章目录 一.YOLOv5简介 二.网络结构 1.Input 2.Backbone 3.Neck 4.Head 三.改进方法 1.自适应锚框计算 2.自适应灰度填充 四.性能表现 五.YOLOv5入门 ...

  3. Ubuntu20.04部署yolov5目标检测算法,无人车/无人机应用

    在FireFly RK3588开发板上烧录了Ubuntu20.04系统,在此基础上线部署下简单的Python版本yolov5代码,目前博主已全部转为C++版本了,并且转化了pt模型为rknn模型,调用 ...

  4. YOLOv3目标检测算法——通俗易懂的解析

    目录 YOLOv3目标检测算法 前沿 一.YOLOv3 二.损失函数 YOLOv3目标检测算法 前沿 前两篇文章我们讲了下关于YOLOv1和YOLOv2的原理,有不懂的小伙伴可以回到前面再看看: YO ...

  5. 目标检测算法——YOLOV7——详解

    1.主要贡献 主要是现有的一些trick的集合以及模块重参化和动态标签分配策略,最终在 5 FPS 到 160 FPS 范围内的速度和准确度都超过了所有已知的目标检测器. 当前目标检测主要的优化方向: ...

  6. 深度学习100例 | 第51天-目标检测算法(YOLOv5)(入门篇)

    大家好,我是『K同学啊』! 拖了好久,终于要开始目标检测系列了.自己想过好几次,想尽快出几期目标检测算法的博客教程,但是一直苦于不知道如何写,才能让大家轻松.快速.高效的入门目标检测算法.这段时间终于 ...

  7. 干货|基于深度学习的目标检测算法面试必备(RCNN~YOLOv5)

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨不出名的小金@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/35406 ...

  8. 目标检测论文解读复现之十五:基于YOLOv5的光学遥感图像舰船 目标检测算法

    前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文,帮 ...

  9. (20)目标检测算法之YOLOv5计算预选框、详解anchor计算

    目标检测算法之YOLOv5计算预选框.详解anchor计算 单节段目标检测算法中:预选框的设定直接影响最终的检测精度 众所周知,yolov5中采用自适应调整预选框anchor的大小,但万事开头难,配置 ...

最新文章

  1. React学习笔记3:React脚手架
  2. RDKit | 基于主成分分析可视化(DrugBank)类药性的化学空间
  3. fatal error: Python.h: No such file or directory 解决
  4. 维基链(WICC)当前币值应该还远远没有达到它本身应有的高度
  5. java 同步块 抛出异常_不把 wait 放在同步块中,为啥这种情况不会抛出 IllegalMonitorStateException?...
  6. java选择题答案_Java习题附答案
  7. Deep Learning学习 之 CNN代码解析(MATLAB)
  8. 记Booking.com iOS开发岗位线上笔试
  9. 图片优化_Web 性能优化: 图片优化让网站大小减少 62%
  10. java 观察者模式示例_观察者设计模式示例
  11. 中小学计算机教育的重要性,信息技术在小学教育中重要性.doc
  12. C++ 抛出异常与传递参数的区别
  13. vsftpd单用户多目录配置
  14. Java语言实现自动关机程序
  15. c++ - 虚函数表
  16. editormd图片编辑( 结合SpringBoot 实现)
  17. js实现软键盘(兼容所有浏览器)
  18. linux sticky权限,Linux基础入门篇之文件高级权限suid,sgid,sticky
  19. Python开发——做一个简单的【表白墙】网站
  20. 数据库原理第二章测验(标黑的为答案)

热门文章

  1. 7-3 电话聊天狂人 (25 分)
  2. 搜索计算机无法输入法,电脑输入法不能切换怎么办 电脑输入法中英文切换不了解决方法...
  3. C#操作Access数据库(vs2019)
  4. redis的常用类型
  5. 测试emmc读写速度软件,真机闪存实测:闪存读取速度到底什么鬼差距有多大建议收藏...
  6. effective morden c++4
  7. Microsoft 离线翻译引擎介绍
  8. 充分利用 cpu_如何充分利用云
  9. 象棋棋谱xqf工具包 v2.02 绿色
  10. 电机专题1:电机原理