【云驻共创】一键 AI 作画,人人都是艺术家 理论 + 实操 教你实现 AI 应用快速开发篇(2)
文章目录
- 前言
- 一、西方艺术简史
- 1.1、古典艺术时期
- 1.2、现代艺术时期
- 1.3、后现代艺术时期
- 二、数字艺术的诞生和发展
- 2.1、数字艺术的诞生
- 2.2、数字艺术下的行业细分
- 2.3、数字作品的创作过程
- 2.4、AI 作画诞生
- 三、Stable Diffusion 文字生成图像
- 3.1、实验环境准备
- 3.2、什么是 Stable Diffusion?
- 四、Stable Diffusion Pipeline 使用方法
- 4.1、安装需要的运行环境
- 4.2、下载 AI 模型预训练权重文件,加载模型
- 4.3、生成单张图像
- 4.4、海报生成和分享
- 4.5、生成多张图像
- 五、修改 Prompt 提示词
- 5.1、什么是 Prompt?
- 5.2、如何修改 Promot?
- 5.3、Prompt 新手指导
- 六、附录及参考材料提供
- 6.1、常见的风格列举
- 6.2、其他参考材料
- 总结
在进行 AI 作画之前,我们先了解一下西方的艺术简史,以便于后面了解绘画生成风格。
2 世纪到 19 世纪为西方古典艺术时期,代表类型与作品形式具体如下图所示:
- 古典主义:巴洛克、洛可可
- 新古典主义:浪漫主义、写实主义
- 达芬奇,拉斐尔,丢勒
19 世纪末到 20 世纪末为现代艺术时期,代表类型与作品形式具体如下图所示:
- 现代艺术,印象派,分水岭
- 莫奈,梵高
20 世纪至今为后现代艺术时期,代表类型与作品形式具体如下图所示:
- 现代艺术、后现代艺术、绘画、行为艺术、装置艺术、约瑟夫-博伊斯、超现实主义、抽象主义、极简主义、表现主义
随着计算机的出现,人们开始运用数字技术和计算机进行艺术创作。作品应用于影视、游戏、动漫、建筑,服装等领域,具体如下图所示:
数字艺术涉及到千行百业,如:影视、游戏、动漫、图书、服装、舞台、建筑、装饰、珠宝等等,举例相关作品具体如下图所示:
同时在行业中也衍生了许多相关岗位,如:影视概念设计、影视海报设计、影视角色设计、游戏海报设计、游戏场景设计、游戏角色设计、动漫设计、插画设计、平面设计等,其相关作品具体如下图所示:
数字作品的创作过程包括:在创作前进行大量的素材搜集、参考搜集,创作中需要基于素材参考图片,人发挥想象力,使用计算机和数位板进行手绘创作直到数字作品创作完成,创作过程具体如下图所示:
AI(Artificial Intelligence):人工智能。
Al 的最终目的是构建与人类相似的推理、知识、规划、学习、交流、感知、使用工具和操控机械得能力等。
AI 作画:是对上亿张图像数据库进行采集整理,成立数据库,根据文本描述指令,创作数字图像作品。所以我们在运用 AI 作画时,描述词尤为重要,是与 AI 对话的语言工具。
下面为大家带来几幅通过不同描述词生成的不同风格的 AI 画作供大家鉴赏,具体如下图所示:
本次实验环境我们将使用华为云提供的 AI Gallery 实验平台,点击 Run in ModelArts,将会进入到 ModelArts CodeLab 中,这时需要你登录华为云账号,如果没有账号,则需要注册一个,且要进行实名认证,参考 https://developer.huaweicloud.com/develop/aigallery/article/detail?id=4ce709d6-eb25-4fa4-b214-e2e5d6b7919c 即可完成账号注册和实名认证。登录之后,等待片刻,即可进入到 CodeLab 的运行环境,具体如下图所示:
Stable Diffusion 是由 CompVis、Stability AI 和 LAION 共同开发的一个文本转图像模型,它通过 LAION-5B 子集大量的 512x512 图文模型进行训练,我们只要简单的输入一段文本,Stable Diffusion 就可以迅速将其转换为图像,同样我们也可以置入图片或视频,配合文本对其进行处理。
在《【云驻共创】一键 AI 作画,人人都是艺术家 理论 + 实操 教你实现 AI 应用快速开发篇(1)》一文中我们已经为大家详细介绍和分析了生成式 AI 技术的发展,接下来我们会展示如何将 Stable Diffusion 与 🤗 Hugging Face 🧨 Diffusers 的库一起使用。
本案例可以使用 GPU,也可以使用 CPU 来运行,GPU 生成单张图片约 20 秒,CPU 需 6 分钟。您可以使用命令来查询当前机器的 GPU 是否可用,如果运行结果是一个表格,则表示 GPU 可用,实现命令如下:
!nvidia-smi
本步骤耗时约 1-2 分钟,实现命令如下:
!pip install --upgrade pip
!pip install torch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1
!pip install diffusers==0.2.4
!pip install transformers==4.21.1 scipy==1.7.3 ftfy==6.1.1
!pip install "ipywidgets>=7,<8"
用户可访问 Hugging Face Hub 获取 token,进行下载,下载时间约 6 分钟左右。本案例已将其模型转存至华为云 OBS 中,运行代码,下载权重即可,下载耗时约 30 秒,实现代码如下:
import os
import torch
import os.path as osp
import moxing as mox
from diffusers import StableDiffusionPipeline
parent = osp.join(os.getcwd(),'CompVis')
if not os.path.exists(parent):
mox.file.copy_parallel('obs://modelarts-labs-bj4-v2/case_zoo/StableDiffusion/CompVis',parent)
if os.path.exists(parent):
print('Download success')
else:
raise Exception('Download Failed')
else:
print("Model Package already exists!")
加载模型,实现代码如下:
model_dir = osp.join(osp.join(parent,'stable-diffusion-v1-4'), "diffusers")
os.environ["XDG_CACHE_HOME"] = model_dir
device = 'cuda' if torch.cuda.is_available() else 'cpu'
pipe = StableDiffusionPipeline.from_pretrained(model_dir,
# revision="fp16",
# torch_dtype=torch.float16
).to(device)
在 GPU 上,单张图片生成耗时约 20 秒,在 CPU 上,单张图片生成耗时约 6 分钟,且运行内存需 16GB 以上,实现代码如下:
#@title 请在此处填写Prompt,运行,即可生成单张图像
torch.cuda.empty_cache()
prompt = "Close up portrait photo of Scarlett Johansson as part cyborg part human, fascinating stare, Atmospheric, 600mm lens, Sony Alpha α7, epic, dramatic, cinematic lighting, high contrast, 8k, photo realistic, character design --testp --ar 2:3 --upbeta" #@param {type:"string"}
image = pipe(prompt)["sample"][0]
image
这里我们的 Prompt 设置为白鹿的女神 Scarlett Johansson,具体 prompt 为:Close up portrait photo of Scarlett Johansson as part cyborg part human, fascinating stare, Atmospheric, 600mm lens, Sony Alpha α7, epic, dramatic, cinematic lighting, high contrast, 8k, photo realistic, character design --testp --ar 2:3 --upbeta
对于 Prompt 有疑问或者需要进一步了解的同学可以参考这篇文章——《【云驻共创】一键 AI 作画,人人都是艺术家 理论 + 实操 教你实现 AI 应用快速开发篇(1)》
待运行结束我们即可看到根据 Prompt 生成的图片,具体如下图所示:
根据自身需求进行海报生成和分享,打上我们的专属水印,实现代码如下:
#@title 请在下方title_char栏填写作品名称,author_char栏填写作者姓名,中文不超过6个字,运行,即可生成海报
import os
import moxing as mox
from PIL import Image,ImageDraw,ImageFont,ImageFilter
# 导入海报需要的素材
if not os.path.exists("/home/ma-user/work/material"):
mox.file.copy_parallel('obs://modelarts-labs-bj4-v2/case_zoo/StableDiffusion/AI_paint_TOM.png',"/home/ma-user/work/material/AI_paint_TOM.png")
mox.file.copy_parallel('obs://modelarts-labs-bj4-v2/case_zoo/StableDiffusion/方正兰亭准黑_GBK.ttf',"/home/ma-user/work/material/方正兰亭准黑_GBK.ttf")
if os.path.exists("/home/ma-user/work/material"):
print('Download success')
else:
raise Exception('Download Failed')
else:
print("Project already exists")
def gen_poster(img,txt1,txt2,path):
font1 = ImageFont.truetype(zt,30)
font2 = ImageFont.truetype(zt,25)
img_draw = ImageDraw.Draw(img)
img_draw.text((180,860), txt1, font=font1,fill='#961900')
img_draw.text((130,903), txt2, font=font2, fill='#252b3a')
img.filter(ImageFilter.BLUR)
img.save(path)
template_img = "/home/ma-user/work/material/AI_paint_TOM.png"
zt = r"/home/ma-user/work/material/方正兰亭准黑_GBK.ttf"
temp_image = Image.open(template_img)
temp_image.paste(image ,(40,266))
title_char = "CG女神" #@param {type:"string"}
author_char = "魔幻少女" #@param {type:"string"}
savepath = 'AI_paint_output.png' # 海报图片路径
gen_poster(temp_image,title_char,author_char,savepath)
Image.open(savepath) # 显示图片
待运行结束我们就看到根据自身需求定制的海报啦,具体如下图所示:
单张图片的生成与分享可以,那么多张也是没问题的,这里我们演示生成三行三列共九张图片,实现代码如下:
grid = image_grid(all_images, rows=num_rows, cols=num_cols)
grid
from PIL import Image
num_cols = 3 # 图像行数
num_rows = 3 # 图像列数
prompt = "Cygames girl character concept art and illustration by akihiko yoshida , ultimate dressy , amazing detailed face in profile closeup, galaxy in blue hair, Jewelry eyes , wearing a white galaxy dress , Line Array Speaker , Extreme Explosion , Subwoofer , kyoani character face , cute ,pretty girl , dynamic pose, portrait , pixiv daily ranking , pixiv , artstation ,specatcualr details, Volumetric Lighting , Dramatic lighting —ar 9:16 --test --creative --upbeta" #@param {type:"string"}
prompt_list = [prompt] * num_cols
def image_grid(imgs, rows, cols):
assert len(imgs) == rows * cols
w, h = imgs[0].size
grid = Image.new('RGB', size=(cols * w, rows * h))
grid_w, grid_h = grid.size
for i, img in enumerate(imgs):
grid.paste(img, box=(i % cols * w, i // cols * h))
return grid
all_images = []
for i in range(num_rows):
torch.cuda.empty_cache()
images = pipe(prompt_list)["sample"]
all_images.extend(images)
for index, img in enumerate(images):
img.save("img_%s_%s.png" % (str(i), str(index)))
grid = image_grid(all_images, rows=num_rows, cols=num_cols)
grid
#@title 请在此处填写Prompt,运行,即可生成3*3张图像
生成输出图片实现效果具体如下图所示:
对于 Prompt 有疑问或者需要进一步了解的同学可以参考这篇文章——《【云驻共创】一键 AI 作画,人人都是艺术家 理论 + 实操 教你实现 AI 应用快速开发篇(1)》
Prompt 是生成图片的提示词,可以是一个实体,例如猫,也可以是一串富含想象力的文字,例如:『夕阳日落时,天边有巨大的云朵,海面波涛汹涌,风景,胶片感』。不同的 Prompt 对于生成的图像质量影响非常大,所以如果要生成一幅优秀的图画,就要掌握写 Prompt 的一些经验性技巧。
以下是一些优秀图画及相关 Promot 的示范样例。
Promot:Cygames girl character concept art and illustration by akihiko yoshida , ultimate dressy , amazing detailed face in profile closeup, galaxy in blue hair, Jewelry eyes , wearing a white galaxy dress , Line Array Speaker , Extreme Explosion , Subwoofer , kyoani character face , cute ,pretty girl , dynamic pose, portrait , pixiv daily ranking , pixiv , artstation ,specatcualr details, Volumetric Lighting , Dramatic lighting —ar 9:16 --test --creative --upbeta
Cygames 女孩角色概念艺术和插图由 akihiko yoshida,终极打扮,惊人的详细的脸在侧面特写,银河在蓝色头发,珠宝眼睛,穿着白色银河礼服,线阵列扬声器,极端爆炸,低低音,kyoani 字符脸,可爱,漂亮的女孩,动态姿势,肖像,pixiv 日常排名,pixiv,artstation,壮观的细节,体积照明,戏剧照明-ar 9:16 -测试-创意-upbeta
实现效果具体如下图所示:
Promot:dark style painted, river flowing through forest of cherry blossom trees , under a galaxy filled sky, beautiful, galaxies, deep colors,ultra lighting, Bioelectric Modular Synthesizer, perfect symmetry, cinematic, volumetric lighting, --ar 9:16
黑色画风,河流流经樱花树林,在一个充满星系的天空下,美丽,星系,深的颜色,超照明,生物电模块合合器,完美的对称,电影,体积照明,——ar 9:16
实现效果具体如下图所示:
如何设计 Prompt,我们将通过 4 个方面来说明:图片的风格,内容主体,详细的描述,再加上画家的风格。需要注意的是,这里的 Prompt 公式仅仅是个入门级别的参考,是经验的简单总结,在熟悉了 Prompt 的原理之后,可以尽情的发挥脑洞修改 Prompt。
Prompt 公式框架:[图片的风格]+[内容主题]+[细节描述]+[绘画风格或者艺术家风格]
图片的风格按照这个框架,简单构造一个图片风格,比如:可以是一幅美丽的画,或者是一幅美丽的山水画。内容的主体 + 详细描述主体可以是各种各样的选择。推荐一些可以激发大家灵感的事物,如山水,人物,建筑房屋,动物等等,尽可能细致刻画这些实体事物。如果是简单的输入“大海”两个字,模型不知道我们想要的风景是什么样子的,一段作品的相对准确的描述,比如:梦幻的大海,白沙滩岸边铺满了粉色的玫瑰花,月光轻柔的人洒在海面上,绿色发光的海浪,我们要去尽量用详细的语言,用细节清楚的描述我们幻想的场景。比如:云中的 Skyrim 风格的山,有一个照明螺栓击中尖端导致雪崩,山区风景,实现效果具体如下图所示:
如果你是个新手,需要一些关于关键词的引导,那你可以去 https://lexica.art/ 这个网站看一看。它收集了很多关键词,并且一步一步、分门别类地为你整理好了。你只需要根据网站给出的步骤,从它的关键词库里选择你想要的效果,然后把这串关键词直接复制到 Prompt 里就好,把“填空题”变成“选择题”,非常方便,具体如下图所示:
在熟悉了 Prompt 的原理之后,就可以尽情的发挥脑洞修改它的写法,点击链接,快来 Happy Prompting 吧!
为了便于大家创作,在这里为大家提供常见的风格列举:古典主义、洛可可、巴洛克、印象派、新古典主义、写实主义、浪漫主义、唯美主义、表现主义、现实主义、魔幻现实主义、奇幻现实主义、象征主义、抽象主义、超扁平主义、超前卫艺术、中国风格、浮世绘、极简主义、几何风格、数字艺术、感念艺术、装饰艺术、复古未来主义风格、粉彩朋克风格、史前遗迹风格、波普艺术风格、迷幻风格、赛博朋克风格、未来主义风格、抽象技术风格、新艺术主义、抽象表现主义、北欧文艺复兴、原始主义、立体主义、色域绘画、波普艺术、极简主义、矫饰主义。
- Prompt搜索引擎:https://lexica.art/
- 两个 Prompts 插值:https://replicate.com/andreasjansson/stable-diffusion-animation
- 生成无缝贴图:https://withpoly.com/
- 用 Stable Diffusion 生成的艺术家风格参考库:https://proximacentaurib.notion.site/e2537cbf42c34b7e9a9a4126f81dfd0d?v=7b4a3c03fb654045be324eb71acc57e6
本文参与华为云社区【内容共创】活动第22期。
任务21:一键AI作画,人人都是艺术家 理论+实操 教你实现AI应用快速开发
- 点赞
- 收藏
- 关注作者
评论(0)