当幻想的小说来到现实——基于stable diffusion的小说插画生成

引言

近期文生图大火,而这也激发了我曾经的玄幻小说插画梦,将玄幻带到现实,可惜本人手残,但能用ai作自己梦中的画也是不错的。

先简单介绍一下下stable diffusion

Stable Diffusion 是由 CompVisStability AILAION 的研究人员和工程师开源的文图生成模型。他们使用LAION-5B 数据库子集的512x512大小的图像进行训练。LAION-5B 是目前存在的最大、可免费访问的数据集。

在本篇Notebook中,我们将通过PaddleNLP框架中的Taskflow来调用Stable Diffusion模型,从而可以快速进行AI图像创作。

  • 论文地址:High-Resolution Image Synthesis with Latent Diffusion Models
  • 原版模型:https://github.com/CompVis/stable-diffusion
  • pytorch版模型:https://huggingface.co/CompVis/stable-diffusion
  • Huggingface团队有关该模型的介绍:https://huggingface.co/blog/stable_diffusion (强烈建议阅读一下该blog!

一、项目简介

  • 要达成的目标是:把看到的小说内容用图画展示出来,也就是给我们所喜爱的小说画个我们梦里的插图
  • 主要思路是:先ocr提取文本,然后提取摘要,然后生成图片
  • 提取文本用到了paddleocr
  • 提取摘要使用paddlehub调用文心大模型
  • 生成图片采用stable diffusion模型

运行本项目最好采用了v100 32g的算力 以防算力不够无法运行

二、安装相关包

主要是hub、paddlenlp、和一些其它的依赖包

注意paddlenlp得版本得大于2.3.0 不然会报错

!pip install --upgrade paddlepaddle-gpu
!pip install paddlenlp==2.4.0
!pip install shapely -i https://pypi.tuna.tsinghua.edu.cn/simple
!pip install pyclipper -i https://pypi.tuna.tsinghua.edu.cn/simple
!pip install regex
!pip install --upgrade paddlehub

三、加载相关的数据

即我们所看到的小说章节的图片

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
test_img_path = ["./dopocangqiong.png"]
img1 = mpimg.imread(test_img_path[0])
plt.figure(figsize=(10,10))
plt.imshow(img1)
plt.axis('off')
plt.show()
<Figure size 1000x1000 with 1 Axes>

四、加载ocr预训练模型并提取文本

