画像のブラウン管TVに砂嵐を映す — 連載の全体像と環境構築

画像のブラウン管TVに砂嵐を映す — 連載の全体像と環境構築 — 画像生成AI, ブラウン管TV, 砂嵐 AI画像

こんにちは、パレイド技術部です。

今回から、画像生成AIで「テレビのある空間」を作り、その画面に砂嵐や映像を合成する実験を連載していきます。いわゆる「画像はハメコミ合成です」を、コードで自動化するのが目標です。

アナログ停波で見かけなくなった光景。

何を作るのか

最終的に目指すのはこういう絵です:

  • 画像生成AIでブラウン管テレビのある部屋を生成する
  • テレビの画面領域を自動検出する
  • そこに砂嵐のノイズ映像を合成し、mp4として出力する

シンプルに聞こえますが、実際にやってみると「テレビの画面をどうやって安定して検出するか」が想像以上に難しく、3段階の試行錯誤を経ることになりました。

画像を生成して砂嵐(ホワイトノイズ)を合成する流れ。

試行錯誤の3段階

この連載では、失敗も含めて順番に追っていきます。

[A] SDXL チェックポイント + OpenCV 検出(第2回)
     プロンプトで画面色を指定 → HSV + Canny で検出
     → 生成画像のバラつきに対応しきれず断念
              │
              ▼
[B] ControlNet Canny + LoRA(第3回)
     Python でベゼル線画テンプレートを描画 → Canny ControlNet で制御
     → モニタ配置は改善、だが画面内側の検出が不安定
              │
              ▼
[C] ControlNet Depth + Blender(第4回)
     Python で3D部屋を構築 → Blender でデプスマップ → Depth ControlNet
     → 空間ごと制御でき、安定したパイプラインが実現

第5回以降は、砂嵐映像の生成(Python + OpenCV + ffmpeg)、スクリーン検出と合成パイプライン、そして最終的なmp4出力までを扱います。

TVの砂嵐再現の方法

連載構成

内容
第1回(本記事)連載導入・目標・環境構築
第2回SDXL + 色指定プロンプト + OpenCV検出の試み
第3回ControlNet Canny + LoRA に移行
第4回Depth ControlNet + Blender で解決
第5回砂嵐を作る — ノイズ映像+ノイズ音をPythonで生成
第6回スクリーン検出 + 映像合成パイプライン
第7回完成サンプル動画 + 連載まとめ

環境構築

前提

  • Python 3.10 以上(3.12 推奨)
  • CUDA 12.x(CPU でも動きますが生成は遅いです)
  • ComfyUI をインストール済み(他の画像生成UI でも応用可能)

venv セットアップ

連載全体で使うライブラリをまとめてインストールします。

python -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate

pip install \
  torch torchvision --index-url https://download.pytorch.org/whl/cu121 \
  comfy-cli \
  pillow \
  opencv-python-headless \
  numpy \
  trimesh

ControlNet モデルの配置

第3回以降で ControlNet を使います。先にモデルをダウンロードしておくとスムーズです。

COMFY_DIR=~/ComfyUI
mkdir -p $COMFY_DIR/models/controlnet

# Canny LoRA(第3回で使用)
wget -O $COMFY_DIR/models/controlnet/control-lora-canny-rank256.safetensors \
  https://huggingface.co/stabilityai/control-lora/resolve/main/control-lora-canny-rank256.safetensors

# Depth LoRA(第4回で使用)
wget -O $COMFY_DIR/models/controlnet/control-lora-depth-rank256.safetensors \
  https://huggingface.co/stabilityai/control-lora/resolve/main/control-lora-depth-rank256.safetensors

動作確認

# check_env.py — 必須ライブラリの疎通確認
import torch
import cv2
from PIL import Image
import numpy as np

print(f"torch  : {torch.__version__}, CUDA={torch.cuda.is_available()}")
print(f"opencv : {cv2.__version__}")
print(f"numpy  : {np.__version__}")
print("OK: all dependencies available")
python check_env.py
# 期待出力例:
# torch  : 2.3.0+cu121, CUDA=True
# opencv : 4.9.0
# numpy  : 1.26.4
# OK: all dependencies available

まとめ

第1回では、連載のゴールと試行錯誤の全体像を整理しました。

画像生成AIで背景を作ること自体は簡単ですが、「テレビ画面の位置を安定して取得する」のが最大の課題です。次回からは、最初に試したアプローチ——SDXLでTVを生成し、プロンプトで画面色を指定して OpenCV で検出する方法——を実際のコード付きで解説していきます。

次回(第2回): SDXL + 色指定プロンプト + OpenCV検出を試す

タイトルとURLをコピーしました