想必在所有游戏人的心里,都期待过一款能够根据玩家的自主行为进行剧情延申和场景渲染的游戏,这样的游戏不需要设计者,更像一个真实的世界。ERNIE_ZEUS让我看到了这种希望,我选择了一种之前很火的人生模拟器游戏作为模板,首先这样的形式比较简单容易实现,而且和人生模拟器游戏最大的不同是,虚拟人生剧本完全由ERNIE_ZEUS生成,而非各种预设人生的随机搭配,通过这样一种形式,真正完成从剧本到图像音频的AI游戏。

  • 利用ERNIE_ZEUS生成虚拟人生剧本

1岁: 小孩的天性,爱玩。
2岁: 喜欢和大人说话。
3岁: 开始有了自己的主意,但是还不会表达出来。
4岁: 这个时候的宝宝已经可以用语言表达一些简单的想法了。
5岁: 在幼儿园里学到很多知识,也认识了许多朋友。
6岁: 能够听懂老师讲课内容,并且喜欢上学。
7岁: 对于事物有着强烈的好奇心,总是问为什么?
8岁: 开始对父母产生依赖感,甚至会撒娇。
9岁: 身体各项机能发育完全成熟,已经具备了独立思考、判断的能力。
10岁: 正式进入青春期,有了自己的秘密,而且还有叛逆心理。
11岁: 因为某种原因开始变得沉默寡言,喜欢把心事藏起来。
12岁: 与同龄伙伴交往越来越少,只愿意跟父母亲近。
13岁: 这个年纪的孩子已经开始有了自己的理想,他们渴望长大,却又害怕长大。
14岁: 对异性充满幻想,希望找到属于自己的另一半。
15岁: 在外面受了委屈或者被欺负,就会回家告诉爸妈。
16岁: 对待任何事情都有自己的看法,而且坚持己见。
17岁: 虽然没有了童年时代的那份纯真,但是仍旧保留着那颗善良的心。
18岁: 随着社会阅历的增加,逐渐形成了自己的世界观和价值观。
19岁: 开始向往外面的花花世界,并且希望早点离开家去闯荡。
20岁: 从懵懂无知走向成熟稳重,开始追求自己的梦想。
21岁: 大部分的孩子都已经结婚生子,组建了幸福美满的家庭。
22岁: 这个阶段的孩子,最需要父母的关怀和照顾。
23岁: 由于工作压力过大,导致很多孩子患上了抑郁症。
24岁: 刚刚步入职场,每天都在努力奋斗中度过。
25岁: 孩子们终于迎来了自己的大学时光,并且收获了爱情。
26岁: 孩子们已经毕业参加工作,成为了社会的栋梁之才。
27岁: 他们有了自己的房子车子,日子过得越来越滋润。
28岁: 这个时候的孩子,基本上都已经结婚生子,有了自己的家庭。
29岁: 这个时候的孩子,即将踏入中年,肩膀上承担着更多的责任。
30岁: 他们有了自己的事业,并且取得了巨大的成功。
31岁: 他们的孩子也已经长大成人,他们也开始享受晚年生活。
32岁: 这个时候的孩子,身体素质开始下降,健康状况令人堪忧。
33岁: 孩子们已经慢慢老去,不再像当初那样精神抖擞。
34岁: 他们已经失去了所有的激情,剩下的只有平淡的生活。
35岁: 孩子们已经离开了我们,永远地离开了我们。
36岁: 他们的孩子已经成家立业,过上了安定幸福的生活。
37岁: 他们的孩子已经结婚生子,有了自己的家庭。
38岁: 他们的孩子已经成家立业,有了自己的家庭。

  • 利用ERNIE_VILG为每一个阶段生成图片描述,并添加相应字幕
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P9pqi8v1-1663473140040)(./pngs/0.png)]
  • 利用fastspeech2_baker生成字幕音频
  • 将图像和音频整合为完成虚拟人生视频

最终视频

技术方案

环境安装

# 环境安装
!pip install paddlehub --upgrade
!pip install docarray
# 文心模型
!hub install ernie_zeus
!hub install ernie_vilg

利用ERNIE_ZEUS生成虚拟人生剧本

