当前位置: 首页
AI
【情人节特辑】:虚拟女友教你如何正确“回答”

【情人节特辑】:虚拟女友教你如何正确“回答”

热心网友 时间:2025-07-20
转载
该项目旨在通过技术手段将“直男话术”转化为高情商表达,以增进情侣感情。其核心是让虚拟女友纠正不当话语,具体步骤如下:首先,输入直男语句(如“多喝热水”)转换为对应编号的高情商表达;接着用Pixel2Pixel模型将卡通照片真人化;再将真人化照片输入PaddleBoBo生成女友动画;最后让虚拟女友纠正话语。项目需32GB以上显卡环境,依赖相关模型和工具实现。

【情人节特辑】:虚拟女友教你如何正确“回答” - 游乐网

虚拟女友纠正话语器

情侣之间相处少不了摩擦,但是据发现很多不必要的吵架,往往是词不达意造成的。比如关心她的身体健康,要注意身体,往往就只说了句“多喝热水”。如果换成另外一种表达,会让对方更容易接受,也更容易接收你给的爱意。因此“会说话”就变得十分重要了。这个项目就给大家一个初步的示范,怎么样的高情商的回答会让这段感情升温。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

主要内容借鉴了我之前的项目:打造一个专属自己的卡通真人化主播

例如输入这张照片以及直男话术,你觉得会呈现出什么效果的视频呢?(doge)

【情人节特辑】:虚拟女友教你如何正确“回答” - 游乐网

直男语句:多喝热水。

效果展示

整体实现:

1.输入直男话语切换成高情商语句

2.利用Pixel2Pixel模型实现卡通照片真人化

3.把真人化输出的照片输入进PaddleBoBo生成女友动画

4.让虚拟女友纠正你的话语

PS:执行此项目请使用32GB显卡以上环境(看PaddleBoBo作者项目有提到,用16GB会爆内存导致跑不通,且本次项目也是在32GB显卡环境上制作的)

第一步、输入直男话语切换成高情商语句

请记住生成的编号等等用得着

In [ ]
huashu_dict={'多喝热水':'a',            '你怎么又生气了':'b',            '你又怎么了':'c',            '你要这样想我也没办法':'d',            '随便你!你定吧':'e',            '哦':'f'}#请输入上面指定语句(粗糙版,请大家多多包涵)a = input('请输入直男语句:'+'\n')if a in huashu_dict:    print('已生成合适的话术'+'\n'+'请记住生成编号'+':'+huashu_dict.get(a))else:    print('不好意思,这句话我还没学会呢。')
登录后复制
请输入直男语句:已生成合适的话术请记住生成编号:a
登录后复制

第二步、利用Pixel2Pixel模型实现卡通照片真人化

主要是修改 image_name='01503.webp',改成自己心仪的动漫照片(最好使用逆向思维:卡通照片真人化项目里面数据集的照片文件,其他动漫照片生成效果不好看,我不负责的哈)

