最新推送
This commit is contained in:
50
tool/change_detect_label_cls.py
Normal file
50
tool/change_detect_label_cls.py
Normal file
@ -0,0 +1,50 @@
|
||||
import os
|
||||
|
||||
# ======================
|
||||
# 配置
|
||||
# ======================
|
||||
LABEL_DIR = "/media/hx/04e879fa-d697-4b02-ac7e-a4148876ebb0/dataset/detect/val" # 改成你的标签文件夹路径
|
||||
BACKUP = False # 是否备份原文件
|
||||
|
||||
def convert_labels_to_zero(label_dir):
|
||||
for filename in os.listdir(label_dir):
|
||||
if not filename.endswith(".txt"):
|
||||
continue
|
||||
|
||||
file_path = os.path.join(label_dir, filename)
|
||||
|
||||
with open(file_path, "r", encoding="utf-8") as f:
|
||||
lines = f.readlines()
|
||||
|
||||
new_lines = []
|
||||
for line in lines:
|
||||
line = line.strip()
|
||||
if not line:
|
||||
continue
|
||||
|
||||
parts = line.split()
|
||||
if len(parts) < 5:
|
||||
# 非标准 yolo 行,原样保留
|
||||
new_lines.append(line)
|
||||
continue
|
||||
|
||||
# 强制类别改为 0
|
||||
parts[0] = "0"
|
||||
new_lines.append(" ".join(parts))
|
||||
|
||||
# 备份
|
||||
if BACKUP:
|
||||
backup_path = file_path + ".bak"
|
||||
if not os.path.exists(backup_path):
|
||||
os.rename(file_path, backup_path)
|
||||
save_path = file_path
|
||||
else:
|
||||
save_path = file_path
|
||||
|
||||
with open(save_path, "w", encoding="utf-8") as f:
|
||||
f.write("\n".join(new_lines) + "\n")
|
||||
|
||||
print(f"[OK] 已处理: {filename}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
convert_labels_to_zero(LABEL_DIR)
|
||||
105
tool/d_n.py
Normal file
105
tool/d_n.py
Normal file
@ -0,0 +1,105 @@
|
||||
import os
|
||||
import shutil
|
||||
import math
|
||||
|
||||
# ================= 配置区域 =================
|
||||
# 【全局变量】在这里修改你要分成的份数
|
||||
N_FOLDERS = 4
|
||||
|
||||
# 源文件夹名称 (相对于当前脚本运行目录)
|
||||
SOURCE_DIR_NAME = "camera02_save"
|
||||
|
||||
# 支持的图片扩展名
|
||||
VALID_EXTENSIONS = ('.jpg', '.jpeg', '.png', '.bmp', '.tif', '.tiff')
|
||||
|
||||
|
||||
# ===========================================
|
||||
|
||||
def split_images_to_subfolders():
|
||||
# 1. 获取当前脚本所在的绝对路径
|
||||
base_dir = os.getcwd()
|
||||
source_path = os.path.join(base_dir, SOURCE_DIR_NAME)
|
||||
|
||||
# 2. 检查源文件夹是否存在
|
||||
if not os.path.exists(source_path):
|
||||
print(f"❌ 错误: 找不到文件夹 '{source_path}'")
|
||||
print("请确保脚本在包含 'camera02_save' 的目录下运行。")
|
||||
return
|
||||
|
||||
# 3. 获取所有图片文件列表
|
||||
all_files = os.listdir(source_path)
|
||||
image_files = [
|
||||
f for f in all_files
|
||||
if f.lower().endswith(VALID_EXTENSIONS) and os.path.isfile(os.path.join(source_path, f))
|
||||
]
|
||||
|
||||
# 按文件名排序,保证分配顺序一致(可选)
|
||||
image_files.sort()
|
||||
|
||||
total_count = len(image_files)
|
||||
|
||||
if total_count == 0:
|
||||
print(f"警告: '{source_path}' 中没有找到任何图片文件。")
|
||||
return
|
||||
|
||||
print(f"发现图片总数: {total_count}")
|
||||
print(f"计划分成: {N_FOLDERS} 份")
|
||||
|
||||
# 4. 计算分配逻辑
|
||||
# 使用轮询方式分配,确保每个文件夹数量尽可能平均
|
||||
# 例如:10张图分3份 -> 4, 3, 3
|
||||
|
||||
created_folders = []
|
||||
|
||||
for index, filename in enumerate(image_files):
|
||||
# 计算该图片应该去哪个子文件夹 (0 到 N_FOLDERS-1)
|
||||
folder_index = index % N_FOLDERS
|
||||
subfolder_name = f"part_{folder_index}"
|
||||
|
||||
# 构建子文件夹完整路径
|
||||
dest_folder_path = os.path.join(source_path, subfolder_name)
|
||||
|
||||
# 如果文件夹不存在,则创建
|
||||
if not os.path.exists(dest_folder_path):
|
||||
os.makedirs(dest_folder_path)
|
||||
created_folders.append(subfolder_name)
|
||||
print(f"✅ 创建子文件夹: {subfolder_name}")
|
||||
|
||||
# 构建源文件和目标文件路径
|
||||
src_file = os.path.join(source_path, filename)
|
||||
dst_file = os.path.join(dest_folder_path, filename)
|
||||
|
||||
# 移动文件 (剪切)
|
||||
try:
|
||||
shutil.move(src_file, dst_file)
|
||||
except Exception as e:
|
||||
print(f"❌ 移动失败 {filename}: {e}")
|
||||
|
||||
# 5. 统计结果
|
||||
print("\n" + "=" * 30)
|
||||
print("分配完成!统计如下:")
|
||||
print("=" * 30)
|
||||
|
||||
# 重新扫描统计每个文件夹的数量
|
||||
final_counts = {}
|
||||
for i in range(N_FOLDERS):
|
||||
fname = f"part_{i}"
|
||||
fpath = os.path.join(source_path, fname)
|
||||
if os.path.exists(fpath):
|
||||
count = len([f for f in os.listdir(fpath) if f.lower().endswith(VALID_EXTENSIONS)])
|
||||
final_counts[fname] = count
|
||||
print(f"{fname}: {count} 张图片")
|
||||
|
||||
print("=" * 30)
|
||||
print(f"总计移动: {sum(final_counts.values())} 张图片")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 提示用户确认
|
||||
print(f"当前工作目录: {os.getcwd()}")
|
||||
confirm = input(f"即将把 '{SOURCE_DIR_NAME}' 中的图片均分为 {N_FOLDERS} 份。\n是否继续?(y/n): ")
|
||||
|
||||
if confirm.lower() == 'y':
|
||||
split_images_to_subfolders()
|
||||
else:
|
||||
print("操作已取消。")
|
||||
@ -98,11 +98,11 @@ if __name__ == "__main__":
|
||||
# 修改为你自己的路径
|
||||
#TRAIN_DIR = "/media/hx/04e879fa-d697-4b02-ac7e-a4148876ebb0/dataset/cls-new/19cc/train"
|
||||
#VAL_DIR = "/media/hx/04e879fa-d697-4b02-ac7e-a4148876ebb0/dataset/cls-new/19cc/val"
|
||||
TRAIN_DIR = "/media/hx/04e879fa-d697-4b02-ac7e-a4148876ebb0/dataset/point2/train"
|
||||
VAL_DIR = "/media/hx/04e879fa-d697-4b02-ac7e-a4148876ebb0/dataset/point2/val1"
|
||||
TRAIN_DIR = "/media/hx/04e879fa-d697-4b02-ac7e-a4148876ebb0/dataset/1/charge/train"
|
||||
VAL_DIR = "/media/hx/04e879fa-d697-4b02-ac7e-a4148876ebb0/dataset/1/charge/val"
|
||||
split_train_to_val(
|
||||
train_dir=TRAIN_DIR,
|
||||
val_dir=VAL_DIR,
|
||||
ratio=0.1, # 抽取 10%
|
||||
seed=42 # 随机种子
|
||||
seed=58 # 随机种子al
|
||||
)
|
||||
Reference in New Issue
Block a user