# 生成人生剧本
import paddlehub as hub

model = hub.Module(name='ernie_zeus')

script = model.custom_generation(
    text='人生轨迹剧本。1岁:',
    min_dec_len=70,
    seq_len=1000,
    topp=0.3,
    penalty_score=1.2
)

print(script)
小孩的天性,爱玩。2岁:喜欢和大人说话。3岁:开始有了自己的主意,但是还不会表达出来。4岁:这个时候的宝宝已经可以用语言表达一些简单的想法了。5岁:在幼儿园里学到很多知识,也认识了许多朋友。6岁:能够听懂老师讲课内容,并且喜欢上学。7岁:对于事物有着强烈的好奇心,总是问为什么?8岁:开始对父母产生依赖感,甚至会撒娇。9岁:身体各项机能发育完全成熟,已经具备了独立思考、判断的能力。10岁:正式进入青春期,有了自己的秘密,而且还有叛逆心理。11岁:因为某种原因开始变得沉默寡言,喜欢把心事藏起来。12岁:与同龄伙伴交往越来越少,只愿意跟父母亲近。13岁:这个年纪的孩子已经开始有了自己的理想,他们渴望长大,却又害怕长大。14岁:对异性充满幻想,希望找到属于自己的另一半。15岁:在外面受了委屈或者被欺负,就会回家告诉爸妈。16岁:对待任何事情都有自己的看法,而且坚持己见。17岁:虽然没有了童年时代的那份纯真,但是仍旧保留着那颗善良的心。18岁:随着社会阅历的增加,逐渐形成了自己的世界观和价值观。19岁:开始向往外面的花花世界,并且希望早点离开家去闯荡。20岁:从懵懂无知走向成熟稳重,开始追求自己的梦想。21岁:大部分的孩子都已经结婚生子,组建了幸福美满的家庭。22岁:这个阶段的孩子,最需要父母的关怀和照顾。23岁:由于工作压力过大,导致很多孩子患上了抑郁症。24岁:刚刚步入职场,每天都在努力奋斗中度过。25岁:孩子们终于迎来了自己的大学时光,并且收获了爱情。26岁:孩子们已经毕业参加工作,成为了社会的栋梁之才。27岁:他们有了自己的房子车子,日子过得越来越滋润。28岁:这个时候的孩子,基本上都已经结婚生子,有了自己的家庭。29岁:这个时候的孩子,即将踏入中年,肩膀上承担着更多的责任。30岁:他们有了自己的事业,并且取得了巨大的成功。31岁:他们的孩子也已经长大成人,他们也开始享受晚年生活。32岁:这个时候的孩子,身体素质开始下降,健康状况令人堪忧。33岁:孩子们已经慢慢老去,不再像当初那样精神抖擞。34岁:他们已经失去了所有的激情,剩下的只有平淡的生活。35岁:孩子们已经离开了我们,永远地离开了我们。36岁:他们的孩子已经成家立业,过上了安定幸福的生活。37岁:他们的孩子已经结婚生子,有了自己的家庭。38岁:他们的孩子已经成家立业,有了自己的家庭。39岁:他
# 正则匹配方便后续处理
import re

scpt = re.sub(r'\d+岁:', '\t', script)
line = scpt.split('\t')[:-1]

for idx, l in enumerate(line):
    print(f'{idx+1}岁: {l}')

# 保存剧本
f = open('line.txt', 'w+')
for l in line:
    f.write(l + '\n')

