見出し画像

LCM-LoRAをcpuを使ってリアルタイム AIイラスト

自分のaituberの配信で使う為にCPUでLCM-loraを使うコードを書いたので共有します。

import cv2
import numpy as np
import pygetwindow as gw
import pyautogui
import torch
from diffusers import AutoPipelineForImage2Image, LCMScheduler

# 事前学習されたモデルの設定
lcm_lora_id = "latent-consistency/lcm-lora-sdv1-5"

# diffusersパイプラインの初期化(torch.float32を使用)
pipe = AutoPipelineForImage2Image.from_pretrained(
    "852wa/SDHK", use_safetensors=True
).to("cpu")  # CUDAからCPUに変更


# LORAウェイトのロード
pipe.load_lora_weights(lcm_lora_id)
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

# セーフティチェッカーの設定
if pipe.safety_checker is not None:
    pipe.safety_checker = lambda images, **kwargs: (images, [False])

# 画像生成用のプロンプト
prompt = "1girl, black hair, school uniform, 8k"

# 画像を表示するウィンドウの作成
cv2.namedWindow("Active Window Capture", cv2.WINDOW_NORMAL)

while True:
    # アクティブなウィンドウを取得
    active_window = gw.getActiveWindow()
    if active_window:
        # アクティブなウィンドウの位置とサイズを取得
        x, y, width, height = active_window.left, active_window.top, active_window.width, active_window.height

        # 指定された領域のスクリーンショットを取得
        screenshot = pyautogui.screenshot(region=(x, y, width, height))
        img_np = np.array(screenshot)
        img = cv2.cvtColor(img_np, cv2.COLOR_BGR2RGB)

        # 画像生成器の初期化(torch.float32を使用)
        generator = torch.Generator("cpu").manual_seed(2500)

        # diffusersを使用して画像生成(torch.float32を使用)
        img = pipe(
            prompt=prompt,
            image=img,
            num_inference_steps=8,
            guidance_scale=1,
            generator=generator
        ).images[0]

        # PILイメージをnumpy配列に変換し、OpenCV形式に変更
        img = np.array(img)
        img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)

        # キャプチャした画像をウィンドウに表示
        cv2.imshow("Active Window Capture", img)

        # 'a'キーでループを終了
        if cv2.waitKey(1) & 0xFF == ord('a'):
            break

# ウィンドウを閉じる
cv2.destroyAllWindows()

因みに遅すぎて配信では使えそうに無かったです。

いいなと思ったら応援しよう!