You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为YOLOv8姿态预测结果自定义保存文件名?

YOLOv8姿态预测结果自定义文件名保存方案

原代码存在路径拼接问题:os.listdir(dir_path)仅返回文件名,直接用cv2.imread(file)会因路径缺失无法读取文件,需先拼接完整路径。以下是两种实现自定义文件名的方案:

方案1:手动保存结果(推荐,完全可控)

不依赖模型的save=True参数,通过results[0].plot()生成带姿态标注的图像,再用cv2.imwrite自定义路径和文件名保存,灵活性最高。

import os
import cv2
from ultralytics import YOLO

model = YOLO("./yolov8x-pose.pt")
img_dir = "你的图片目录绝对/相对路径"
save_root = "/../place"  # 自定义保存根目录

# 确保保存目录存在,不存在则创建
os.makedirs(save_root, exist_ok=True)

for filename in os.listdir(img_dir):
    # 拼接完整图片路径
    full_img_path = os.path.join(img_dir, filename)
    # 跳过非图片格式文件(可选,按需添加更多格式)
    if not filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp')):
        continue
    
    img = cv2.imread(full_img_path)
    results = model(source=img)
    
    # 生成带姿态标注的图像
    annotated_image = results[0].plot()
    
    # 方式1:保留原文件名保存
    save_path = os.path.join(save_root, filename)
    
    # 方式2:自定义文件名(示例:给原文件名加前缀)
    # base_name, ext = os.path.splitext(filename)
    # save_path = os.path.join(save_root, f"pose_detected_{base_name}{ext}")
    
    # 保存标注后的图像
    cv2.imwrite(save_path, annotated_image)

方案2:内置保存后重命名

若坚持使用模型的save=True参数,可在预测完成后找到默认生成的文件并手动重命名。需注意YOLOv8默认会在project目录下创建exp子目录,保存image0.jpg这类递增命名的文件。

import os
import cv2
import shutil
from ultralytics import YOLO

model = YOLO("./yolov8x-pose.pt")
img_dir = "你的图片目录路径"
project_dir = "/../place"
default_exp_dir = os.path.join(project_dir, "exp")

os.makedirs(project_dir, exist_ok=True)

for idx, filename in enumerate(os.listdir(img_dir)):
    full_img_path = os.path.join(img_dir, filename)
    if not filename.lower().endswith(('.png', '.jpg', '.jpeg')):
        continue
    
    img = cv2.imread(full_img_path)
    # 指定project和name,确保每次保存到同一个exp目录
    results = model(source=img, save=True, project=project_dir, name="exp")
    
    # YOLO默认生成的文件名格式为image{索引}.jpg
    default_save_path = os.path.join(default_exp_dir, f"image{idx}.jpg")
    # 目标保存路径(保留原文件名)
    target_path = os.path.join(project_dir, filename)
    
    # 移动并重命名文件
    if os.path.exists(default_save_path):
        shutil.move(default_save_path, target_path)

方案优势对比:方案1无需依赖YOLO的默认保存逻辑,完全自主控制文件名和路径,更适合批量处理场景;方案2需适配YOLO的保存规则,灵活性较低。

内容的提问来源于stack exchange,提问作者foxychev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:15:25