如今,能够有效地展示自己的想法、项目或成果已成为一项必不可少的技能。能否顺利地展示自己的工作并就此进行讲解,往往决定了你是否能够获得学位、资金支持或所需的认可。
然而,虽然有效的沟通能力非常重要,但并不是每个人都具备这种能力。这项技能需要通过持续的练习来培养。
问题就在于:当我们独自练习时,很容易忽视镇定自若、正确的姿势以及表达方式,而这些因素其实与演讲内容本身同样重要。
这时就需要教练的帮助了。教练就像是一双“第二双眼睛和耳朵”,他们会留意那些关键的细节,并在您进行演讲时将这些信息告诉您。得益于视觉人工智能技术的最新发展,现在您可以随时获得连续且客观的反馈。像Vision Agents这样的工具,能够帮助您无缝地运用强大的视觉模型,从而构建出自己想要的人工智能应用。
在本文中,我们将介绍如何利用Vision Agents构建一个实时公共演讲与演示辅助系统。您可以在自己的PC或Mac上运行这个系统,以此来练习并提升自己的表达能力。
目录
我们将要构建什么
在本指南中,我们将详细讲解如何构建这样一个辅助系统,让它成为您个人练习的得力伙伴。这个系统会提供实时反馈,指出需要改进的地方,并通过音频和文字形式给出有用的建议。
它会关注您演讲过程中的多个方面,主要包括:
-
填充词的使用:帮助您减少使用“嗯”、“呃”之类的词语。
-
说话速度:判断您的讲话速度是快了还是慢了。
-
语调变化:提醒您是否说话过于单调。
-
表达清晰度
-
姿势
:检查您的坐姿或站姿是否正确,尤其要注意肩膀、背部和下巴的位置。
-
手势
:观察您使用手势的情况。
-
眼神交流
:确保您的眼睛始终注视着听众。
现在,你们应该已经在脑海中形成了关于我们所要构建的这个工具的清晰形象。
更棒的是,这里还有一个直观的视频演示,让大家能够看到这个工具的具体外观和使用方式。
本教程中的所有代码都可以在这个仓库中找到。
技术前提条件
在开始之前,请确保您已经具备以下条件:
-
一个免费的Stream账户。
-
您的电脑上已安装了Python
。
-
拥有一个OpenAI API密钥。
-
具备基本的Python编程知识。
关键技术
首先,让我们来介绍一下在开发这个演示工具过程中所使用的主要技术及其各自的作用。
流媒体视频技术
Stream Video是一种基于WebRTC构建的完整视频传输平台,它能够让浏览器和应用程序发送实时的音频和视频数据。该技术还配备了全球范围内的边缘计算网络,能够将您的视频信号在30毫秒内路由到最近的服务器进行处理。因此,在我们的演示工具中,AI系统可以像真正的参与者一样加入您的练习环节,实时地看到并听到您的表现,同时还能为您提供反馈。
视觉代理技术
Vision Agents是Stream提供的一个开源框架,它允许您将视频流、AI模型以及聊天界面连接在一起。在默认情况下,这个框架会使用Stream Video作为数据传输层。
这个框架通过提供一个统一的代理类来简化多模态AI应用的开发过程,使得各种组件能够协同工作,形成一个高效的整体系统。利用Vision Agents,您可以轻松地将不同的模型连接起来,并让它们作为一个协调一致的体系共同运行。
OpenAI实时API
OpenAI实时API使您能够与OpenAI模型进行低延迟的实时交互。它的最大优势在于能够同时处理语音输入和输出任务:您的话语输入后,AI会立即进行分析,并几乎立刻给出音频或文本形式的反馈。您的应用程序与模型可以像进行实时对话一样即时交流,而这正是我们演示工具的核心功能所在。
YOLO11
YOLO11是由Ultralytics开发的一款现代化且功能强大的计算机视觉模型。它能够支持多种任务,包括物体检测、实例分割、图像分类、姿态估计/关键点检测以及有方向性的边界框检测。
该模型能够追踪你身体上的17个不同位置,比如肩膀、头部和手部的位置,并试图在特定时刻确定你的姿势。我们的演示辅助工具会重点关注姿态估计和关键点检测这两个方面。

