私的AI研究会 > AI_Program9

生成 AI プログラミング9 == 編集中 ==

sd_082_m.jpg

 これまで検証してきた結果をもとに、Python で生成 AI プログラムを書く

▲ 目 次
※ 最終更新:2025/07/17 

diffusersではじめめる Stable Diffusion (実践編)

 画像生成のプログラムを書く

概要

動作環境

Step 80:テキストから画像を生成する

 「Stable Diffusion」txt2img 機能を使う最低限の 基本サンプル・コード
  1. 「sd_080.py」
    ## sd_080.py【SD1.5】 テキストから画像生成(txt2img)サンプル・ソースコード
    ##  Ver 0.00    2025/06/16
    ##  Ver 0.02    2025.07.13  汎用コードを sd_tools に分離
    
    import torch
    from diffusers import StableDiffusionPipeline, logging
    from translate import Translator
    import sd_tools as sdt
    
    logging.set_verbosity_error()
    
    # フォルダーのパス
    model_path = "/StabilityMatrix/Data/Models/StableDiffusion/SD1.5/v1-5-pruned-emaonly.safetensors"   # モデル
    save_path = 'results/image_080.png'                                                                 # 生成画像
    
    # プロンプト
    prompt_jp = '満開の蘭'                                                                              # プロンプト
    prompt = sdt.trans_jp2en(prompt_jp)
    
    # GPUを使う場合は"cuda" 使わない場合は"cpu"
    device = 'cuda' if torch.cuda.is_available() else 'cpu'
    
    # seed 値
    seed = 12345678
    
    # パイプラインを作成
    pipeline = StableDiffusionPipeline.from_single_file(model_path).to(device)
    
    # Generatorオブジェクト作成
    generator = torch.Generator(device).manual_seed(seed)
    
    print(f'Seed: {seed}, Model: {model_path}')
    print(f'prompt : {prompt_jp} → {prompt}')
    
    # 画像を生成
    image = pipeline(
                        prompt=prompt,
                        num_inference_steps = 30,
                        guidance_scale = 7.5,
                        width = 512,
                        height = 512,
                        generator = generator,
                        ).images[0]
    
    sdt.image_save2(image, save_path, save_path)
  2. プログラムを実行する(実行時間:約 3秒 RTX 4070 Ti 12GB)
     python sd_080.py
    (sd_test) PS > python sd_080.py
    Fetching 11 files: 100%|███████████████████████████████| 11/11 [00:00<?, ?it/s]
    Loading pipeline components...: 100%|████████████| 6/6 [00:00<00:00, 10.98it/s]
    Seed: 12345678, Model: /StabilityMatrix/Data/Models/StableDiffusion/SD1.5/v1-5-pruned-emaonly.safetensors
    prompt : 満開の蘭 → Orchid in full bloom
    100%|██████████████████████████████████████████| 30/30 [00:03<00:00,  8.35it/s]
  3. 画像ファイル「sd_080.png」が生成される

Step 81:「テキストから画像生成(txt2img)」~ コマンドラインからパラメータ入力 ~

Step 82:「テキストから画像生成(txt2img)」~ GUI プログラム ~

Step 90:画像から画像を生成する

 基本のサンプル・コード
  1. 「sd_090.py」
    ## sd_090.py【SD1.5】 画像から画像生成(img2img)サンプル・ソースコード
    ##  Ver 1.00    2025/07/01
    ##  Ver 0.02    2025.07.13  汎用コードを sd_tools に分離
    
    import torch
    from PIL import Image
    from diffusers import StableDiffusionImg2ImgPipeline,DPMSolverMultistepScheduler, logging
    import sd_tools as sdt
    
    logging.set_verbosity_error()
    
    # フォルダーのパス
    model_path = "/StabilityMatrix/Data/Models/StableDiffusion/SD1.5/v1-5-pruned-emaonly.safetensors"   # モデル
    image_path = "images/kamo.jpg"                                                                      # 元画像
    save_path = 'results/image_090.png'                                                                 # 生成画像
    
    # プロンプト
    prompt_jp = '兎'                                                                                    # プロンプト
    prompt = sdt.trans_jp2en(prompt_jp)
    
    # GPUを使う場合は"cuda" 使わない場合は"cpu"
    device = 'cuda' if torch.cuda.is_available() else 'cpu'
    
    # seed 値
    seed = 12345678
    
    # パイプラインを作成
    if device == 'cpu':
        pipeline = StableDiffusionImg2ImgPipeline.from_single_file(model_path).to(device)
    else:
        pipeline = StableDiffusionImg2ImgPipeline.from_single_file(
                        model_path,
                        torch_dtype = torch.float16,
                        ).to(device)
    
    # スケジューラ設定
    pipeline.scheduler = DPMSolverMultistepScheduler.from_config(pipeline.scheduler.config)
    
    # Generatorオブジェクト作成
    generator = torch.Generator(device).manual_seed(seed)
    
    src_image = Image.open(image_path)
    
    print(f'Seed: {seed}, Model: {model_path}')
    print(f'prompt : {prompt_jp} → {prompt}')
    
    # 画像を生成
    image = pipeline(
                        prompt = prompt,
                        image = src_image,
                        num_inference_steps = 30,
                        guidance_scale = 7,
                        strength = 0.6,
                        generator = generator
                        ).images[0]
    
    sdt.image_save2(image, save_path, save_path)
  2. プログラムを実行する(実行時間:約 5秒 RTX 4070 Ti 12GB)
    ※ CPU でも時間はかかるが実行できる(例:23分 i7-1260P)
     python sd_090.py
    (sd_test) PS > python sd_090.py
    Fetching 11 files: 100%|███████████████████████████████| 11/11 [00:00<?, ?it/s]
    Loading pipeline components...: 100%|████████████| 6/6 [00:01<00:00,  3.51it/s]
    Seed: 12345678, Model: /StabilityMatrix/Data/Models/StableDiffusion/SD1.5/v1-5-pruned-emaonly.safetensors
    prompt : 兎 → Domestic Rabbit
    100%|██████████████████████████████████████████| 18/18 [00:04<00:00,  3.78it/s]
  3. 画像ファイル「sd_090.png」が生成される

Step 91:「画像から画像生成(img2img)」~ コマンドラインからパラメータ入力 ~

Step 92:「画像から画像生成(img2img)」~ GUI プログラム ~

Step 100:統合した『私的 AI 生成プログラム』

         == 準備中 ==

汎用共通プログラム「sd_tools.py」

 

忘備録

 

更新履歴

参考資料