【新特性演示】YOLOv8实现旋转对象检测

学习《OpenCV应用开发:入门、进阶与工程化实践》一书
做真正的OpenCV开发者,从入门到入职,一步到位!

YOLOv8旋转对象检测

YOLOv8框架在在支持分类、对象检测、实例分割、姿态评估的基础上更近一步,现已经支持旋转对象检测(OBB),基于DOTA数据集,支持航拍图像的15个类别对象检测,包括车辆、船只、典型各种场地等。包含2800多张图像、18W个实例对象。
在这里插入图片描述
在这里插入图片描述
YOLO OBB标注数据格式,主要是类别与四个角点归一化到0~1之间的坐标,格式表示如下:

class_index, x1, y1, x2, y2, x3, y3, x4, y4

训练以后的YOLOv8预测xyhwr + 类别数目,不同尺度的YOLOv8 OBB模型的精度与输入格式列表如下:
图片

导出与预测

基于YOLOv8命令行推理测试:

## 导出
yolo export model=yolov8s-obb.pt format=onnx
## 推理
yolo obb predict model=yolov8n-obb.pt source=plane_03.jpg

在这里插入图片描述
在这里插入图片描述

ONNX推理代码演示

基于OpenVINO2023与ONNX格式模型直接预测推理,首先看一下ONNX格式的YOLOv8-OBB输入与输出格式:
在这里插入图片描述

旋转对象检测-代码演示

class_list = load_classes()
colors = [(255, 255, 0), (0, 255, 0), (0, 255, 255), (255, 0, 0)]

ie = Core()
for device in ie.available_devices:
    print(device)

# Read IR
model = ie.read_model(model="yolov8s-obb.onnx")
compiled_model = ie.compile_model(model=model, device_name="CPU")
output_layer = compiled_model.output(0)

## xywhr
frame = cv.imread("D:/wh860.jpg")
# frame = cv.imread("wh300.jpg")
# frame = cv.imread("obb_01.jpeg")
bgr = format_yolov8(frame)
img_h, img_w, img_c = bgr.shape

start = time.time()
image = cv.dnn.blobFromImage(bgr, 1 / 255.0, (1024, 1024), swapRB=True, crop=False)

res = compiled_model([image])[output_layer] # 1x25x8400
rows = np.squeeze(res, 0).T
boxes, confidences, angles, class_ids = post_process(rows)

indexes = cv.dnn.NMSBoxes(boxes, confidences, 0.25, 0.45)
M = np.zeros((2, 3), dtype=np.float32)
for index in indexes:
    box = boxes[index]
    d1 = -angles[index]
    color = colors[int(class_ids[index]) % len(colors)]
    pts = [(box[0], box[1]), (box[0]+box[2], box[1]), (box[0]+box[2], box[1]+box[3]), (box[0], box[1]+box[3])]
    rrt_pts = get_rotate_point(pts, M, d1, box)
    cv.drawContours(frame, [np.asarray(rrt_pts).astype(np.int32)], 0, (255, 0, 255), 2)
    cv.rectangle(frame, (box[0], box[1] - 20), (box[0] + box[2], box[1]), color, -1)
    cv.putText(frame, class_list[class_ids[index]], (box[0], box[1]-8), cv.FONT_HERSHEY_SIMPLEX, .5, (255, 255, 255))

end = time.time()
inf_end = end - start
fps = 1 / inf_end
fps_label = "FPS: %.2f" % fps
cv.putText(frame, fps_label, (20, 45), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)

cv.imshow("YOLOv8-obb+OpenVINO2023.x Object Detection", frame)
cv.imwrite("D:/wk_result.jpg", frame)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果如下:
在这里插入图片描述
在这里插入图片描述

好书推荐

《OpenCV应用开发:入门、进阶与工程化实践》全书共计16个章节,重点聚焦OpenCV开发常用模块详解与工程化开发实践,提升OpenCV应用开发能力,助力读者成为OpenCV开发者,同时包含深度学习模型训练与部署加速等知识,帮助OpenCV开发者进一步拓展技能地图,满足工业项目落地所需技能提升。购买请点链接:
《OpenCV4 应用开发-入门、进阶与工程化实践》

学习课程有专属答疑群,负责贴身答疑解惑

读者专属QQ群 :657875553
进群暗号:OpenCV4读者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/316538.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【微信小程序独立开发1】项目提出和框架搭建

前言:之前学习小程序开发时仿照别人的页面自己做了一个商城项目和小说项目,最近突发奇想,想从0开发一个关于《宠物日记》的小程序,需求和页面都由自己设计,将在这记录开发的全部流程和过程中遇到的难题等... 1、搭建小…

AI Table应用程序接口表的格式说明和作用

AI Table 首先全拼不是AI人工智能表,而是Application Interface Table应用程序接口表。此表按照AUTOSAR的格式规范去定义,并且使用此Excel 表格生成相应的应用软件组件Arxml文件。下面就让我们按照AUTOSAR_EXP_AIUserGuide.pdf文档官方解释描述文件去看看…

Camtasia2024屏幕录像和视频编辑软件

做网络教学视频,开发微课程,用得最多的就是录屏视频编辑,而在这类软件中我只推荐Camtasia Studio。随着Camtasia Studio的更新,其功能越来越完善,用户界面越来越友好,除了安装更加简单,汉化只需…

51-10 多模态论文串讲—ALBEF 论文精读

