国内做网站,俄语网站里做外贸shop,莆田网站建设哪里便宜,免费开网店的app数据集批量更新分类OR删除分类行数据
import osdef remove_class_from_file(file_path, class_to_remove):从YOLO格式的标注文件中删除指定类别的行记录#xff0c;并去除空行。:param file_path: YOLO标注文件路径:param class_to_remove: 需要删除的类别…数据集批量更新分类OR删除分类行数据
import osdef remove_class_from_file(file_path, class_to_remove):从YOLO格式的标注文件中删除指定类别的行记录并去除空行。:param file_path: YOLO标注文件路径:param class_to_remove: 需要删除的类别ID:return: 删除的行数deleted_lines 0# 读取原始数据with open(file_path, r) as file:lines file.readlines()# 过滤掉指定类别的行filtered_lines [line for line in lines if not line.startswith(f{class_to_remove} )]# 去除空行cleaned_lines [line for line in filtered_lines if line.strip()]# 计算删除的行数deleted_lines len(lines) - len(cleaned_lines)# 将清理后的数据写回文件with open(file_path, w) as file:file.writelines(cleaned_lines)return deleted_linesdef update_class_in_file(file_path, old_class, new_class):将YOLO格式的标注文件中指定类别的数字更新为新的类别ID。:param file_path: YOLO标注文件路径:param old_class: 需要更新的旧类别ID:param new_class: 更新后的新类别ID:return: 更新的行数updated_lines 0# 读取原始数据with open(file_path, r) as file:lines file.readlines()# 更新类别IDupdated_lines 0new_lines []for line in lines:if line.startswith(f{old_class} ):new_lines.append(line.replace(f{old_class} , f{new_class} , 1))updated_lines 1else:new_lines.append(line)# 将更新后的数据写回文件with open(file_path, w) as file:file.writelines(new_lines)return updated_linesdef process_directory(directory_path, class_to_removeNone, old_classNone, new_classNone):处理指定目录下的所有YOLO标注文件可以选择删除指定类别的记录或更新分类数字。:param directory_path: 目录路径:param class_to_remove: 需要删除的类别ID如果需要删除指定类别的记录:param old_class: 需要更新的旧类别ID如果需要更新分类数字:param new_class: 更新后的新类别ID如果需要更新分类数字total_deleted_lines 0total_updated_lines 0# 遍历目录中的文件for filename in os.listdir(directory_path):if filename.endswith(.txt): # 假设标注文件都是以 .txt 结尾的file_path os.path.join(directory_path, filename)if class_to_remove is not None:deleted_lines remove_class_from_file(file_path, class_to_remove)print(f已从文件 {filename} 中删除类别 {class_to_remove} 的记录共删除 {deleted_lines} 行。)total_deleted_lines deleted_linesif old_class is not None and new_class is not None:updated_lines update_class_in_file(file_path, old_class, new_class)print(f已从文件 {filename} 中将类别 {old_class} 更新为 {new_class}共更新 {updated_lines} 行。)total_updated_lines updated_linesif class_to_remove is not None:print(f总共删除了 {total_deleted_lines} 行记录。)if old_class is not None and new_class is not None:print(f总共更新了 {total_updated_lines} 行记录。)# 使用示例
directory_path C:\\Users\\合格的牛马\\Desktop\\datasets\\test-delete\\labels # 替换为你的目录路径# 删除指定类别的记录
class_to_remove 5 # 替换为你要删除的类别ID
process_directory(directory_path, class_to_removeclass_to_remove)# 更新指定类别的分类数字
old_class 1 # 替换为旧类别ID
new_class 100 # 替换为新类别ID
process_directory(directory_path, old_classold_class, new_classnew_class)