import paddlehub as hub# 加载移动端预训练模型
ocr = hub.Module(name="chinese_ocr_db_crnn_mobile")
[2022-10-20 11:39:25,339] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object
import cv2# 读取测试文件夹test.txt中的照片路径
np_images =[cv2.imread(image_path) for image_path in test_img_path] results = ocr.recognize_text(images=np_images,         # 图片数据,ndarray.shape 为 [H, W, C],BGR格式;use_gpu=False,            # 是否使用 GPU;若使用GPU,请先设置CUDA_VISIBLE_DEVICES环境变量output_dir='ocr_result',  # 图片的保存路径,默认设为 ocr_result;visualization=False,       # 是否将识别结果保存为图片文件;box_thresh=0.5,           # 检测文本框置信度的阈值;text_thresh=0.5)          # 识别中文文本置信度的阈值;
pro=''
for result in results:data = result['data']save_path = result['save_path']for infomation in data:print('text: ', infomation['text'], '\nconfidence: ', infomation['confidence'], '\ntext_box_position: ', infomation['text_box_position'])pro+=infomation['text']print(pro)
[2022-10-20 11:39:26,055] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the objecttext:  云雾硫韵庞大山脉,在此刻就犹如一头即将苏醒的远古凶兽般,一道道低沉的轰隆隆声响,从山
confidence:  0.9596802592277527
text_box_position:  [[34, 8], [724, 8], [724, 26], [34, 26]]
云雾硫韵庞大山脉,在此刻就犹如一头即将苏醒的远古凶兽般,一道道低沉的轰隆隆声响,从山
text:  脉高空中传出,而且伴随着这股巨响出现的,还有着那铺天盖地的浩瀚能量
confidence:  0.9882534146308899
text_box_position:  [[31, 35], [564, 35], [564, 53], [31, 53]]
云雾硫韵庞大山脉,在此刻就犹如一头即将苏醒的远古凶兽般,一道道低沉的轰隆隆声响,从山脉高空中传出,而且伴随着这股巨响出现的,还有着那铺天盖地的浩瀚能量
text:  “!
confidence:  0.6421520709991455
text_box_position:  [[42, 81], [85, 81], [85, 96], [42, 96]]
云雾硫韵庞大山脉,在此刻就犹如一头即将苏醒的远古凶兽般,一道道低沉的轰隆隆声响,从山脉高空中传出,而且伴随着这股巨响出现的,还有着那铺天盖地的浩瀚能量“!
text:  浓郁云雾中,浩瀚的能量急速翻涌,到得最后,甚至是传出了犹如海浪翻涌般的浪花声音,这奇异一
confidence:  0.9763447046279907
text_box_position:  [[32, 128], [730, 128], [730, 145], [32, 145]]
云雾硫韵庞大山脉,在此刻就犹如一头即将苏醒的远古凶兽般,一道道低沉的轰隆隆声响,从山脉高空中传出,而且伴随着这股巨响出现的,还有着那铺天盖地的浩瀚能量“!浓郁云雾中,浩瀚的能量急速翻涌,到得最后,甚至是传出了犹如海浪翻涌般的浪花声音,这奇异一
text:  幕,令得不少人皆是惊叹出声,大自然果然无奇不有。
confidence:  0.9802252650260925
text_box_position:  [[32, 152], [407, 153], [407, 171], [32, 170]]
云雾硫韵庞大山脉,在此刻就犹如一头即将苏醒的远古凶兽般,一道道低沉的轰隆隆声响,从山脉高空中传出,而且伴随着这股巨响出现的,还有着那铺天盖地的浩瀚能量“!浓郁云雾中,浩瀚的能量急速翻涌,到得最后,甚至是传出了犹如海浪翻涌般的浪花声音,这奇异一幕,令得不少人皆是惊叹出声,大自然果然无奇不有。
text:  庞大的能量潮汐,伴随着涌动,片刻后,居然是直接冲出了云雾,哗啦啦的急速扩散而出,弦得一些
confidence:  0.9574014544487
text_box_position:  [[31, 199], [736, 199], [736, 217], [31, 217]]
云雾硫韵庞大山脉,在此刻就犹如一头即将苏醒的远古凶兽般,一道道低沉的轰隆隆声响,从山脉高空中传出,而且伴随着这股巨响出现的,还有着那铺天盖地的浩瀚能量“!浓郁云雾中,浩瀚的能量急速翻涌,到得最后,甚至是传出了犹如海浪翻涌般的浪花声音,这奇异一幕,令得不少人皆是惊叹出声,大自然果然无奇不有。庞大的能量潮汐,伴随着涌动,片刻后,居然是直接冲出了云雾,哗啦啦的急速扩散而出,弦得一些
text:  停留天空的人影急忙闪掠而下,若是被那股恐怖的能量潮席卷而进,即便是斗宗强者,恐怕不死也
confidence:  0.9774854779243469
text_box_position:  [[32, 224], [735, 224], [735, 242], [32, 242]]
云雾硫韵庞大山脉,在此刻就犹如一头即将苏醒的远古凶兽般,一道道低沉的轰隆隆声响,从山脉高空中传出,而且伴随着这股巨响出现的,还有着那铺天盖地的浩瀚能量“!浓郁云雾中,浩瀚的能量急速翻涌,到得最后,甚至是传出了犹如海浪翻涌般的浪花声音,这奇异一幕,令得不少人皆是惊叹出声,大自然果然无奇不有。庞大的能量潮汐,伴随着涌动,片刻后,居然是直接冲出了云雾,哗啦啦的急速扩散而出,弦得一些停留天空的人影急忙闪掠而下,若是被那股恐怖的能量潮席卷而进,即便是斗宗强者,恐怕不死也
text:  得脱层皮。
confidence:  0.959040641784668
text_box_position:  [[30, 249], [102, 251], [102, 270], [30, 268]]
云雾硫韵庞大山脉,在此刻就犹如一头即将苏醒的远古凶兽般,一道道低沉的轰隆隆声响,从山脉高空中传出,而且伴随着这股巨响出现的,还有着那铺天盖地的浩瀚能量“!浓郁云雾中,浩瀚的能量急速翻涌,到得最后,甚至是传出了犹如海浪翻涌般的浪花声音,这奇异一幕,令得不少人皆是惊叹出声,大自然果然无奇不有。庞大的能量潮汐,伴随着涌动,片刻后,居然是直接冲出了云雾,哗啦啦的急速扩散而出,弦得一些停留天空的人影急忙闪掠而下,若是被那股恐怖的能量潮席卷而进,即便是斗宗强者,恐怕不死也得脱层皮。
text:  巨大的能量潮汐成五彩斑澜颜色,在阳光的照射下,犹如条宽故无比的五彩河流,横挂天空,绚丽
confidence:  0.9573021531105042
text_box_position:  [[34, 297], [728, 297], [728, 315], [34, 315]]
云雾硫韵庞大山脉,在此刻就犹如一头即将苏醒的远古凶兽般,一道道低沉的轰隆隆声响,从山脉高空中传出,而且伴随着这股巨响出现的,还有着那铺天盖地的浩瀚能量“!浓郁云雾中,浩瀚的能量急速翻涌,到得最后,甚至是传出了犹如海浪翻涌般的浪花声音,这奇异一幕,令得不少人皆是惊叹出声,大自然果然无奇不有。庞大的能量潮汐,伴随着涌动,片刻后,居然是直接冲出了云雾,哗啦啦的急速扩散而出,弦得一些停留天空的人影急忙闪掠而下,若是被那股恐怖的能量潮席卷而进,即便是斗宗强者,恐怕不死也得脱层皮。巨大的能量潮汐成五彩斑澜颜色,在阳光的照射下,犹如条宽故无比的五彩河流,横挂天空,绚丽
text:  无比,然而就是在这幅绚丽之下,卸是隐藏着致命般的危机
confidence:  0.9849212169647217
text_box_position:  [[35, 325], [453, 325], [453, 339], [35, 339]]
云雾硫韵庞大山脉,在此刻就犹如一头即将苏醒的远古凶兽般,一道道低沉的轰隆隆声响,从山脉高空中传出,而且伴随着这股巨响出现的,还有着那铺天盖地的浩瀚能量“!浓郁云雾中,浩瀚的能量急速翻涌,到得最后,甚至是传出了犹如海浪翻涌般的浪花声音,这奇异一幕,令得不少人皆是惊叹出声,大自然果然无奇不有。庞大的能量潮汐,伴随着涌动,片刻后,居然是直接冲出了云雾,哗啦啦的急速扩散而出,弦得一些停留天空的人影急忙闪掠而下,若是被那股恐怖的能量潮席卷而进,即便是斗宗强者,恐怕不死也得脱层皮。巨大的能量潮汐成五彩斑澜颜色,在阳光的照射下,犹如条宽故无比的五彩河流,横挂天空,绚丽无比,然而就是在这幅绚丽之下,卸是隐藏着致命般的危机

五、对提取文本生成摘要

这里有两个轻量模型的选择,一个是使用hub调用文心ernie_zeus,另一个则是使用paddlenlp的taskflow调用文本摘要模型,这部分也建议自训练一个模型进行使用,这可以使得我们的插画更加符合我们的梦境。

# 准备生成摘要所需的接口
# 加载模型
# model = hub.Module(name='ernie_zeus')
from paddlenlp import Taskflow
summarizer = Taskflow("text_summarization")
# 文本摘要
# print(pro)
# result = model.custom_generation(pro)
# txt_smr = result
# print(txt_smr)
result =summarizer(pro)
txt_smr=result
print(txt_smr)

在摘要的基础上增加我们个人的梦境因素的prompt使得生成的插画更加符合我们梦里的模样。


prompt_add=["云雾环绕的高山 , 阳光盛大,五彩河流,仙境 ,数字艺术"]
txt_smr=txt_smr[0]+prompt_add[0]
print(txt_smr)
《幻城》云雾硫韵能量潮汐成五彩斑澜颜色云雾环绕的高山 , 阳光盛大,五彩河流,仙境 ,数字艺术

由于stable diffusion是一个英文模型,所以我们需要将这些我们提取的文本摘要翻译成英文。
这边我们使用paddlehub中内置的文本翻译模型,轻量且准确率高。


#文本翻译
import paddlehub as hub
model = hub.Module(name='transformer_zh-en', beam_size=5)
src_texts = [txt_smr]
n_best = 3 # 每个输入样本的输出候选句子数量
trg_texts = model.predict(src_texts, n_best=n_best)
print(trg_texts)

六、基于stable diffusion插画生成

用于使用hub调用stable diffusion不太稳定,所以我们还是使用paddlenlp的taskflow对stable进行调用

from PIL import Image
# module = hub.Module(name='stable_diffusion')
text_to_image = Taskflow("text_to_image", model="CompVis/stable-diffusion-v1-4")
prompt = [trg_texts[2]+",novel cover,Makoto Shinkai style,hot-blooded,4k"]
image_list = text_to_image(prompt)
for batch_index, batch_image in enumerate(image_list):
# len(batch_image) == 2 (num_return_images)for image_index_in_returned_images, each_image in enumerate(batch_image):each_image.save(f"stable-diffusion-figure_{batch_index}_{image_index_in_returned_images}.png")display(image_list[batch_index][image_index_in_returned_images])
[2022-10-20 11:40:35,667] [    INFO] - Downloading tokenizer_config.json from https://bj.bcebos.com/paddlenlp/models/community/CompVis/stable-diffusion-v1-4/tokenizer_config.json
100%|██████████| 194/194 [00:00<00:00, 120kB/s]
[2022-10-20 11:40:35,779] [    INFO] - We are using <class 'paddlenlp.transformers.clip.tokenizer.CLIPTokenizer'> to load 'CompVis/stable-diffusion-v1-4'.
[2022-10-20 11:40:35,782] [    INFO] - Downloading https://bj.bcebos.com/paddlenlp/models/community/CompVis/stable-diffusion-v1-4/vocab.json and saved to /home/aistudio/.paddlenlp/models/CompVis/stable-diffusion-v1-4
[2022-10-20 11:40:35,785] [    INFO] - Downloading vocab.json from https://bj.bcebos.com/paddlenlp/models/community/CompVis/stable-diffusion-v1-4/vocab.json
100%|██████████| 842k/842k [00:00<00:00, 9.27MB/s]
[2022-10-20 11:40:35,964] [    INFO] - Downloading https://bj.bcebos.com/paddlenlp/models/community/CompVis/stable-diffusion-v1-4/merges.txt and saved to /home/aistudio/.paddlenlp/models/CompVis/stable-diffusion-v1-4
[2022-10-20 11:40:35,966] [    INFO] - Downloading merges.txt from https://bj.bcebos.com/paddlenlp/models/community/CompVis/stable-diffusion-v1-4/merges.txt
100%|██████████| 512k/512k [00:00<00:00, 3.26MB/s]
[2022-10-20 11:40:36,192] [    INFO] - Downloading https://bj.bcebos.com/paddlenlp/models/community/CompVis/stable-diffusion-v1-4/added_tokens.json and saved to /home/aistudio/.paddlenlp/models/CompVis/stable-diffusion-v1-4
[2022-10-20 11:40:36,194] [    INFO] - Downloading added_tokens.json from https://bj.bcebos.com/paddlenlp/models/community/CompVis/stable-diffusion-v1-4/added_tokens.json
100%|██████████| 2.00/2.00 [00:00<00:00, 1.16kB/s]
[2022-10-20 11:40:36,269] [    INFO] - Downloading https://bj.bcebos.com/paddlenlp/models/community/CompVis/stable-diffusion-v1-4/special_tokens_map.json and saved to /home/aistudio/.paddlenlp/models/CompVis/stable-diffusion-v1-4
[2022-10-20 11:40:36,271] [    INFO] - Downloading special_tokens_map.json from https://bj.bcebos.com/paddlenlp/models/community/CompVis/stable-diffusion-v1-4/special_tokens_map.json
100%|██████████| 478/478 [00:00<00:00, 289kB/s]
[2022-10-20 11:40:36,347] [    INFO] - Already cached /home/aistudio/.paddlenlp/models/CompVis/stable-diffusion-v1-4/tokenizer_config.json
[2022-10-20 11:40:36,350] [ WARNING] - ftfy or spacy is not installed using BERT BasicTokenizer instead of ftfy.
[2022-10-20 11:40:36,423] [    INFO] - Downloading model_config.json from https://bj.bcebos.com/paddlenlp/models/community/CompVis/stable-diffusion-v1-4/model_config.json
100%|██████████| 661/661 [00:00<00:00, 490kB/s]
[2022-10-20 11:40:36,503] [    INFO] - We are using <class 'paddlenlp.transformers.clip.modeling.CLIPForImageGeneration'> to load 'CompVis/stable-diffusion-v1-4'.
[2022-10-20 11:40:36,505] [    INFO] - Downloading https://bj.bcebos.com/paddlenlp/models/community/CompVis/stable-diffusion-v1-4/model_state.pdparams and saved to /home/aistudio/.paddlenlp/models/CompVis/stable-diffusion-v1-4
[2022-10-20 11:40:36,507] [    INFO] - Downloading model_state.pdparams from https://bj.bcebos.com/paddlenlp/models/community/CompVis/stable-diffusion-v1-4/model_state.pdparams
100%|██████████| 5.10G/5.10G [01:46<00:00, 51.7MB/s]
[2022-10-20 11:42:22,633] [    INFO] - Already cached /home/aistudio/.paddlenlp/models/CompVis/stable-diffusion-v1-4/model_config.json0it [00:00, ?it/s]0it [00:00, ?it/s]

display(image_list[0][0])

七、个人建议和总结

  • 不建议生成的插画里面包含捏脸的元素,可能很大程度上带来感官不适应。
  • 非常欢迎生成景色插画,这个在本项目可以有较好的生成效果。
  • 未来期待,将文本摘要部分进行自训练,这样可以让效果达到更佳。
  • 当然如果用可能,将sd改成可中文的也是不错的可惜本人能力不行(bushi)

如果大家想要尝试用stable diffusion捏脸

欢迎大家使用军哥写的项目来调参

四行PaddleNLP代码体验Stable Diffusion:https://aistudio.baidu.com/aistudio/projectdetail/4459390?sUid=590128&shared=1&ts=1666097025761

此文章为搬运
原项目链接

当幻想的小说来到现实——基于stable diffusion的小说插画生成相关推荐

  1. 基于 Stable Diffusion 一键 AI 作画:什么“小镇做题家”?人人都是艺术家

    文章目录 前言 一.西方艺术简史 1.1.古典艺术时期 1.2.现代艺术时期 1.3.后现代艺术时期 二.数字艺术的诞生和发展 2.1.数字艺术的诞生 2.2.数字艺术下的行业细分 2.3.数字作品的 ...

  2. 昆仑天工AIGC——基于Stable Diffusion的多语言AI作画大模型测评

    文章目录 1. AIGC 2. 技术背景 2.1. Stable Diffusion 2.1.1. 图像感知压缩(Perceptual Image Compression) 2.1.2. 隐扩散模型( ...

  3. 由浅入深理解latent diffusion/stable diffusion(2):扩散生成模型的工作原理

    Diffusion Models专栏文章汇总:入门与实战 前言: 关于如何使用stable diffusion的文章已经够多了,但是由浅入深探索stable diffusion models背后原理, ...

  4. 3D暴龙模型塞进侏罗纪公园只需一部手机,拍摄角度360°可选,Stable Diffusion又被玩出新花样...

    萧箫 发自 凹非寺 量子位 | 公众号 QbitAI 拍照想拍出大片效果,布置场景有多麻烦? 例如光是一辆车.一个人同时出现在一个草坪上的场景,就得同时找齐全这三样要素,在现场拍完后还得花费不少时间修 ...

  5. 在 Amazon SageMaker 上玩转 Stable Diffusion: 基于 Dreambooth 的模型微调

    本文将以 Stable Diffusion Quick Kit 为例,详细讲解如何利用 Dreambooth 对 Stable Diffusion 模型进行微调,包括基础的 Stable Diffus ...

  6. Stable Diffusion背后的故事:独辟蹊径,开源和社区驱动的AI独角兽 | 创始人专访...

    今日,AI文生图模型Stable Diffusion背后的公司Stability AI宣布获得了1.01亿美元超额融资,此轮融资后,Stability AI 估值已到达 10 亿美元,成为新晋独角兽. ...

  7. AIGC:Stable Diffusion(一项普通人就能实现的AI前沿科技)的简介、Stable Diffusion2.0的改进、安装、使用方法(文本到图像/图像修改/超分辨率/图像修复)之详细攻略

    AIGC:Stable Diffusion(一项普通人就能实现的AI前沿科技)的简介.Stable Diffusion2.0的改进.安装.使用方法(文本到图像/图像修改/超分辨率/图像修复)之详细攻略 ...

  8. GPT-3、Stable Diffusion一起助攻,让模型听懂甲方修图需求

    来源:机器之心 AI 可以完全按照甲方意愿修图?GPT-3.Stable Diffusion 一起助攻,让模型秒变 PS 高手,改图随心所欲. 扩散模型大火之后,很多人将注意力放到了如何利用更有效的 ...

  9. 《微SaaS创富周刊》第3期:GPT-3\ChatGPT、Stable Diffusion等AI模型驱动的微SaaS创意盘点

    大家新年好!第3期<微SaaS创富周刊>问世啦!本周刊面向独立开发者.早期创业团队,报道他们主要的产品形态--微SaaS如何变现的最新资讯和经验分享等.所谓微SaaS,就是"针对 ...

最新文章

  1. Linux的Unicon资料
  2. 网文作者:我太监了;GPT-3:我给你接上
  3. [改善Java代码]生成子列表后不要再操作原列表
  4. 七、SpringBoot整合elasticsearch集群
  5. Hibernate学习笔记(一)
  6. ReportViewer教程(8)-对报表作一些调整(格式和属性)
  7. 不用AJAX实现前台JS调用后台C#方法(小技巧)
  8. Jedis与Redisson对比有什么优缺点?
  9. 乌班图安装pycharm
  10. TCP报文段的首部格式
  11. iphone中各种文件路径
  12. leetcode每日一题 838. 推多米诺 正解 双指针~这题很考察模拟逻辑——是一道不错的模拟题
  13. 计算机名、有线网卡mac地址、无线网卡mac地址
  14. ICE 3.7.4 实现客户服务端hello world
  15. 暑假多看看英文原版电影
  16. java余弦距离_使用TensorFlow实现余弦距离/欧氏距离(Euclideandistance)以及Attention矩阵的计算...
  17. 如何利用seo技术霸屏你的行业关键词排名
  18. 【项目实战】IPC摄像头在线状态ping检测与告警邮件发送项目总结
  19. Selenium switch_to方法
  20. Vue基础-09-表单输入绑定

热门文章

  1. 使用Flexible.js实现手机端网页内容适配(rem适配法)
  2. 【树莓派换清华源 】 armv7l bullseye
  3. iOS-检查版本更新
  4. 在EPICS定义一个新的记录类型
  5. 页面使用html生成一个n行n列表格,HTML静态网页:表格、表单
  6. 《大数据可视化》课后习题答案-何光威版
  7. 系统和环境(建模与仿真)
  8. unity 超简单的圆形进度条
  9. 高颜值游戏蓝牙耳机初体验,2020新款低延迟蓝牙耳机测评推荐
  10. 剑指 Offer第 11 天 双指针(简单)