这里我们介绍如何通过YOLOv8-obb模型来检测旋转的物体,常用于停车场车辆、卫星图像、航拍船舶、工业零件等场景。
首先安装YOLO,这里选择的版本是8.1.3
。接着下载对应的模型:
wget https://github.com/ultralytics/assets/releases/download/v8.1.0/yolov8m-obb.pt
之后是对应的代码:
import cv2
import math
import numpy as np
from ultralytics import YOLO
img_path = "https://ultralytics.com/images/boats.jpg"
img = cv2.imread(img_path)
model = YOLO("/path/to/yolov8m-obb.pt")
results = model(img_path)
for result in results:
xywhr = result.obb.xywhr
cls_int = result.obb.cls.int()
for elem,i in zip(xywhr,cls_int):
if i == 1:
x,y,w,h,r=elem
angle_degrees = math.degrees(r)
rect = ((x,y),(w,h),angle_degrees)
box = cv2.boxPoints(rect)
box = np.int0(box)
cv2.drawContours(img, [box], 0, (0,0,255), 2)
cv2.imshow("Image",img)
cv2.waitKey(0)
我们将弧度转换为角度,之后使用boxPoints计算旋转后的点的坐标,通过drawContours绘制其边框而不是使用rectangle函数。
其结果如下:
可以看到大体上可以较好的将船标记出来,有些地方还有待加强。
参考文章:
https://docs.ultralytics.com/zh/models/yolov8/#performance-metrics
如果喜欢这篇文章或对您有帮助,可以:[☕] 请我喝杯咖啡 | [💓] 小额赞助