项目设置
现在,让我们开始使用我们之前介绍的所有技术来构建这个演示辅助工具吧。
首先,我们需要安装uv——这是为Vision Agents推荐的安装工具。如果你使用的是pip安装器,请在终端中执行以下命令:
pip install uv
对于Linux/MacOS系统,运行以下命令:
curl -LsSf https://astral.sh/uv/install.sh | sh.
对于Windows系统,运行以下命令:
powershell -ExecutionPolicy ByPass -c \"irm https://astral.sh/uv/install.ps1 | iex\"
接下来,在你的项目中初始化uv:
uv init
然后创建一个虚拟环境:
uv venv
激活虚拟环境:
.venv\Scripts\activate
现在,安装Vision Agents以及所需的插件和依赖项:
uv add vision-agents[getstream,openai,ultralytics] python-dotenv
在项目根目录下创建一个.env文件,并填写必要的配置信息:
STREAM_API_KEY=你的流媒体服务API密钥
STREAM_API_SECRET=你的流媒体服务秘密密钥
OPENAI_API_KEY=你的OpenAI API密钥
CALL_ID="practice-room" //你可以随意给它起个名字
在项目根目录下创建一个‘instructions’文件夹,并在其中创建一个名为coach.md的Markdown文件。
同样在项目根目录下,创建一个文件并将其命名为download_yolo_pose.py。
你现在的项目文件夹结构应该如下所示:
└── 📁演示指导系统
└── 📁.venv
└── 📁使用说明
├──coach.md
└── .env
└── .gitignore
└── download_yolo_pose.py
└── main.py
└── pyproject.toml
└── README.md
└── uv.lock
设置YOLO系统
Ultralytics YOLO11框架会使用yolo11n-pose.pt模型文件来监测你在演示过程中的姿势。这个预训练的深度学习模型通过检测关键点来进行姿势识别。在你的download_yolo_pose.py文件中,添加以下代码:
// download_yoloPose.py
from ultralytics import YOLO
import shutil
from pathlib import Path
model = YOLO(""yolo11n-pose.pt")
project_root = Path(__file__).parent
target = project_root / "yolo11n-pose.pt"
if not target.exists():
print("正在将模型复制到项目根目录...")
shutil.copy2(model.model.path, target)
else:
print("模型已经存在于项目根目录中。)
print("准备就绪:)
如果你的项目中没有yolo11n-pose.pt文件,这段代码会自动下载它并将其复制到项目根目录。
指导使用说明
在这个系统中,人工智能扮演了指导者的角色。coach.md文件为这个智能系统定义了它的行为特征、专业能力以及指导原则。你可以通过这个文件指定希望人工智能使用的沟通方式、输出速度、回应长度、说话节奏、反馈时机等参数。如果没有这些设置,你得到的将只是泛泛的提示、模糊的建议、冗长的回复,甚至还会被打断。
为了获得最佳效果,请将以下内容添加到你的coach.md文件中:
// instructions/coach.md
这些说明规定了在有人进行演示练习时,指导系统应该如何运作。请确保给出简洁具体的建议,并尽量避免打断他们的思路。只有在他们沉默至少3-5秒后,才给予反馈。
在格式上,反馈内容应以简短的文字形式出现在屏幕上,长度最好控制在1到2句话之内。
你希望人们在演示过程中保持放松状态,因此请确保以积极的话语开始指导,并且每次都提供一条可操作的建议。
你可以查看视频直播、文字记录以及姿势数据,这些信息足以帮助你了解他们的演讲节奏、肢体语言以及参与程度。
评估他们表现的重要方面之一就是理解他们的讲话内容。需要注意以下几点:
- 演讲节奏:既不能太快也不能太慢。如果发现节奏不合适,请及时给予提示。
- 填充词:注意他们是否经常使用“嗯”、“呃”等填充词。如果这种情况频繁发生,建议提醒他们暂停说话。
- 语调和变化:注意观察他们的音调,并根据实际情况给出相应的建议。
- 表达清晰度:要确保他们的讲话内容足够清晰易懂。
此外,也要关注他们的身体姿势。鼓励他们自信地演讲,比如适当使用手势、保持肩膀挺直以及进行稳定的眼神交流。
演示代理
现在,当我们所有的组件都已经准备就绪时,就该来看看我们这个演示辅导系统的核心部分了。在main.py文件中,Vision Agents的神奇功能得以实现——它将实时视频流、OpenAI的实时处理功能、YOLO姿态检测技术以及你的辅导指令整合成了一个多功能代理系统。
下面是我们main.py文件的内容:
// main.py
import logging
from dotenv import load_dotenv
from visionAgents.core import Agent, User, cli
from visionAgents.core.agents import AgentLauncher
from vision_agents.plugins import getstream, openai, ultralytics
load_dotenv()
async create_agent(**kwargs) -> Agent:
agent_user = User(
name="公共演讲与演示辅导系统",
id="coach_agent",
image="https://api.dicebear.com/7.x/bottts/svg?seed=coach"
)
return Agent (
edge=getstream.Edge()),
agent_user=agent_user,
instructions="@instructions/coach.md",
llm=openai.Realtime(
fps=6,
voice="alloy"async join_call(agent: Agent, call_type: str, call_id: str, **kwargs) -> None:
print(f"演示辅导代理正在启动...")
print(f"正在加入会议:类型为{call_type},会议ID为{call_id}")
call = await agent.create_call(call_type, call_id)
session = await agent.join.call)
print("代理已连接并准备就绪!")
print("实时辅导功能已开启")
finally:
await session.close()
让我们来详细了解一下这段代码中发生了什么:
-
`load_dotenv`函数会从`.env`文件中读取你的配置信息。
-
随后,`create_agent`函数会使用`User`对象创建教练的角色模型,为其分配名称、ID和头像。
-
创建的Agent对象需要接收多个参数,这些参数决定了该角色如何与视频、模型以及用户进行交互。我们的Agent对象接受的参数包括:`edge`、`agent_user`、`instructions`、`LLMS`和`processors`。
-
`edge=getstream.Edge()`这一行代码将所有组件连接到Stream提供的全球性低延迟视频基础设施上。
-
`agent_user`参数用于指定之前创建的教练角色模型。
-
`instructions`参数用于将存储在`coach.md`文件中的指导原则直接加载到Agent的角色模型中。
-
`llm`参数指定了AI语言模型及其相关参数。对于这个Agent来说,使用的模型是OpenAI.Realtime,它通过WebSocket与OpenAI的实时API进行通信。由于帧率为6,因此该Agent每秒能够接收6帧视频数据;而“alloy”这一语音设置使得它能够实现实时语音生成功能。
-
`processors`参数用于对输入的视频数据进行特定的AI/ML处理。在这个例子中,YOLO11被用来分析视频帧。
-
通过`join_call`函数,Agent会以一段简短的问候语加入通话,在聊天界面中立即显示出来。`await agent.finish`这一句代码会让Agent进入实时运行状态,它会持续监听、观察、思考,并自动做出响应,完全不需要人工干预。
要运行这个Agent,请在终端中输入以下命令:
python main.py
结论
我们成功开发出了一个用于公开演讲和演示的AI助手,它能够实时提供有价值的反馈和建议,帮助你提升演讲效果。
这一成果的实现要归功于Vision Agents、YOLO11以及OpenAI Realtime API这三大技术。仅需不到50行代码,我们就构建出了这个几乎不花什么成本的AI助手——相比花费99美元购买SaaS平台或聘请专业教练来说,这种方式确实非常划算。真是太棒了。
Vision Agents为开发者提供了一个十分友好的开发框架,使得开发者能够高效地创建各种引人入胜的AI应用。
祝大家开发顺利!