今天我们就来过一下多模态的串讲,其实之前,我们也讲了很多工作了,比如说CLIP,还有ViLT,以及CLIP的那么多后续工作。多模态学习在最近几年真的是异常的火爆,那除了普通的这种多模态学习,比如说视…

管桩生产管理系统 | 任务单自动计算了解一下!

库存、生产、运输科学化管理 采用自主研发的数智控制技术 对管桩生产登记、管桩配料 管桩混凝土分料生产过程进行管理 不仅能管生产 对于成品库存、管桩运输思伟都有 对应系统模块支持科学管理 系统提升管桩量产效率至少 30% 降低人工重复工作量 60% 给您 100% 畅快体验 …

【开源】基于JAVA的固始鹅块销售系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 鹅块类型模块2.3 固始鹅块模块2.4 鹅块订单模块2.5 评论管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 鹅块类型表3.2.2 鹅块表3.2.3 鹅块订单表3.2.4 鹅块评论表 四、系统展示五、核心代码5.…

Ansible的切片特性与多机器选取

一、【概述】 本文介绍一下Ansible的多机器选取和切片特性,这个还是一个比较有用的技巧,可以快速选取仓库中我们需要的机器清单。 因为该特性可能与其他工具语法稍微有些不一样,时间长了会忘,值得记录一下 二、【具体说明】 1…

【Maven】005-基于 IDEA 进行 Maven 依赖管理

【Maven】005-基于 IDEA 进行 Maven 依赖管理 文章目录 【Maven】005-基于 IDEA 进行 Maven 依赖管理一、Maven 依赖管理二、GAVP 再说明三、Maven 工程依赖管理配置1、依赖配置2、版本统一声明和使用3、依赖范围说明4、Maven工程依赖下载失败错误解决(重点&#xf…

行为驱动测试 python + behave

行为驱动,Behave-Driven Development,简称BDD。在行为驱动中运用结构化的自然语言描述场景测试,然后将这些结构化的自然语言转化为可执行的测试脚本或者其他形式。BDD的一种优势是,它建立了一种通用语言,而这种语言可以…

【Java SE语法篇】5.方法

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 文章目录 0. 前言1. 方法的概念和使用1.1 什么是方法1.2 方法…

Android开发基础(二)

Android开发基础(二) 上篇主要描述了Android系统架构,代码是通过Java表示的; 本篇将从介绍Android组件去理解Android开发,代码将对Java和Kotlin进行对比。 Android组件 Android应用程序由一些零散的有联系的组件组成…

SQL Server的彻底卸载的方式

这篇文章主要介绍了SQL Server的彻底卸载的方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教 SQL Server的彻底卸载与再次安装 可能大家已经有深刻体会,SQL Server的卸载十分繁琐。最让人头…

时间序列数据库选型: influxdb; netdiscover列出docker实例们的ip,docker管理工具lazydocker、scope

influxdb influxdb: 有收费版本、有开源版本 influxdb 安装、启动(docker) docker run -itd --name influxdb-dev -p 8086:8086 influxdb #influxdb的web客户端(端口8003)被去掉了 #8006是web-service端口#docker exec -it influxdb-dev bashinfluxdb 自带web界面 从后面的…

3年测试经验,用例设计竟然不知道状态迁移法?

3年测试经验,用例设计竟然不知道状态迁移法? 1、概念 状态迁移法主要关注在测试状态转移的正确性上面。对于一个有限状态机,通过测试验证其在给定的条件内是否能够产生需要的状态变化,有没有不可达的状态和非法的状态&#xff0c…

如何在 Windows 10、11 上恢复删除、未保存或覆盖的 Excel 文件?

我们中的大多数人可能都经历过其中一种情况——关闭电源时未保存 Excel 文件或误点击“不要保存”,不小心删除了重要的 Excel 文件,或覆盖了 Excel 文件而未保存原始副本。在遇到这些情况时,我们都会为没有采取适当的措施而感到内疚&#xff…

单片机原理及应用:定时器/计数器综合应用

本文是《单片机原理及应用》专栏中的最后一篇文章,笔者以编译器的安装配置——51单片机简介——LED和数码管外设——开关和按键控制功能切换——外部中断系统——定时器与计数器为知识大纲,介绍了C语言编程控制51单片机的入门教程。作为收尾,…

SQL性能分析-整理

昨日对MySQL的索引整理了一份小文档,对结构/分类/语法等做了一个小总结,具体文章可点击:MySQL-索引回顾,索引知识固然很重要,但引入运用到实际工作中更重要。 参考之前的文章:SQL优化总结以及参考百度/CSDN…

java方法的定义和使用

方法 今日目标: 能够知道方法的好处 能够根据两个明确分析方法的参数和返回值 能够编写方法完成授课案例,并在主方法中完成方法的调用 能够知道方法重载及其特点 1:方法的定义和使用 1.1 方法概述 方法(method):就是完成特…

C++进阶--AVL树

AVL树 一、AVL树的概念二、AVL树节点的定义三、AVL树的插入四、AVL树的旋转4.1 左单旋4.2 右单旋4.3 左右双旋4.4 右左双旋 五、AVL树的验证六、AVL树的删除七、AVL树的性能 一、AVL树的概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退…

第8章-第6节-Java中字符流的缓冲流

1、在说正题之前,先说一个小细节,不管是字节流还是字符流都要注意这个细节,具体看这篇博文:关于Java的IO流里面的方法read()的小细节 2、字符流的缓冲流: 1)、BufferedWriter 方法名说明void newLine()写…