如何为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
相关产品推荐
相关产品推荐

