Files
ailai_image_point_diff/ailai_pc/divid_conf—box.py
2025-12-28 00:12:46 +08:00

66 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import cv2
import os
import shutil
from ultralytics import YOLO
# ====================== 配置 ======================
MODEL_PATH = 'point.pt'
IMAGE_SOURCE_DIR = '/media/hx/04e879fa-d697-4b02-ac7e-a4148876ebb0/dataset/1/ailaipoint'
OUTPUT_ROOT = '/media/hx/04e879fa-d697-4b02-ac7e-a4148876ebb0/dataset/1/ailaipoint/train_split'
OUTPUT_DIR_0 = os.path.join(OUTPUT_ROOT, '0') # 无目标 / conf=0
OUTPUT_DIR_1 = os.path.join(OUTPUT_ROOT, '1') # 0 < conf < 0.5
OUTPUT_DIR_2 = os.path.join(OUTPUT_ROOT, '2') # conf >= 0.5
for d in [OUTPUT_DIR_0, OUTPUT_DIR_1, OUTPUT_DIR_2]:
os.makedirs(d, exist_ok=True)
IMG_EXTENSIONS = {'.jpg', '.jpeg', '.png', '.bmp', '.webp'}
# ====================== 主程序 ======================
if __name__ == "__main__":
print("🚀 bbox 置信度分桶(移动原图,含无目标图像)")
model = YOLO(MODEL_PATH)
image_files = [
f for f in os.listdir(IMAGE_SOURCE_DIR)
if os.path.splitext(f.lower())[1] in IMG_EXTENSIONS
]
print(f"📸 找到图片 {len(image_files)}")
for img_name in image_files:
src_path = os.path.join(IMAGE_SOURCE_DIR, img_name)
img = cv2.imread(src_path)
if img is None:
continue
results = model(img, verbose=False)
# ====================== 关键修复点 ======================
if not results or results[0].boxes is None or len(results[0].boxes.conf) == 0:
# 没有任何检测框 → 当作 conf = 0
bbox_conf = 0.0
else:
# 有检测框 → 取第一个(或最大 conf
bbox_conf = float(results[0].boxes.conf[0].cpu().item())
# ====================== 分桶 ======================
if bbox_conf == 0:
dst_dir = OUTPUT_DIR_0
elif bbox_conf < 0.5:
dst_dir = OUTPUT_DIR_1
else:
dst_dir = OUTPUT_DIR_2
dst_path = os.path.join(dst_dir, img_name)
# ====================== 移动文件 ======================
shutil.move(src_path, dst_path)
print(f"{img_name} -> conf={bbox_conf:.3f} -> {os.path.basename(dst_dir)}")
print("✅ 完成(含无目标图片)")