1岁: 小孩的天性,爱玩。
2岁: 喜欢和大人说话。
3岁: 开始有了自己的主意,但是还不会表达出来。
4岁: 这个时候的宝宝已经可以用语言表达一些简单的想法了。
5岁: 在幼儿园里学到很多知识,也认识了许多朋友。
6岁: 能够听懂老师讲课内容,并且喜欢上学。
7岁: 对于事物有着强烈的好奇心,总是问为什么?
8岁: 开始对父母产生依赖感,甚至会撒娇。
9岁: 身体各项机能发育完全成熟,已经具备了独立思考、判断的能力。
10岁: 正式进入青春期,有了自己的秘密,而且还有叛逆心理。
11岁: 因为某种原因开始变得沉默寡言,喜欢把心事藏起来。
12岁: 与同龄伙伴交往越来越少,只愿意跟父母亲近。
13岁: 这个年纪的孩子已经开始有了自己的理想,他们渴望长大,却又害怕长大。
14岁: 对异性充满幻想,希望找到属于自己的另一半。
15岁: 在外面受了委屈或者被欺负,就会回家告诉爸妈。
16岁: 对待任何事情都有自己的看法,而且坚持己见。
17岁: 虽然没有了童年时代的那份纯真,但是仍旧保留着那颗善良的心。
18岁: 随着社会阅历的增加,逐渐形成了自己的世界观和价值观。
19岁: 开始向往外面的花花世界,并且希望早点离开家去闯荡。
20岁: 从懵懂无知走向成熟稳重,开始追求自己的梦想。
21岁: 大部分的孩子都已经结婚生子,组建了幸福美满的家庭。
22岁: 这个阶段的孩子,最需要父母的关怀和照顾。
23岁: 由于工作压力过大,导致很多孩子患上了抑郁症。
24岁: 刚刚步入职场,每天都在努力奋斗中度过。
25岁: 孩子们终于迎来了自己的大学时光,并且收获了爱情。
26岁: 孩子们已经毕业参加工作,成为了社会的栋梁之才。
27岁: 他们有了自己的房子车子,日子过得越来越滋润。
28岁: 这个时候的孩子,基本上都已经结婚生子,有了自己的家庭。
29岁: 这个时候的孩子,即将踏入中年,肩膀上承担着更多的责任。
30岁: 他们有了自己的事业,并且取得了巨大的成功。
31岁: 他们的孩子也已经长大成人,他们也开始享受晚年生活。
32岁: 这个时候的孩子,身体素质开始下降,健康状况令人堪忧。
33岁: 孩子们已经慢慢老去,不再像当初那样精神抖擞。
34岁: 他们已经失去了所有的激情,剩下的只有平淡的生活。
35岁: 孩子们已经离开了我们,永远地离开了我们。
36岁: 他们的孩子已经成家立业,过上了安定幸福的生活。
37岁: 他们的孩子已经结婚生子,有了自己的家庭。
38岁: 他们的孩子已经成家立业,有了自己的家庭。


[2022-09-05 19:52:10,236] [    INFO] - Installing dependent packages from /home/aistudio/.paddlehub/tmp/tmp4i9kn8td/fastspeech2_baker/requirements.txt: \

利用ERNIE_VILG为每一阶段生成图片描述

import paddlehub as hub
from docarray import DocumentArray, Document

ernie_vilg_module = hub.Module(name='ernie_vilg')
length = len(line)
for idx, l in enumerate(line):
    print(f'{idx+1}/{length}: {l}')
    # 保持胶片风格统一
    results = ernie_vilg_module.generate_image(text_prompts=f"{l},胶片感", style="油画", topk=1, output_dir=f'./ernievilg_output/{idx}/')

为图片添加剧本字幕

# 添加字幕
from PIL import Image, ImageDraw, ImageFont
import os

for i in range(length):
    name = [_ for _ in os.listdir(f'./ernievilg_output/{i}/') if '.png' in _ ][0]
    img = Image.open(os.path.join(f'./ernievilg_output/{i}/', name))
    draw = ImageDraw.Draw(img)
    ttfont = ImageFont.truetype('simhei.ttf', 30)
    draw.text((1000 - 30*len(line[i]), 920), f'{line[i]}', fill=(255, 255, 255), font=ttfont)
    img.save(f'./pngs/{i}.png')

生成字幕音频

!hub install fastspeech2_baker
# 字幕转音频
import paddlehub as hub
import paddle

paddle.disable_static()

for idx, l in enumerate(line):
    model = hub.Module(
    name='fastspeech2_baker',
    output_dir=f'./ernievilg_output/{idx}/',
    version='1.0.0')
    wav_files =  model.generate([l])
    # 打印合成的音频文件的路径
    print(wav_files)

视频合成

# 视频合成
# 可使用ffmpeg进行图像+音频合成(aistudio中不支持ffmpeg的使用)

此文章为搬运
原项目链接

更多推荐