当前位置:   article > 正文

Stable Diffusion训练图片时,简陋的数据处理

Stable Diffusion训练图片时,简陋的数据处理

0 图片从命名

如果有强迫症,看到似乎乱码的命名会不舒服,那么就批量从命名

  1. import os
  2. def rename_files_in_directory(directory, key_word, new_suffix):
  3. i = 1
  4. for filename in os.listdir(directory):
  5. new_file = key_word + str(i).zfill(3) + new_suffix
  6. source = os.path.join(directory, filename)
  7. destination = os.path.join(directory, new_file)
  8. os.rename(source, destination)
  9. i += 1
  10. # 使用方法
  11. # rename_files_in_directory('/path/to/directory', '.new_suffix')
  12. # D:\SdTrainerGUI\lora-scripts-v1.7.3\train\XiboBird\5_zkz

1 批量缩小图片分辨率

如果是用同一个相机拍的,分辨率都是一样的,只不过分辨率太大了8K以上的分辨率显卡受不了

  1. from PIL import Image
  2. import os
  3. def resize_image(image_path, output_path, scale_factor):
  4. # 打开图片
  5. img = Image.open(image_path)
  6. # 获取图片的宽度和高度
  7. width, height = img.size
  8. # 计算新的宽度和高度
  9. new_width = width // scale_factor
  10. new_height = height // scale_factor
  11. # 使用ANTIALIAS滤镜来缩小图片
  12. # new_img = img.resize((new_width, new_height), Image.ANTIALIAS)
  13. new_img = img.resize((new_width, new_height), Image.ANTIALIAS)
  14. # 保存新图片
  15. new_img.save(output_path)
  16. def get_all_image(path, file_extension=".jpg"):
  17. return [os.path.join(path, f) for f in os.listdir(path) if f.endswith(file_extension)]
  18. def process_images(catalog_of_original_images, file_extension, scale_factor):
  19. # 获取原始图像目录的上一级目录
  20. parent_directory = os.path.dirname(catalog_of_original_images)
  21. # 设置输出目录
  22. output_catalog = os.path.join(parent_directory, "output")
  23. # 创建输出目录
  24. if not os.path.exists(output_catalog):
  25. os.makedirs(output_catalog)
  26. image_list = get_all_image(catalog_of_original_images, file_extension)
  27. for image in image_list:
  28. # 获取图片的文件名
  29. image_name = os.path.basename(image)
  30. # 设置输出图片的路径
  31. output_image_path = os.path.join(output_catalog, image_name)
  32. # 缩小图片并保存
  33. resize_image(image, output_image_path, scale_factor)
  34. if __name__ == '__main__':
  35. process_images(r"E:\Dwk\Photos\祥春鸟", ".jpg", 10)

2 图片数据集增强

最简易的增强是图片镜像,就是左右颠倒各一张,图片数据集数量直接翻倍

  1. import os
  2. from PIL import Image, ImageOps
  3. def data_enhancement(image_catalog, file_extension=".jpg"):
  4. image_list = [os.path.join(image_catalog, f) for f in os.listdir(image_catalog) if f.endswith(file_extension)]
  5. for image in image_list:
  6. # 打开图片
  7. img = Image.open(image)
  8. # 创建镜像图片
  9. mirror_img = ImageOps.mirror(img)
  10. # 获取图片的文件名(不包括后缀)
  11. image_name = os.path.splitext(os.path.basename(image))[0]
  12. # 设置镜像图片的文件名
  13. mirror_image_name = image_name + "_mirror" + file_extension
  14. # 设置镜像图片的路径
  15. mirror_image_path = os.path.join(image_catalog, mirror_image_name)
  16. # 保存镜像图片
  17. mirror_img.save(mirror_image_path)
  18. if __name__ == '__main__':
  19. data_enhancement(r"E:\Dwk\Photos\output", ".jpg")

3 tag内容批量修改(这里是只替换)

避免一个个文件打开逐个tag修改

  1. import os
  2. def replace_words_in_files(directory, old_word, new_word):
  3. # 获取指定目录下的所有文件
  4. files = os.listdir(directory)
  5. # 遍历所有文件
  6. for file in files:
  7. # 检查文件是否为.txt文件
  8. if file.endswith('.txt'):
  9. # 构建完整的文件路径
  10. file_path = os.path.join(directory, file)
  11. # 打开文件
  12. with open(file_path, 'r') as f:
  13. content = f.read()
  14. # 替换内容
  15. content = content.replace(old_word, new_word)
  16. # 写回文件
  17. with open(file_path, 'w') as f:
  18. f.write(content)
  19. if __name__ == '__main__':
  20. replace_words_in_files(r'D:\SdTrainerGUI\lora-scripts-v1.7.3\train\PreprocessingOutput','girl','boy')

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/300137
推荐阅读
相关标签
  

闽ICP备14008679号