实战干货!基于 ERNIE Bot SDK 的 Digital Poet Chat 开发教程

小夏 科技 更新 2024-01-28

随着人工智能技术的不断迭代发展,数字人类的开发和应用需求也与日俱增,随着大型语言模型的发展,数字人类也更加智能。 虚拟客服:数字人可以通过语音或文字与用户互动,提供客服等支持,从而取代传统的人工客服。 虚拟购物助手:数字人可以通过语音或文字与用户互动,为用户提供购物建议和推荐,从而改善用户的购物体验。 虚拟教师:数字人可以通过语音或文本与学生互动,为学生提供个性化的教育服务。 虚拟医生:数字人可以通过语音或文字与患者互动,为患者提供医疗咨询和诊断服务。

本开发教程将使用 Ernie Bot SDK 作为语言交互的基础,结合 Stable Diffusion、Paddlegan、Edge TTS 等技术,实现数字诗人的实时交互,提升诗歌的表现力。 本教程分为 4 个部分:自定义语音、自定义建模、生成数字人和数字人语音聊天。

自定义数字人声

生成诗歌:Ernie Bot SDK

安装 ERNie Bot SDK,根据用户输入的描述符或主题生成七字诗。

!pip install --upgrade erniebot

import erniebot

def wx_api(prompt):

# list supported models

models = erniebot.model.list()

print(models)

erniebot.api_type = "aistudio"

erniebot.access_token = "请输入您自己的令牌"令牌**,如下所示。

ernie-bot-turbo 更快。