In [ ]
import paddleimport paddle.nn as nnfrom paddle.io import Dataset, DataLoaderimport osimport cv2import numpy as npfrom tqdm import tqdmimport matplotlib.pyplot as pltimport PIL.Image as Image%matplotlib inlineclass UnetGenerator(nn.Layer):    def __init__(self, input_nc=3, output_nc=3, ngf=64):        super(UnetGenerator, self).__init__()        self.down1 = nn.Conv2D(input_nc, ngf, kernel_size=4, stride=2, padding=1)        self.down2 = Downsample(ngf, ngf*2)        self.down3 = Downsample(ngf*2, ngf*4)        self.down4 = Downsample(ngf*4, ngf*8)        self.down5 = Downsample(ngf*8, ngf*8)        self.down6 = Downsample(ngf*8, ngf*8)        self.down7 = Downsample(ngf*8, ngf*8)        self.center = Downsample(ngf*8, ngf*8)        self.up7 = Upsample(ngf*8, ngf*8, use_dropout=True)        self.up6 = Upsample(ngf*8*2, ngf*8, use_dropout=True)        self.up5 = Upsample(ngf*8*2, ngf*8, use_dropout=True)        self.up4 = Upsample(ngf*8*2, ngf*8)        self.up3 = Upsample(ngf*8*2, ngf*4)        self.up2 = Upsample(ngf*4*2, ngf*2)        self.up1 = Upsample(ngf*2*2, ngf)        self.output_block = nn.Sequential(            nn.ReLU(),            nn.Conv2DTranspose(ngf*2, output_nc, kernel_size=4, stride=2, padding=1),            nn.Tanh()        )    def forward(self, x):        d1 = self.down1(x)        d2 = self.down2(d1)        d3 = self.down3(d2)        d4 = self.down4(d3)        d5 = self.down5(d4)        d6 = self.down6(d5)        d7 = self.down7(d6)                c = self.center(d7)                x = self.up7(c, d7)        x = self.up6(x, d6)        x = self.up5(x, d5)        x = self.up4(x, d4)        x = self.up3(x, d3)        x = self.up2(x, d2)        x = self.up1(x, d1)        x = self.output_block(x)        return xclass Downsample(nn.Layer):    # LeakyReLU => conv => batch norm    def __init__(self, in_dim, out_dim, kernel_size=4, stride=2, padding=1):        super(Downsample, self).__init__()        self.layers = nn.Sequential(            nn.LeakyReLU(0.2),            nn.Conv2D(in_dim, out_dim, kernel_size, stride, padding, bias_attr=False),            nn.BatchNorm2D(out_dim)        )    def forward(self, x):        x = self.layers(x)        return xclass Upsample(nn.Layer):    # ReLU => deconv => batch norm => dropout    def __init__(self, in_dim, out_dim, kernel_size=4, stride=2, padding=1, use_dropout=False):        super(Upsample, self).__init__()        sequence = [            nn.ReLU(),            nn.Conv2DTranspose(in_dim, out_dim, kernel_size, stride, padding, bias_attr=False),            nn.BatchNorm2D(out_dim)        ]        if use_dropout:            sequence.append(nn.Dropout(p=0.5))        self.layers = nn.Sequential(*sequence)    def forward(self, x, skip):        x = self.layers(x)        x = paddle.concat([x, skip], axis=1)        return x#实例化生成器generator = UnetGenerator()#加载权重last_weights_path = 'data/data148534/epoch100.pdparams'print('加载权重:', last_weights_path)model_state_dict = paddle.load(last_weights_path)generator.load_dict(model_state_dict)generator.eval()#读取数据image_name='01503.webp'img_A2B = cv2.imread('work/'+image_name)img_A = img_A2B[:, 256:]                                  # 卡通图(即输入)img_B = img_A2B[:, :256]                                  # 真人图(即预测结果)g_input = img_A.astype('float32') / 127.5 - 1             # 归一化g_input = g_input[np.newaxis, ...].transpose(0, 3, 1, 2)  # NHWC -> NCHWg_input = paddle.to_tensor(g_input)                       # numpy -> tensorg_output = generator(g_input)g_output = g_output.detach().numpy()                      # tensor -> numpyg_output = g_output.transpose(0, 2, 3, 1)[0]              # NCHW -> NHWCg_output = g_output * 127.5 + 127.5                       # 反归一化g_output = g_output.astype(np.uint8)#只保存生成真人图像img = np.asarray(g_output).copy()img = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))# cv2 to Imageimg.save('work/'+'output_'+image_name)img_show = np.hstack([img_A, g_output])[:,:,::-1]plt.figure(figsize=(8, 8))plt.imshow(img_show)plt.show()
登录后复制
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/__init__.py:107: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working  from collections import MutableMapping/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/rcsetup.py:20: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working  from collections import Iterable, Mapping/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/colors.py:53: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working  from collections import SizedW0728 22:24:44.614435   192 gpu_resources.cc:61] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.2, Runtime API Version: 10.1W0728 22:24:44.619457   192 gpu_resources.cc:91] device: 0, cuDNN Version: 7.6.
登录后复制
加载权重: data/data148534/epoch100.pdparams
登录后复制
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/cbook/__init__.py:2349: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working  if isinstance(obj, collections.Iterator):/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/cbook/__init__.py:2366: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working  return list(data) if isinstance(data, collections.MappingView) else data
登录后复制
登录后复制

效果展示

【情人节特辑】:虚拟女友教你如何正确“回答” - 游乐网

变身!!!

【情人节特辑】:虚拟女友教你如何正确“回答” - 游乐网

