Python实现一行代码自动绘制艺术画

作者:Ckend 时间:2021-03-26 00:32:54 

DiscoArt 是一个很牛的开源模块,它能根据你给定的关键词自动绘画。

绘制过程是完全可见的,你可以在 jupyter 页面上看见这个绘制的过程:

Python实现一行代码自动绘制艺术画

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Python安装指南 进行安装。

(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda,它内置了Python和pip.

(可选2) 此外,推荐大家用VSCode编辑器,它有许多的优点

请选择以下任一种方式输入命令安装依赖

1. Windows 环境 打开 Cmd (开始-运行-CMD)。

2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。

3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.

pip install discoart

为了运行 Discoart, 你需要Python 3.7+ 和支持 CUDA 的 PyTorch.

2.开始使用 Discoart

你可以在Jupyter中运行Discoart,这样能方便地实时展示绘制过程:

from discoart import create

da = create()

这样将使用默认的 文本描述 和参数创建图像:

text_prompts:
  - A beautiful painting of a singular lighthouse, shining its light across a tumultuous sea of blood by greg rutkowski and thomas kinkade, Trending on artstation.
  - yellow color scheme

init_image:
width_height: [ 1280, 768 ]

skip_steps: 0
steps: 250

init_scale: 1000
clip_guidance_scale: 5000

tv_scale: 0
range_scale: 150
sat_scale: 0
cutn_batches: 4

diffusion_model: 512x512_diffusion_uncond_finetune_008100
use_secondary_model: True
diffusion_sampling_mode: ddim

perlin_init: False
perlin_mode: mixed
seed:
eta: 0.8
clamp_grad: True
clamp_max: 0.05

randomize_class: True
clip_denoised: False
rand_mag: 0.05

cut_overview: "[12]*400+[4]*600"
cut_innercut: "[4]*400+[12]*600"
cut_icgray_p: "[0.2]*400+[0]*600"
cut_ic_pow: 1.

save_rate: 20
gif_fps: 20
gif_size_ratio: 0.5
n_batches: 4
batch_size: 1
batch_name:
clip_models:
  - ViT-B-32::openai
  - ViT-B-16::openai
  - RN50::openai
clip_models_schedules:

use_vertical_symmetry: False
use_horizontal_symmetry: False
transformation_percent: [0.09]

on_misspelled_token: ignore
diffusion_model_config:
cut_schedules_group:
name_docarray:
skip_event:
stop_event:
text_clip_on_cpu: False
truncate_overlength_prompt: False
image_output: True
visualize_cuts: False
display_rate: 1

创建出来的就是这个图:

Python实现一行代码自动绘制艺术画

Create 支持的所有参数如下:

text_prompts:
  - A beautiful painting of a singular lighthouse, shining its light across a tumultuous sea of blood by greg rutkowski and thomas kinkade, Trending on artstation.
  - yellow color scheme

init_image:
width_height: [ 1280, 768 ]

skip_steps: 0
steps: 250

init_scale: 1000
clip_guidance_scale: 5000

tv_scale: 0
range_scale: 150
sat_scale: 0
cutn_batches: 4

diffusion_model: 512x512_diffusion_uncond_finetune_008100
use_secondary_model: True
diffusion_sampling_mode: ddim

perlin_init: False
perlin_mode: mixed
seed:
eta: 0.8
clamp_grad: True
clamp_max: 0.05

randomize_class: True
clip_denoised: False
rand_mag: 0.05

cut_overview: "[12]*400+[4]*600"
cut_innercut: "[4]*400+[12]*600"
cut_icgray_p: "[0.2]*400+[0]*600"
cut_ic_pow: 1.

save_rate: 20
gif_fps: 20
gif_size_ratio: 0.5
n_batches: 4
batch_size: 1
batch_name:
clip_models:
  - ViT-B-32::openai
  - ViT-B-16::openai
  - RN50::openai
clip_models_schedules:

use_vertical_symmetry: False
use_horizontal_symmetry: False
transformation_percent: [0.09]

on_misspelled_token: ignore
diffusion_model_config:
cut_schedules_group:
name_docarray:
skip_event:
stop_event:
text_clip_on_cpu: False
truncate_overlength_prompt: False
image_output: True
visualize_cuts: False
display_rate: 1

你可以这么使用参数:

from discoart import create

da = create(
    text_prompts='A painting of sea cliffs in a tumultuous storm, Trending on ArtStation.',
    init_image='https://d2vyhzeko0lke5.cloudfront.net/2f4f6dfa5a05e078469ebe57e77b72f0.png',
    skip_steps=100,
)

Python实现一行代码自动绘制艺术画

如果你不是用jupyter运行的,你也可以看到中间结果,因为最终结果和中间结果都会被创建在当前工作目录下,即

./{name-docarray}/{i}-done.png
./{name-docarray}/{i}-step-{j}.png
./{name-docarray}/{i}-progress.png
./{name-docarray}/{i}-progress.gif
./{name-docarray}/da.protobuf.lz4

  • name-docarray是运行时定义的名称,如果没有定义,则会随机生成。

  • i-* 第几个Batch。

  • *-done-* 是当前Batch完成后的最终图像。

  • *-step-* 是某一步的中间图像,实时更新。

  • *-progress.png 是到目前为止所有中间结果的png图像,实时更新。

  • *-progress.gif 是到目前为止所有中间结果的动画 gif,实时更新。

  • da.protobuf.lz4 是到目前为止所有中间结果的压缩 protobuf,实时更新。

3.显示/保存/加载配置

如果你想知道你当前绘图的配置,有三种方法:

from discoart import show_config

show_config(da) # show the config of the first run
show_config(da[3]) # show the config of the fourth run
show_config(
    'discoart-06030a0198843332edc554ffebfbf288'
) # show the config of the run with a known DocArray ID

要保存 Document/DocumentArray 的配置:

from discoart import save_config

save_config(da, 'my.yml') # save the config of the first run
save_config(da[3], 'my.yml') # save the config of the fourth run

从配置中导入:

from discoart import create, load_config

config = load_config('my.yml')
create(**config)

此外,你还能直接把配置导出为图像的形式

from discoart.config import save_config_svg

save_config_svg(da)

Python实现一行代码自动绘制艺术画

来源:https://mp.weixin.qq.com/s/pzUZqm5ZReDiCOROHysncQ

标签:Python,艺术画
0
投稿

猜你喜欢

  • vue中el-table两个表尾合计行联动同步滚动条实例代码

    2023-07-02 17:08:56
  • 安装sql server 2008 management提示已安装 SQL Server 2005 Express的解决方法

    2024-01-15 12:49:03
  • 详解Python利用configparser对配置文件进行读写操作

    2022-08-02 22:24:38
  • 在django中使用post方法时,需要增加csrftoken的例子

    2023-08-12 06:44:34
  • 详解Python中表达式i += x与i = i + x是否等价

    2023-07-29 06:51:12
  • 浅谈一次与sql注入 & webshell 的美丽“邂逅”

    2024-01-22 09:48:22
  • Python 一行代码能实现丧心病狂的功能

    2023-07-25 08:32:17
  • JS前端接口请求参数混淆方案分享

    2024-04-18 10:53:17
  • 一篇文章带你深入了解Mysql触发器

    2024-01-14 15:42:35
  • 浅谈Python 函数式编程

    2022-09-03 20:38:07
  • SqlServer 巧妙解决多条件组合查询

    2023-07-01 14:15:00
  • 基于python实现操作redis及消息队列

    2021-08-06 22:31:29
  • Pytest测试框架基本使用方法详解

    2022-06-23 20:49:04
  • PHP实现逐行删除文件右侧空格的方法 <font color=red>原创</font>

    2023-11-22 05:11:25
  • 通过代码实例了解Python异常本质

    2023-06-14 06:29:19
  • vue.js选中动态绑定的radio的指定项

    2024-04-27 16:13:25
  • mysql重复索引与冗余索引实例分析

    2024-01-25 11:52:53
  • Python爬取门户论坛评论浅谈Python未来发展方向

    2021-10-26 19:09:12
  • JS实现合并json对象的方法

    2023-08-29 15:09:30
  • asp php 清空access mysql mssql数据库的代码

    2023-11-20 21:49:13
  • asp之家 网络编程 m.aspxhome.com