YOLOv8 识别框自定义
YOLOv8作为最新的目标检测模型,以其高速和高精度的特点在工业界和学术界受到广泛关注。在实际应用中,我们经常需要对检测到的目标绘制自定义的识别框,以满足特定的需求。本文将详细介绍如何进行自定义YOLOv8进行目标检测返回的图片中的识别框。本文将透过进行自定义绘制果实成熟识别框的例子进行展示。
环境准备
在开始之前,请确保你已经安装了Python环境以及以下库:
- ultralytics
- opencv-python
你可以通过以下命令安装所需的库:
pip install ultralytics opencv-python
检测与自定义框绘制
使用训练好的模型进行检测(我直接的进行使用我已经训练好的模型进行演示):
image_path="图片路径"
# 2.预测
model = YOLO(ORANGE_MODEL_PATH)
# 设置最大抑制 (NMS) 的交叉重叠 (IoU) 为0.4,启用与类别无关的非最大抑制 (NMS):避免类别重合识别标记
predict_result = model.predict(image_path, iou=0.5, agnostic_nms=True)
# 获取到列表的结果对象
result = predict_result[0]
# 3.获取到成熟果实的识别框
mature_boxes = []
ripeNum = 0 # 成熟的果实
count = 0
for box in result.boxes:
cls = int(box.cls[0]) # 获取类别ID
conf = float(box.conf[0]) # 获取置信度
xyxy = box.xyxy[0].tolist() # 获取边界框坐标
# 如果边界框属于成熟果实类别
count += 1
if cls == 0:
# 进行存储到列表中
ripeNum += 1
mature_boxes.append((xyxy, conf))
# 4.将筛选后的识别框进行绘画到图片中
# 将筛选后的边界框绘制在图像上
annotated_image = result.orig_img.copy() # 复制原始图像
# 绘制图像
for xyxy, conf in mature_boxes:
cv2.rectangle(annotated_image, (int(xyxy[0]), int(xyxy[1])), (int(xyxy[2]), int(xyxy[3])), (0, 255, 0), 2)
cv2.putText(annotated_image, f'', (int(xyxy[0]), int(xyxy[1]) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
(0, 255, 0), 2)
# 5.保存最后结果图片
save_dir = r"orangeRipe"
os.makedirs(save_dir, exist_ok=True) # 创建目录,如果它不存在
# 保存的文件路径
save_path = os.path.join(save_dir, "保存的文件文字.jpg")
cv2.imwrite(save_path, annotated_image)
结果对比
直接的进行使用yolov8进行目标检测的结果
进行自定义以后的结果展示
结语
通过本文的教程,你应该能够掌握如何使用YOLOv8进行目标检测,并使用OpenCV绘制自定义的识别框。这为进一步的图像处理和分析提供了基础。更多关于YOLOv8的详细信息和高级特性,可以参考Ultralytics的官方文档和GitHub仓库 。