こんにちは、パレイド技術部です。
今回から、画像生成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出力までを扱います。

連載構成
| 回 | 内容 |
|---|---|
| 第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検出を試す


