视频地址:玩转AIGC神器MMagic_哔哩哔哩_bilibili
文生图:给出描述,生成图片
图生图:给定一张图,根据描述生成新图;
1、安装配置
!pip install -U openmim
!mim install mmengine
!mim install 'mmcv==2.0.0'
!mim install "mmdet>=3.0.0rc6"
!git clone https://github.com/open-mmlab/mmagic.git
%cd mmagic
!pip3 install -e .
2、数据准备
import cv2
image = cv2.imread('/content/微信图片_20230616083820.jpg')
# 使用Canny边缘检测
edges = cv2.Canny(image, threshold1=30, threshold2=100)
# 保存图像
cv2.imwrite('edges.jpg', edges)
import matplotlib.pyplot as plt
# 读取原图
original = cv2.imread('/content/微信图片_20230616083820.jpg', cv2.IMREAD_COLOR)
# 读取处理后的图像
edges = cv2.imread('edges.jpg', cv2.IMREAD_COLOR)
# OpenCV使用BGR模式,而matplotlib使用RGB模式,所以我们需要转换颜色模式
original = cv2.cvtColor(original, cv2.COLOR_BGR2RGB)
edges = cv2.cvtColor(edges, cv2.COLOR_BGR2RGB)
# 创建子图来展示对比
fig, axs = plt.subplots(1, 2, figsize=(10, 5))
# 展示原图
axs[0].imshow(original, cmap='gray')
axs[0].set_title('Original Image')
# 展示处理后的图像
axs[1].imshow(edges, cmap='gray')
axs[1].set_title('Edge Image')
# 显示图像
plt.show()
3、模型载入
import cv2
import numpy as np
import mmcv
from mmengine import Config
from PIL import Image
from mmagic.registry import MODELS
from mmagic.utils import register_all_modules
register_all_modules()
cfg = Config.fromfile('configs/controlnet/controlnet-canny.py')
controlnet = MODELS.build(cfg.model)
4、模型推理
control_img = mmcv.imread('/content/edges.jpg')
control = cv2.Canny(control_img, 100, 200)
control = control[:, :, None]
control = np.concatenate([control] * 3, axis=2)
control = Image.fromarray(control)
prompt = 'Please decorate the subway, the dreamlike scene of blue sky and white clouds should have a sense of the future;' #'请给地铁装修一下,蓝天白云梦幻般的场景,要有未来感;'
output_dict = controlnet.infer(prompt, control=control)
samples = output_dict['samples']
for idx, sample in enumerate(samples):
sample.save(f'sample_{idx}.png')
controls = output_dict['controls']
for idx, control in enumerate(controls):
control.save(f'control_{idx}.png')
5、结果展示
import matplotlib.pyplot as plt
import cv2
# 以彩色模式读取图片
original = cv2.imread('/content/mmagic/control_0.png', cv2.IMREAD_COLOR)
edges = cv2.imread('/content/mmagic/sample_0.png', cv2.IMREAD_COLOR)
# OpenCV使用BGR模式,而matplotlib使用RGB模式,所以我们需要转换颜色模式
original = cv2.cvtColor(original, cv2.COLOR_BGR2RGB)
edges = cv2.cvtColor(edges, cv2.COLOR_BGR2RGB)
# 创建子图来展示对比
fig, axs = plt.subplots(1, 2, figsize=(10, 5))
# 展示原图
axs[0].imshow(original)
axs[0].set_title('Original Image')
# 展示处理后的图像
axs[1].imshow(edges)
axs[1].set_title('Edge Image')
# 显示图像
plt.show()