第三步、把真人化输出的照片输入进paddlebobo生成虚拟女友动画

3.1解压压缩包

In [11]
!tar xzvf bobo.tar.gz PaddleBoBo data nltk_data work
登录后复制

3.2安装PaddleGAN和PaddleSpeech依赖

In [ ]
#这一步执行时间会比较久!pip install ppgan paddlespeech
登录后复制

3.3动漫真人化图像生成虚拟女友动画

这一步用到了default.yaml的配置文件,如果你只是尝试的话使用默认配置即可,如果你需要生成另一个人像,请修改default.yaml配置。主要是修改输入照片的位置:PaddleBoBo/default.yaml 里面的FOM_INPUT_IMAGE: '/home/aistudio/work/output_01503.webp'

In [ ]
%cd PaddleBoBo!python create_virtual_human.py --config default.yaml
登录后复制

第四步、让虚拟女友纠正你的话语

--text 请输入之前生成的编号

In [ ]
!python general_demo.py --human ./file/input/test.mp4 --output ../output.mp4 --text a
登录后复制

效果展示

来源:https://www.php.cn/faq/1409995.html

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
OpenClaw 3.31 审批问题总结

OpenClaw 3.31 审批问题总结

OpenClaw 3 31 强制审批问题解析 最近将 OpenClaw 升级到 3 31 版本后,许多用户反馈,执行每一条命令都需要手动点击“批准”,操作体验变得阻滞不畅。这并非系统故障或未知漏洞,而是官方在后台更新并默认启用了一套更为严格的“零信任”安全框架。简单来说,其核心逻辑是默认不信任任何操

时间:2026-04-06 07:02
一篇讲透:豆包、元宝、DeepSeek、Kimi、WorkBuddy,职场里到底怎么分工

一篇讲透:豆包、元宝、DeepSeek、Kimi、WorkBuddy,职场里到底怎么分工

别再把所有 AI 当成一个东西:WorkBuddy 和豆包、元宝、DeepSeek、Kimi,到底该怎么选? 这一年,AI 的进化速度着实叫人眼花缭乱。 大家的关注点,早就从“这工具能写文章吗”跳到了“它能不能帮我做方案、改稿子、整理会议纪要,甚至把任务往前推一步”。 于是,一个新问题浮出水面。 很

时间:2026-04-05 18:33
我用WorkBuddy“克隆“了一个我,从此每句话像我自己说的

我用WorkBuddy“克隆“了一个我,从此每句话像我自己说的

如何使用WorkBuddy深度学习我的说话方式,让每一份文案都自带个人风格 作为一名企业培训师,每年主讲上百场课程是行业常态。无论是线下公开课、线上直播,还是视频号、公众号的内容创作,每天的工作状态不是在授课,就是在准备各种讲稿的路上。早期借助通用AI工具辅助创作,写作效率确实有所提升,但生成的内容

时间:2026-04-05 14:34
英国视障跑者挑战马拉松,将借助智能眼镜“看”到赛道、辨别方向

英国视障跑者挑战马拉松,将借助智能眼镜“看”到赛道、辨别方向

英国视障跑者挑战马拉松,将借助智能眼镜“看”到赛道、辨别方向 最近有一则科技助残的新闻,让人眼前一亮。当地时间4月2日,英国BBC报道称,视障跑者克拉克·雷诺兹正计划借助一项创新技术,参加一场全程马拉松。这项技术的巧妙之处在于,它能让世界另一端有视力的志愿者,实时“看到”雷诺兹眼前的景象,并为他提供

时间:2026-04-05 11:03
彻底卸载 OpenClaw (龙虾) 指南

彻底卸载 OpenClaw (龙虾) 指南

彻底卸载 OpenClaw (龙虾) 指南 想把 OpenClaw(大家常叫它“龙虾”)从你的系统里清理干净?这事儿得讲究个章法,胡乱删除往往治标不治本,残留的服务和文件就像散落在角落的贝壳,时不时硌你一下。接下来,咱们就按一套稳妥的流程,帮你把它请走。 卸载原则 核心原则就一句话:先停服务,再卸工

时间:2026-04-05 10:43
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 日榜
  • 周榜
  • 月榜
热门教程
更多
  • 游戏攻略
  • 安卓教程
  • 苹果教程
  • 电脑教程