response = erniebot.chatcompletion.create(model="ernie-bot-turbo", messages=["}])

answer = response.result

return answer

诗歌。 def poetry(prompt):

answer = wx_api( f"你是一位伟大的诗人,请写一首七字的绝句来描述以下场景:")

print("{} 诗歌反馈:{}".format(prompt, answer))

return answer

poetry("**天津***世博会。 ")

生成声音:Edge TTS

将 Ernie Bot SDK 生成的诗歌转换为声音。

!pip install edge_tts -i 

pip install librosa==0.8.1

import librosa

import os

boot_path = '/home/aistudio/gradio_packages/'

sound_path = os.path.join(boot_path,'file/sound.w**')

text = "机场博览会 *** 排成一排,像人群一样飞翔。 爸爸惬意地坐在他的肩膀上,风雷鸣般的特技尽收眼底。蓝天绽放着四台璀璨的机器,陆军航空芭蕾舞团在云层中翩翩起舞。 盛会震撼四面八方,有幸见证了中国复苏的巅峰。 "

tts_cmd = 'edge-tts --voice zh-cn-xiaoxiaoneural --text "' + text + '" --write-media ' +sound_path

os.system(tts_cmd)

自定义数字人像数字人的静态图像可以上传**,也可以通过稳定扩散直接生成。

Bunsheng图:稳定扩散稳定扩散是一种潜在扩散模型,属于生成类模型,通过迭代去噪和逐步采样随机噪声来获得感兴趣的图像,从而取得了惊人的效果。 与 Disco Diffusion 相比,Stable Diffusion 通过迭代低维潜在空间而不是原始像素空间,大大降低了内存和计算需求,并且可以在 v100 上在一分钟内渲染出所需的图像。

参数说明: prompts:描述待生成图片内容的输入语句。

!pip install paddlenlp==2.6.0rc0

pip install ppdiffusers 使用 paddlepaddle develop 的项目框架重启内核

安装后,导入ppdiffusers可能会失败,点击顶部重启内核,如果没有,重复pip+重启内核几次,总会成功

import os

import paddle

from ppdiffusers import stablediffusionpipeline

from ppdiffusers import dpmsolvermultistepscheduler

fdir_path = '/home/aistudio/gradio_packages/file/'

diffu_img_path = os.path.join(fdir_path,'diffu_img.jpg')

face_img_path = os.path.join(fdir_path,'face_img.jpg')

temp_img_path = os.path.join(fdir_path,'temp.jpg')

型。 pretrained_model_name_or_path = "runwayml/stable-diffusion-v1-5"

#unet_model_path = "./dream_booth_lora_outputs"

加载原始模型。

pipe = stablediffusionpipeline.from_pretrained(pretrained_model_name_or_path, safety_checker=none)

pipe.scheduler = dpmsolvermultistepscheduler.from_config(pipe.scheduler.config)

将适配器层添加到 UNET 模型中。

#pipe.unet.load_attn_procs(unet_model_path, from_hf_hub=false)

def diffu_result0(prompt):

if prompt == '':

prompt = 'face'

negative_prompt = "lowres, error_face, bad_face, bad_anatomy, error_body, error_hair, error_arm, (error_hands, bad_hands, error_fingers, bad_fingers, missing_fingers) error_legs, bad_legs, multiple_legs, missing_legs, error_lighting, error_shadow, error_reflection, text, error, extra_digit, fewer_digits, cropped, worst_quality, low_quality, normal_quality, jpeg_artifacts, signature, watermark, username, blurry"

guidance_scale = 8

num_inference_steps = 50

height = 512

width = 512

img = pipe(prompt, negative_prompt=negative_prompt, guidance_scale=guidance_scale, height=height, width=width, num_inference_steps=num_inference_steps).images[0]

img.s**e(diffu_img_path)

img.s**e(temp img path) 备份。

使用 Stable Diffusion 时,可以使用 Ernie Bot SDK 中的翻译和扩展功能处理提示。
def magic_prompt(query: str):

magic_template = """

你是提示词扩展的高手,你需要根据我的输入重写单词,直接输出英文。

提示词需要遵循以下规则:

按照示例提示词的结构,即首先描述绘画的主题,然后描述场景,然后添加笔触、情绪、绘画风格、灯光、镜头等,然后是最佳质量、杰作、8k 等词,所有这些都用逗号分隔。

请不要换行,请用英文表达。

示例:输入:一个穿着鲜艳连衣裙的小女孩。

a portrait of a cute girl wearing a luminous, vibrant and colorful dress standing in front of an abstract dreamy background with subtle pastel colors, inspired by the works of ulyana aster, digital art made using adobe photoshop and corel painter, surrealistic elements like glitters, stars and clouds to create a magical atmosphere, raw photo,hyper-realistic, close-up, product view, artstation trends, cgsociety, super high quality, digital art, exquisite ultra-detailed, 4k, soft lighting, fantasy, fashion, unreal engine rendering,8k uhd, hdr, high quality,untra detailed,film grain

输入:铺有瓷砖的白色浴室。

a nature look and chic bathroom with white wall, beige ceramic tile, natural stone flooring, modern fixtures and appliances in silver chrome, contemporary vanity sink and mirror in black marble countertop, spa-like atmosphere with a luxurious freestanding bathtub in the center of the room.在虚幻引擎 4 中渲染逼真的光照效果和纹理, 原始照片,超逼真,原始照片,超逼真,, 产品视图, ArtStation 趋势, CGSorvice, 超高质量, 数字艺术, 精致超细节, 4K, 柔和的照明, 梦幻, 时尚, 虚幻引擎渲染模型: Midjourney Style, CFG 比例: 7, 8K, UHD, HDR, 高质量,Untra detailed,胶片颗粒,8K UHD, HDR,高质量,untra详细,胶片颗粒输入:""

answer = wx_api(magic_template)

这里存在LangChain部署失败的问题,因此对方案进行了调整,放弃了使用。

return answer

def translate_prompt(query: str):

translate_template = """

您是翻译大师,需要根据我的输入将中文翻译成英文。

环境准备:Paddleganpaddlegan 生成对抗网络开发套件为开发者提供经典前沿的生成对抗网络高性能实现,支持开发者快速构建、训练、部署面向学术、娱乐、工业等应用的生成对抗网络。

环境准备 - 如果主ipynb 运行如下 **,需要添加 maingradio packages 文件夹中的 ipynb。

已针对此项目修改了 paddlegan 文件夹的内容,因此您无需再在此处运行它以避免覆盖。 

#!git clone

#%cd /home/aistudio/paddlegan/

#!python ./setup.py develop

!pip install dlib

pip install scikit-image

pip install imageio-ffmpeg

pip install munch

pip install natsort

pip install numpy==1.22 重新启动内核。

面部融合:styleganv2fitting、styleganv2mixing将两个****图像的面孔组合在一起,生成一个新图像。

styleganv2fitting 的基础知识

styleganv2mixing

1. Stylegan 是一个随机生成的向量,它是根据向量生成的。 2、拟合模块基于已有的图像倒排样式向量,解耦程度高。 获取的样式向量可用于人脸融合、人脸属性编辑等任务。 3、混合模块利用其风格向量,实现两张生成图像不同层次、不同比例的混合。 主要步骤

实现人脸融合有三个步骤:1、拟合模块提取两张人脸的向量,StyleGan V2根据向量生成Stylegan世界中的人脸2.混合模块融合了两个面的向量3. StyleGan v2 根据融合向量生成新人脸。

import os

from paddlegan.ppgan.apps.styleganv2fitting_predictor import styleganv2fittingpredictor

fdir_path = '/home/aistudio/gradio_packages/file/'

fit_path = '/home/aistudio/gradio_packages/file/fit1'

diffu_img_path = os.path.join(fdir_path,'diffu_img.jpg')

print(diffu_img_path)

img2fit = styleganv2fittingpredictor(output_path=fit_path,model_type='ffhq-config-f',seed=none,size=1024,style_dim=512,n_mlp=8,channel_multiplier=2)

img2fit.run(diffu_img_path,need_align=true)

import os

from paddlegan.ppgan.apps.styleganv2fitting_predictor import styleganv2fittingpredictor

fdir_path = '/home/aistudio/gradio_packages/file/'

fit_path = '/home/aistudio/gradio_packages/file/fit2'

input_face_path = os.path.join(fdir_path,'input_face.jpg')

print(diffu_img_path)

img2fit = styleganv2fittingpredictor(output_path=fit_path,model_type='ffhq-config-f',seed=none,size=1024,style_dim=512,n_mlp=8,channel_multiplier=2)

img2fit.run(input_face_path,need_align=true)

import os

from paddlegan.ppgan.apps import styleganv2mixingpredictor

from pil import image

fdir_path = '/home/aistudio/gradio_packages/file/'

fit1_path = os.path.join(fdir_path,'fit1/dst.fitting.npy')

print(fit1_path)

fit2_path = os.path.join(fdir_path,'fit2/dst.fitting.npy')

mix_path = os.path.join(fdir_path,'dst.mixing.png')

face_img_path = os.path.join(fdir_path,'face_img.jpg')

predictor = styleganv2mixingpredictor(output_path=fdir_path,model_type='ffhq-config-f',seed=none,size=512,style_dim=512,n_mlp=8,channel_multiplier=2)

predictor.run(fit1_path, fit2_path)

img = image.open(mix_path)

img.resize((512, 512), image.lanczos).s**e(face_img_path)

print(face_img_path)

老化和**化:pixel2style2pixel、styleganv2您可以尝试更多数字人类头像。

老化基础知识 pixel2style2pixel

styleganv2

1.潜伏因子:潜因子,每张图片对应一个潜因子(一个高维向量),Stylegan可以使用这个向量来生成图像。

2.属性编辑:由于潜在因子包含许多维度,无法确定维度的对应方向和编辑带来的变化,因此使用大量的潜在因子和对应属性(如年龄或性别)来训练线性分类器,分类器的权重可以作为潜在因子和相应属性的方向。 3. Stylegan:基于向量生成**。 老化原理步骤

1.获取**的潜码,用于后续的属性编辑和人脸生成,使用pixel2style2pixel提取潜码。 temp img path:原始图像的路径,即需要提取隐藏特征的路径。 Age Dir:原始图像隐藏特征的存储路径,需要在后期的属性编辑生成模块中使用。 2.按照特定方向编辑潜伏码,可以编辑对应的人脸属性,如年龄、性别、头发、眼睛等。 3. Stylegan v2 根据第二步编辑的 Latent Code 向量生成目标人脸。 Age Pix Path:步骤2提取的原始图像的潜在代码(步骤2中的输出路径路径)。 年龄路径:保存新面孔的路径(年龄更改后)。 应用程序使用说明

老化或**:老化值不为0时,会产生效果;当老化值为0时,可以撤消上一步的老化或**操作,只能撤消一个步骤。

import os

from paddlegan.ppgan.apps.pixel2style2pixel_predictor import pixel2style2pixelpredictor

from paddlegan.ppgan.apps.styleganv2editing_predictor import styleganv2editingpredictor

from paddlegan.ppgan.apps.photo2cartoon_predictor import photo2cartoonpredictor

def resize_image1(in_path, out_path, w, h):

img = image.open(in_path)

img.resize((w, h), image.lanczos).s**e(out_path)

fdir_path = '/home/aistudio/gradio_packages/file'

diffu_img_path = os.path.join(fdir_path,'diffu_img.jpg')

face_img_path = os.path.join(fdir_path,'face_img.jpg')

temp_img_path = os.path.join(fdir_path,'temp.jpg')

age_dir = os.path.join(fdir_path,'age/')

age_pix_path = os.path.join(fdir_path,'age/dst.npy')

age_path = os.path.join(fdir_path,'age/dst.editing.png')

cartoon_dir = os.path.join(fdir_path,'cartoon/')

cartoon_path = os.path.join(fdir_path,'cartoon/p2c_cartoon.png')

age_pixel_predictor = pixel2style2pixelpredictor(output_path = age_dir, model_type = 'ffhq-inversion', size = 512)

age_predictor = styleganv2editingpredictor(output_path = age_dir, model_type = 'ffhq-config-f', size = 512)

cartoon_predictor = photo2cartoonpredictor(output_path = cartoon_dir)

转换年龄以提取像素。

def age_pixel():

age_pixel_predictor.run(temp_img_path)

更改年龄。

def age(num):

age_predictor.run(age_pix_path, 'age', num/5)

resize_image1(age_path, diffu_img_path, 512, 512)

转换图像。

def cartoon():

cartoon_predictor.run(temp_img_path)

resize_image1(cartoon_path, diffu_img_path, 512, 512)

age_pixel()

age(5)

#cartoon()

生成数字人类将静态图像转换为动态图像,并与声音进行口型匹配以生成数字人**。 表情符号转移:一阶运动模型将静态样式转换为动态样式。

一阶运动模型的任务是图像动画,给定一个源,给定一个驱动,生成一个片段,其中主角是源,动作是驱动中的动作,源图像通常包含一个主体,驱动包含一系列动作。 以人脸表情迁移为例,给定一个源字符和一个驱动,可以生成一个源字符,其中主体是源字符,源字符中源字符的表情由驱动中的表情决定。 通常,我们需要训练源字符的模型来标记人脸的关键点并进行表情迁移。 参数说明:

Face Driving Path: Driver**,其中角色的面部表情被用作要迁移的对象。 Face Img Path: Primitive**,原版中角色的表情会迁移到原版**中的字符上。 relative:表示程序中是否使用**和**中字符关键点的相对坐标或绝对坐标,建议使用相对坐标,如果使用绝对坐标,则会导致迁移后字符变形。 适应比例:根据关键点的凸包适应运动比例。

import os

from paddlegan.ppgan.apps.first_order_predictor import firstorderpredictor

fdir_path = '/home/aistudio/gradio_packages/file'

face_img_path = os.path.join(fdir_path,'face_img.jpg')

face_driving_path = os.path.join(fdir_path,'face_dri.mp4')

face_path = os.path.join(fdir_path,'face.mp4')

fom_predictor = firstorderpredictor(output = fdir_path,

filename = 'face.mp4',

face_enhancement = false,

ratio = 0.4,relative = true,image_size = 512,adapt_scale = true)

def fom():

fom_predictor.run(face_img_path, face_driving_path)

return face_path

fom()

唇形搭配:w**2lip动态塑造和与声音的口型匹配,以生成数字人**。 W**2Lip模型是一种基于GAN的唇形动作迁移算法,实现了生成的**字符口型与输入语音的同步。 w**2lip不仅可以基于静态图像输出与目标语音匹配的唇声同步,还可以直接将动态唇声转换为与输入语音匹配的输出。 w**2lip 在与语音精确口型同步方面取得突破的关键在于,它使用口型同步鉴别器来强制发生器连续产生准确而逼真的唇部动作。 此外,该研究通过在鉴别器中使用多个连续帧而不是单个帧来改善视觉质量,并使用视觉质量损失(不仅仅是对比度损失)来解释时间相关性。 w**2lip模型几乎是无所不能的,适用于任何人脸、任何声音、任何语言,可以达到任何**的高准确率,可以与原作无缝集成**,也可以用于转换动画人脸,合成语音的导入也是可行的。 参数说明:

脸部路径:动态建模**,其中角色的唇形是根据音频合成的。 声音路径:驱动唇形合成音频。 result path:指定生成文件的保存路径和文件名。

import os

from paddlegan.ppgan.apps.w**2lip_predictor import w**2lippredictor

fdir_path = '/home/aistudio/gradio_packages/file'

face_path = os.path.join(fdir_path,'face.mp4')

sound_path = os.path.join(fdir_path,'sound.w**')

result_path = os.path.join(fdir_path,'result.mp4')

w**2lip_predictor = w**2lippredictor(face_det_batch_size = 2,w**2lip_batch_size = 16,face_enhancement = true)

def w**2lip(input_video,input_audio,output):

w**2lip_predictor.run(input_video, input_audio, output)

return output

w**2lip(face_path, sound_path, result_path)

数字人语音聊天通过语音识别技术和文心一言能力,实现数字人聊天。 语音识别:智能云API调用智能云语音识别API-短语音识别标准版。

import os

import base64

import urllib

import requests

import json

fdir_path = '/home/aistudio/gradio_packages/file/'

sound_path = os.path.join(fdir_path,'chat_in.w**')

def get_access_token():

api_key = "???"有关详细信息,请参阅本项目文档末尾—--创建智能云语音识别 API 的步骤。

secret_key = "???"

使用 AK 和 SK 生成访问令牌

返回:访问令牌,如果错误,则返回无

url = ""

params =

print(params)

return str(requests.post(url, params=params).json().get("access_token"))

def get_file_content_as_base64(path, urlencoded=false):

获取文件的 base64 编码。

param path:文件的路径。

param urlencoded: 是否对结果进行urlen编码

返回值:base64 编码信息。

with open(path, "rb") as f:

content = base64.b64encode(f.read())decode("utf8")

if urlencoded:

content = urllib.parse.quote_plus(content)

return content

url = ""

print(sound_path)

speech = get_file_content_as_base64(sound_path,false)

print(speech)

payload = json.dumps(

response = requests.request("post", url, headers=head

数字人聊天:Ernie Bot SDK使用文心一言能力生成对话内容。
from api import wx_api

chat_in = "你是谁"

prompt = f"""

角色设计:你的名字是“琪琪”。 是一个知识渊博、善解人意、幽默风趣的聊天家伙,能够与用户进行幽默而有见地的对话。

对话示例:用户:“嗨,琪琪!今天的天气很好,可以散步。 你觉得怎么样?”

琪琪:“是的,今天是散步的好日子。 你喜欢散步吗?是公园还是河流?”

用户:“我通常喜欢去公园散步。 花草树木很漂亮,可以听到鸟儿的鸣叫。 ”

琪琪:“听起来很愉快!在自然环境中行走可以缓解压力,也有助于健康。 你还有其他喜欢的户外活动吗?”

输出要求:根据用户输入生成有趣、相关且有见地的响应。

在对话中保持自然、流畅的风格,与用户互动。

根据对话的上下文,它可以主动引导对话进行深化和扩展。

保持你的答案简短。

回答用户的最新问题:

answer = wx_api(prompt)

print("{} 聊天最终反馈:{}".format(chat_in, answer)

作者的故事

星系:请简单介绍一下您自己。 司金龙:大家好,我叫司金龙,现在是神州数码的高级RPA工程师,原来从事行业分析和咨询,三年前学了习 Python,成功转行RPA行业。 星系:你是如何加入PaddlePaddle Galaxy社区的?司金龙:与PaddlePaddle Galaxy社区的关系是一年前,一开始我学习了Paddle Galaxy社区的习课程,从深入学习习理论到大规模模型应用开发等一系列课程。 星系:你能告诉我们更多关于这个项目的信息吗?司金龙:这个应用程序是为黑客马拉松第五届比赛准备的。 在设置数字人角色时,我使用了我孩子的昵称琪琪和思思。 他们也喜欢测试自己的作品,而茜茜最喜欢测试数字人生成、衰老等功能。 琪琪喜欢测试与数字人交谈的能力,他们发现了很多错误,玩得很开心。 我的妻子高磊不仅提出了很多想法,更重要的是给了我很多鼓励,让我有了继续前进的动力。 本教程项目**征集Paddle Galaxy社区五周年开发的优质教程,更多教程或提交需求请登录Paddle Galaxy社区查看。

相似文章

    这是新的!基于SpringBoot Vue的Java快速开发框架,前后端分离

    一 项目简介 这是新的!J 基于 Springboot Vue 的快速开发框架,将前端和后端分开。二 功能的实现 安慰。显示系统的整体信息,目前是一个模板页面,可以根据您的实际需求进行转换。组织结构。它包括组织结构 部门 人员和部门领导的管理,其中显示了组织 部门和人员树结构。组织职位。包括组织架构...

    战斗推荐!ChatGPT教你如何有效地将创新思维运用到研究报告中!

    ChatGPT在研究报告的撰写中发挥着革命性的作用。通过与ChatGPT的对话,研究人员可以突破传统的写作范式,快速获得新颖的研究思路和创造性的视角。这种互动过程不仅提高了写作的创新性,也为研究者提供了更广阔的选题空间。首先,ChatGPT可以用于文献综述的快速生成。在研究过程中,梳理理论背景通常是...

    NVIDIA 已准备好将基于 Arm 的 Grace CPU 作为独立的企业级产品发布

    英伟达暗示,如果有机会,他们可能会为服务器市场推出基于ARM的Grace CPU的独立版本。回顾一下,这款先进的计算芯片结合了 Grace CPU 和 Hopper GPU 芯片,可充分利用整个 AI 和数据中心生态系统。通过将 CPU GPU 整合到单个设计中,NVIDIA 希望为客户提供一整套选...

    1202 03 基于进球预期模型和机构数据的欧洲主要联赛模拟预测

    欧洲主要联赛。通过将模型的预期进球数与该机构的实际让分指数进行比较,分析了两支球队之间的实力差异。重大高难度比赛。意甲 热那亚恩波利,预期进球数。.差值为.主队预计 棍高水或让 贴纸低水位,经纪公司居然打开了主队让棍高水位,稍低开主队,主队打风险,有平局空间。德甲 波鸿 VfL 沃尔夫斯堡,预期进球...

    别克Micro Blue 6,基于Electra X概念车的纯电动轿车性能如何?

    整车性能 别克Micro Blue 基于别克Electra X概念车,采用新一代别克纯电驱动系统,搭载高性能永磁同步电机和先进的电池管理系统,可实现最大功率kW,最大扭矩Nm功率输出,百公里加速仅需 秒。此外,车辆还采用了前麦弗逊式独立悬架和后式多连杆独立悬架的组合,为驾驶员提供更加稳定 舒适的驾驶...