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

news/2024/7/10 19:44:46 标签: stable diffusion

0 图片从命名

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

import os


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

1 批量缩小图片分辨率

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

from PIL import Image
import os


def resize_image(image_path, output_path, scale_factor):
    # 打开图片
    img = Image.open(image_path)

    # 获取图片的宽度和高度
    width, height = img.size

    # 计算新的宽度和高度
    new_width = width // scale_factor
    new_height = height // scale_factor

    # 使用ANTIALIAS滤镜来缩小图片
    # new_img = img.resize((new_width, new_height), Image.ANTIALIAS)
    new_img = img.resize((new_width, new_height), Image.ANTIALIAS)

    # 保存新图片
    new_img.save(output_path)


def get_all_image(path, file_extension=".jpg"):
    return [os.path.join(path, f) for f in os.listdir(path) if f.endswith(file_extension)]


def process_images(catalog_of_original_images, file_extension, scale_factor):
    # 获取原始图像目录的上一级目录
    parent_directory = os.path.dirname(catalog_of_original_images)

    # 设置输出目录
    output_catalog = os.path.join(parent_directory, "output")

    # 创建输出目录
    if not os.path.exists(output_catalog):
        os.makedirs(output_catalog)

    image_list = get_all_image(catalog_of_original_images, file_extension)

    for image in image_list:
        # 获取图片的文件名
        image_name = os.path.basename(image)
        # 设置输出图片的路径
        output_image_path = os.path.join(output_catalog, image_name)
        # 缩小图片并保存
        resize_image(image, output_image_path, scale_factor)


if __name__ == '__main__':
    process_images(r"E:\Dwk\Photos\祥春鸟", ".jpg", 10)

2 图片数据集增强

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

import os
from PIL import Image, ImageOps


def data_enhancement(image_catalog, file_extension=".jpg"):
    image_list = [os.path.join(image_catalog, f) for f in os.listdir(image_catalog) if f.endswith(file_extension)]
    for image in image_list:
        # 打开图片
        img = Image.open(image)
        # 创建镜像图片
        mirror_img = ImageOps.mirror(img)
        # 获取图片的文件名(不包括后缀)
        image_name = os.path.splitext(os.path.basename(image))[0]
        # 设置镜像图片的文件名
        mirror_image_name = image_name + "_mirror" + file_extension
        # 设置镜像图片的路径
        mirror_image_path = os.path.join(image_catalog, mirror_image_name)
        # 保存镜像图片
        mirror_img.save(mirror_image_path)


if __name__ == '__main__':
    data_enhancement(r"E:\Dwk\Photos\output", ".jpg")

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

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

import os


def replace_words_in_files(directory, old_word, new_word):
    # 获取指定目录下的所有文件
    files = os.listdir(directory)

    # 遍历所有文件
    for file in files:
        # 检查文件是否为.txt文件
        if file.endswith('.txt'):
            # 构建完整的文件路径
            file_path = os.path.join(directory, file)

            # 打开文件
            with open(file_path, 'r') as f:
                content = f.read()

            # 替换内容
            content = content.replace(old_word, new_word)

            # 写回文件
            with open(file_path, 'w') as f:
                f.write(content)


if __name__ == '__main__':
    replace_words_in_files(r'D:\SdTrainerGUI\lora-scripts-v1.7.3\train\PreprocessingOutput','girl','boy')


http://www.niftyadmin.cn/n/5440088.html

相关文章

Day28 回溯算法 part04

Day28 回溯算法 part04 93.复原IP地址 我的思路: 在分割回文串代码的基础上改写,需要考虑多种情况 不合法的IP地址part:长度>1同时首数字为0 || 长度0 || 长度>3 || >255 将各个part结合起来添加 ”." 的时候…

JavaScript中a++和++a的区别是什么?

在JS中,a 和 a 都是对变量 a进行自增操作,但是他们在执行的行为和结果上有些不同: a (前缀自增): 首先是将a的值增加1,然后返回 a 增加后的值。这意味着,表达式的其余部分使用 a的时候, a 的值…

算法练习第二十八天|93. 复原 IP 地址、78. 子集、90. 子集 II

93.复原 IP 地址 78. 子集 90. 子集 II 复原 IP 地址 class Solution {List<String> result new ArrayList();public List<String> restoreIpAddresses(String s) {backTrace(s,0,0);return result;}public void backTrace(String s, int startIndex,int pointSu…

Go语言学习06~07 错误处理和包管理

Go语言学习06-错误处理 Go的错误机制 与其他主要编程语言的差异 没有异常机制 error类型实现了error接口 可以通过 errors.New 来快速创建错误实例 type error interface {Error() string }errors.New("n must be in range [0, 10]")最佳实践 定义不同的错误变量…

【前端】Vite项目图片动态引入

我采用的vite构建的vue3项目&#xff0c;没有require命令动态引入本地图片&#xff0c; 引入图片方法如下&#xff1a; 仅供参考 方式1&#xff0c;无法动态 import emptyImage from /assets/home/yd_4.png<img :src"emptyImage" class"h-50 w-50" /&g…

请介绍一下大数据主要是干什么的?决策支持预测分析用户行为分析个性化服务操作优化风险管理创新与产品开发加拿大卡尔加里大学历史背景学术结构研究和创新校园设施

目录 请介绍一下大数据主要是干什么的&#xff1f; 决策支持 预测分析 用户行为分析 个性化服务 操作优化 风险管理 创新与产品开发 加拿大卡尔加里大学 历史背景 学术结构 研究和创新 校园设施 国际化 学生生活 大语言模型目前的问题 卡尔加里 经济 地理和…

蓝桥杯模块综合——高质量讲解AT24C02,BS18B20,BS1302,AD/DA(PCF8591),超声波模块

AT24C02——就是一个存储的东西&#xff0c;可以给他写东西&#xff0c;掉电不丢失。 void EEPROM_Write(unsigned char * EEPROM_String,unsigned char addr , unsigned char num) {IIC_Start();IIC_SendByte(0xA0);IIC_WaitAck();IIC_SendByte(addr);IIC_WaitAck();while(nu…

服务器c盘为什么会突然满了,怎么办吗

C盘是 Windows系统的默认安装位置&#xff0c;由于系统运行及应用程序安装的必要性&#xff0c;C盘通常会占用一定的磁盘空间。然而&#xff0c;有时候我们会发现 C盘明明没放什么东西&#xff0c;却显示爆满&#xff0c;这给我们的服务器使用带来了很大的不便。那么&#xff0…