小榄网站设计,wordpress博客程序文章自动更新,杭州平面设计师工资一般多少,网页设计用什么软件做AI技术突飞猛进#xff0c;不断的改变着人们的工作和生活。数字人直播作为新兴形式#xff0c;必将成为未来趋势#xff0c;具有巨大的、广阔的、惊人的市场前景。它将不断融合创新技术和跨界合作#xff0c;提供更具个性化和多样化的互动体验#xff0c;成为未来的一种趋… AI技术突飞猛进不断的改变着人们的工作和生活。数字人直播作为新兴形式必将成为未来趋势具有巨大的、广阔的、惊人的市场前景。它将不断融合创新技术和跨界合作提供更具个性化和多样化的互动体验成为未来的一种趋势。 前言
马斯克称“人工智能将在我们所看到的人类进化和文明的未来发挥非常深远的作用。未来我们会拥有大量的机器人到时候全球的生产效率将会提高到令人难以置信的水平。”机器人可以完成行走、上下楼、下蹲、拿取物品等动作也已具备了保护自身和周围人安全的能力未来还可以做饭、修剪草坪、帮助照看老人或在工厂里面替代人类从事枯燥和有危险的工作。
不久前的世界互联网大会数字文明尼山对话上阿里巴巴集团董事会主席兼首席执行官、阿里云智能集团董事长兼首席执行官张勇也表示AI的发展将会带来更多的就业机会。站在智能化新时代所有行业都值得基于人工智能技术重做一遍。
只不过效率提升的同时迎面而来的也是人类与AI的近距离博弈。在AIGC时代影响下人们已经可以用非常低的成本用上ChatGPT、StableDiffusion以及 Midjourney等AI产品。很多岗位面临着替代的风险文字工作者、画师、广告设计甚至是带货主播等。
虽然网上有些公司已实现了虚拟数字人技术但收费都不菲。这里使用python尝试玩一下虚拟数字人直播作为有趣的探索和低成本的实现。如果探索可行可以自己搞一个虚拟数字人直播玩玩儿挂在自己的抖音上二十四小时在线岂不美哉 python实现的虚拟数字人直播 利用AI技术除了虚拟数字人直播外AR 导购、虚拟试穿、虚拟主播、3D 样板间等新玩法的出现实现了直播电商在观看体验、直播效率、商业价值上的全面提速。在不同的应用场景下人工智能和真人主播可以互补互助为消费者提供多元的观看体验例如人工智能的语言处理可以更快速地理解和回应用户的问题和需求而真人主播则可以在直播过程中与用户进行情感上的交流互动拉近直播间与用户间的距离。
数字人直播的惊天优势
利用数字人直播新媒体平台可以让数字人直播24小时随时开播、自动带货。
数字人直播帮助本地生活商家实现爆破式增长。
数字人直播深度还原真人形象告别出镜难题。
数字人直播文案一键输入3S出片短视频产量指数级增长。
数字人直播可利用GPT互动功能GPT直播生成内容自动互动回复不重样。
利用文心一言、讯飞星火或chatGPT等人工智能语音交互技术让数字人直播真正的走向实战成为可能。
Python实现的技术方案
Python可以用于实现虚拟数字人使其具备动画和说话的能力。
一个可行的技术方案探索
1. 人物建模和动画使用计算机图形学技术可以使用Python库如Pygame、Pyglet、OpenGL等创建人物的3D模型并为其添加动画效果。可以使用3D建模软件如Blender创建人物模型并使用Python编写脚本来控制模型的动画。
2. 语音合成使用Python库如pyttsx3、gTTS等可以将文本转换为语音。这些库提供了API可以将文本输入并生成相应的语音输出。
3. 对话系统使用Python的自然语言处理NLP和机器学习技术可以构建一个对话系统使虚拟数字人能够理解和生成自然语言的对话。可以使用NLP库如NLTK、SpaCy等来处理自然语言并使用机器学习库如TensorFlow、PyTorch等来训练对话模型。
4. 用户界面使用Python的GUI库如Tkinter、PyQt等可以创建一个用户界面使用户能够与虚拟数字人进行交互。可以在界面上显示虚拟人物的动画并提供文本框或语音输入来与其进行对话。
方案介绍
1. 人物建模和动画 使用计算机图形学技术创建人物的2D或3D模型可以使用Blender等建模软件进行建模。将人物的不同面部表情和动作设计为不同的图像帧或动画序列。或自己录制或从网上剪辑需要的人物视频和图片素材。
2. 精灵类的使用 - 创建一个继承自pygame.sprite.Sprite的虚拟数字人类。 在虚拟数字人类中使用pygame.image.load()加载人物的图像帧或动画序列。 使用pygame.Surface.blit()方法在屏幕上绘制当前的图像帧。
3. 面部表情和动作切换 - 在虚拟数字人类中定义方法来切换人物的面部表情和动作。 - 使用pygame.time.set_timer()来定时触发表情和动作的切换创建一个定时器事件。
4. 发音和语音合成 - 使用Python的语音合成库如pyttsx3、gTTS等或百度、科大讯飞等的语音接口将文本转换为语音。 - 定义方法来触发虚拟数字人的发音根据需要播放相应的语音。
5. 用户交互 - 创建一个pygame窗口用于显示虚拟数字人和与用户进行交互。 使用pygame.event.get()监听用户的事件例如键盘输入或鼠标点击。 - 根据用户的输入调用相应的方法来切换人物的面部表情、动作和发音。让用户的聊天内容文字发给GPT形成内容并通过文字转语音回复给用户同时配合不同的动作和表情。
环境依赖
1.下载安装python3,Python 官网Welcome to Python.org
2.安装依赖的模块: pygame,pygame-pgu,opencv,rembg
pip install rembg -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install opencv-python
3.替换pip安装的资源镜像否则下载模块很慢
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 4.图片和语音素材
5.讯飞离线语音合成工具
素材制作
可以使用3D建模软件如Blender创建人物模型这里简单起见部分素材从网上搜索下载到的仅用于学习研究目的如有侵权请联系我。
Rembg是一款图片背景去除工具. 这里我先简单介绍下它的特点。 开源、免费 基于 Python 开发 后台引擎是用于显著对象检测的深度网络架构 U²-Net后文有简单介绍 安装简单
背景图片 人物图片 代码实现
加载图片背景
#背景实现
class BackGround(pygame.sprite.Sprite):def __init__(self):super().__init__()self.image pygame.image.load(./image/background.png).convert()self.image pygame.transform.scale(self.image, (WIDTH, HEIGHT))self.rect self.image.get_rect()self.ready_to_move 0self.index 0def update(self, *args):pass
提取视频图片帧
从一段视频中提取视频图片帧。
在pygame中Sprite精灵通常使用图像来实现动画效果。尽管pygame本身不直接支持加载和播放mp4格式的视频文件但可以通过一些额外的库来实现加载和播放视频的功能。 一个常用的库是 moviepy 它是一个用于视频编辑和处理的Python库。可以使用 moviepy 库将mp4视频文件转换为一系列图像帧然后使用这些图像帧来创建Sprite精灵动画。
下面是一个示例
import pygame
from moviepy.editor import VideoFileClip# 加载mp4视频并提取图像帧
video VideoFileClip(animation.mp4)
frames [pygame.image.fromstring(video.get_frame(t), video.size, RGB) for t in range(0, int(video.duration*video.fps))]# 初始化pygame
pygame.init()
screen pygame.display.set_mode(video.size)# 创建Sprite精灵对象
class AnimatedSprite(pygame.sprite.Sprite):def __init__(self, frames):super().__init__()self.frames framesself.current_frame 0self.image self.frames[self.current_frame]self.rect self.image.get_rect()def update(self):self.current_frame (self.current_frame 1) % len(self.frames)self.image self.frames[self.current_frame]# 创建精灵对象并添加到精灵组
sprite AnimatedSprite(frames)
sprite_group pygame.sprite.Group(sprite)clock pygame.time.Clock()# 游戏循环
running True
while running:for event in pygame.event.get():if event.type pygame.QUIT:running Falsesprite_group.update()screen.fill((0, 0, 0))sprite_group.draw(screen)pygame.display.flip()clock.tick(30)pygame.quit()
提取视频帧并保存为png格式的图片同时去除背景
# 加油动作手势def comeOn(self):# 加载mp4视频并提取图像帧video VideoFileClip(./mp4/1.mp4)# Get the video dimensionsvideo_width, video_height video.size# 创建一个pygame surface#surface pygame.Surface((video_width, video_height))#frames [pygame.image.fromstring(np.array(video.get_frame(t)).tobytes(), video.size, RGB) for t in range(0, int(video.duration*video.fps))]# Create a pygame surface with alpha channelsurface pygame.Surface((video_width, video_height), pygame.SRCALPHA)# Convert each frame of the video to an image with transparencyframes []for t in range(int(video.duration * video.fps)):frame video.get_frame(t)pygame.surfarray.blit_array(surface, frame.swapaxes(0, 1))# 将帧保存为PNG图像image pygame.surfarray.array3d(surface).swapaxes(0, 1)image np.uint8(image)pil_image Image.fromarray(image)#去除图片的白色背景image remove(pil_image)#保存png图片image.save(fframet_{t}.png)# Convert PIL Image to pygame surfacepygame_image pygame.image.fromstring(image.tobytes(), image.size, image.mode).convert_alpha()frames.append(pygame_image)self.frames framesprint(frames count:str(len(self.frames)))self.current_frame 0self.image self.frames[self.current_frame]self.state comeOnself.start time.time()
也可以使用opencv提取mp4视频中的图片帧代码示例
import cv2# 打开视频文件
video cv2.VideoCapture(2.mp4)# 设置帧计数器
frame_count 0while True:# 读取视频的每一帧ret, frame video.read()# 如果没有读到帧说明视频已经结束if not ret:break# 保存帧图片cv2.imwrite(foutput/frame_{frame_count}.jpg, frame)# 帧计数器自增frame_count 1# 释放视频对象
video.release()
实现过程
# -*- coding: utf-8 -*-
# Author : yangyongzhen
# Email : 534117529qq.com
# File : mqttclienttool.py
# Project : study
import pygame
from moviepy.editor import VideoFileClip
import numpy as np
import time
from PIL import Image
from rembg import remove
import cv2# 常量 屏幕大小
WIDTH, HEIGHT 500, 900
print(cv2.__version__)
# 初始化操作
pygame.init()
pygame.mixer.init()
# 创建窗口
screen pygame.display.set_mode((WIDTH, HEIGHT))# 设置窗口标题
pygame.display.set_caption(虚拟数字人--关注作者blog.csdn.net/qq8864)# 添加背景音乐
pygame.mixer.music.load(./sound/bgLoop.wav)
pygame.mixer.music.set_volume(0.5) # 音量
#pygame.mixer.music.play(-1, 0)
# 添加系统时钟
FPS 30
clock pygame.time.Clock()
# 创建用户自定义事件每隔1000毫秒触发一次事件
USER_EVENT pygame.USEREVENT
pygame.time.set_timer(USER_EVENT, 1000)# 加载字体文件
font_path ./font/SIMYOU.ttf # 替换为你的字体文件路径
font_size 24
font pygame.font.Font(font_path, font_size)# 虚拟数字人主角
# class Hero(pygame.sprite.Sprite)
# class BackGround(pygame.sprite.Sprite)
# 虚拟人主角 (静默状态保持微笑和3秒眨一次眼睛)
class VirtualMan(pygame.sprite.Sprite):def __init__(self, speed):super().__init__()self.image pygame.image.load(./image/man.png)self.image_index 0self.readt_to_change 0self.rect self.image.get_rect()self.rect.width * 0.5self.rect.height * 0.5self.image pygame.transform.scale(self.image, (self.rect.width, self.rect.height))self.rect.x, self.rect.y 0, 100self.speed speedself.frames Noneself.current_frame 0self.state idledef update(self, *args):#这里用上下左右、空格几个按键来测试虚拟数字人的不同动作keys pygame.key.get_pressed()if keys[pygame.K_UP]:#加油动作手势self.comeOn()if keys[pygame.K_DOWN]:#欢迎动作手势self.welcome()if keys[pygame.K_LEFT]:#说话动作和表情self.say()if keys[pygame.K_RIGHT]:#停下来self.stop()if keys[pygame.K_SPACE]:#欢迎动作手势self.goodbye()if self.state comeOn: self.current_frame (self.current_frame 1) % len(self.frames)self.image pygame.transform.scale(self.frames[self.current_frame], (self.rect.width, self.rect.height))#print(current_frame:str(self.current_frame))if self.current_frame 0:self.frames.clear()self.state idleprint(idle)self.end time.time()print(time:str(self.end - self.start))img pygame.image.load(./image/man.png)self.image pygame.transform.scale(img, (self.rect.width, self.rect.height))pass# 加油动作手势def comeOn(self):# 加载mp4视频并提取图像帧#video VideoFileClip(./mp4/1.mp4)frames []video cv2.VideoCapture(./mp4/1.mp4)# 设置帧计数器frame_count 0while True:# 读取视频的每一帧ret, frame video.read()# 如果没有读到帧说明视频已经结束if not ret:break# 保存帧图片#cv2.imwrite(foutput/frame_{frame_count}.png, frame)#OpenCV转换成PIL.Image格式pil_image Image.fromarray(cv2.cvtColor(frame,cv2.COLOR_BGR2RGB))image remove(pil_image)image.save(fframet_{frame_count}.png)# Convert PIL Image to pygame surfacepygame_image pygame.image.fromstring(image.tobytes(), image.size, image.mode).convert_alpha()frames.append(pygame_image)# 帧计数器自增frame_count 1# 释放视频对象video.release()for i in range(0,75):img pygame.image.load(f./doc/img2/framet_{i}.png)frames.append(img)self.frames framesprint(frames count:str(len(self.frames)))self.current_frame 0self.image self.frames[self.current_frame]self.state comeOnself.start time.time()#再见动作手势def goodbye(self):pass#欢迎动作手势def welcome(self):pass#停止所有动作def stop(self):pass#开始说话def say(self):pass#sound pygame.mixer.Sound(./sound/nihao.wav)#sound.play()#背景
class BackGround(pygame.sprite.Sprite):def __init__(self):super().__init__()self.image pygame.image.load(./image/background.png).convert()self.image pygame.transform.scale(self.image, (WIDTH, HEIGHT))self.rect self.image.get_rect()self.ready_to_move 0self.index 0def update(self, *args):pass# 初始化精灵组
bg_sprite pygame.sprite.Group()
man_sprite pygame.sprite.Group()# 定义人物
man VirtualMan(4)
man_sprite.add(man)bg1 BackGround()
bg_sprite.add(bg1)
# 保持游戏运行状态(游戏循环
while True:# 游戏帧的刷新clock.tick(FPS)#print(Runtime:, pygame.time.get_ticks(), ms)# 检测事件for event in pygame.event.get():# 检测关闭按钮被点击的事件if event.type pygame.QUIT:# 退出pygame.quit()exit()if event.type USER_EVENT:man.say()passelse:try:passexcept Exception as e:print(e)# screen.fill((0,0,0))for group in [bg_sprite, man_sprite]:group.update()group.draw(screen)#screen.fill((0,0,0)) #生成一个屏幕 pygame.display.flip()#pygame.display.update()#app.paint() #将pgu容器的内容画出其他资源
【代码抠图】4行Python代码帮你消除图片背景 - 知乎
【Python】推荐三个好玩的图像处理库_python rembg_赵卓不凡的博客-CSDN博客
百度安全验证
无需PhotoshopRembg图像背景自动去除工具_研道鸠摩智的博客-CSDN博客
数字人涌入直播间虚拟主播的未来到底如何
光生资讯 |虚拟数字人直播火热前景广阔但仍需改进_进行_用户_问题
【Python】推荐三个好玩的图像处理库_python rembg_赵卓不凡的博客-CSDN博客
Python自动化一款基于AI的自动图片背景去除软件 - 墨天轮
rembg 模型库放置位置设置_桑榆肖物的博客-CSDN博客
Matting库rembg使用测评 - 知乎
Python OpenCV 详解_pythonopencv-CSDN博客
PythonOpenCV计算机视觉全面基础概述上篇 - 知乎
Py之cv2cv2库(OpenCVopencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略_顺其自然~的博客-CSDN博客
OpenCV视频操作 · OpenCV-Python初学自码 · 看云