如何把实时摄像头变成吉卜力风格:Vision-Agents × Decart 完整实战教程(附虚拟试穿玩法)
【免费下载链接】Vision-AgentsOpen Vision Agents by Stream. Build voice and vision agents quickly with any model or video provider. Uses Stream's edge network for ultra-low latency.项目地址: https://gitcode.com/GitHub_Trending/vi/Vision-Agents
想让摄像头里的自己实时变成动画风、还能边聊边换风格?Vision-Agents 的 Decart 插件就是干这个的:它把实时摄像头视频流用生成式 AI 做实时视频风格化,通话中随时切换风格。从安装到虚拟试穿,这篇带你全部走通。
它在 Agent 里到底干了什么
插件对外只暴露一个类:RestylingProcessor(源码在 decart_restyling_processor.py)。它是个"双向"的视频处理器,三句话说清:
- 输入侧:接住你的摄像头视频轨道,把帧通过 WebSocket 一路发给 Decart 实时服务;
- 输出侧:收回重绘后的帧,包装成新的视频轨道发布进通话;
- 状态侧:prompt、参考图、断线重连,全部状态变更都在内部完成。
它的父类是框架的VideoProcessorPublisher(见 base_processor.py),一个负责处理输入视频、一个负责发布输出视频。你只要把它挂进 Agent 的processors列表,就白得一整套实时风格化 + 动态切换的视频处理能力。
5 分钟跑通第一个实时风格化
先装。Decart 插件安装方式二选一:uv add "vision-agents[decart]"(给核心库加 extras),或者uv add vision-agents-plugins-decart(直接装独立插件包)。包配置要求 Python 3.10+,底层依赖decart官方 SDK。
最短可运行示例,10 行:
from vision_agents.core import User, Agent from vision_agents.plugins import getstream, gemini, decart processor = decart.RestylingProcessor( initial_prompt="Studio Ghibli animation style" ) agent = Agent( edge=getstream.Edge(), agent_user=User(name="Styled AI"), llm=gemini.Realtime(), processors=[processor], )用户一发布视频,框架就自动触发与 Decart 的连接,通话画面立刻变成"吉卜力风"。model默认就是lucy_2_rt(Lucy 实时模型,支持参考图),可以不管。
还有一件事:API Key。设环境变量DECART_API_KEY,或者构造时传api_key="..."。两者都没有?构造函数直接抛ValueError拒绝启动——这是硬校验,不是建议。
其余参数按使用频率分三档:
- 必填:
api_key,唯一必选项(环境变量可替代),不给就建不出来; - 常用:
model(默认lucy_2_rt)、initial_prompt(初始风格,默认 "Cyberpunk city")、initial_image(初始参考图); - 微调:
enhance(prompt 自动增强,默认开)、mirror(前置摄像头镜像,默认开)、width/height(输出分辨率,默认 1280x720,模型偏好尺寸)、**kwargs(原样透传给 Decart 客户端)。
三个进阶玩法
如何用对话切换视频风格
你说"换成赛博朋克风" → LLM 调用你注册的工具 →update_prompt下发新风格 → 画面几秒内过渡。不用刷新、不用重启。
注册工具只要 4 行:
@llm.register_function(description="Change the video style prompt") async def change_style(prompt: str) -> str: await processor.update_prompt(prompt) return f"Style changed to: {prompt}"update_prompt是update_state的便捷封装,只改 prompt 这一项。
虚拟试穿怎么做:参考图原子替换
纯文字只能做到"口头描述",要让画面真的长出"用户穿着某件外套"的样子,得喂参考图。你说"给我穿上巫师袍" → LLM 调用换装函数 →update_state一次下发 prompt 和图 → 画面原子化换装:
await processor.update_state( prompt="A person wearing a wizard robe", image="./costumes/wizard.png", )为什么说"原子"?prompt 和图被打包进同一个 SetInput——一次把两项打包发给模型的指令——一次性发出,要么都变、要么都不变,不会出现"新词配旧衣服"的半截画面。参考图接受 5 种形式:bytes、本地路径、http(s) URL、data: URI、原始 base64 字符串。
仓库自带一个虚拟试穿 Agent 示例 example/decart_example.py:预设几套服装,你点名哪套就原子替换哪套;点名单之外的,走"自由描述"兜底——给了图 URL 走update_state,没图就走纯 prompt 的update_prompt。整个闭环就是"说话换装"。
让风格更准:参考图与 enhance 参数
构造时给initial_image,第一次连接风格就锁定;运行中随时用update_state(image=...)换,prompt 保留与否随你。
两个小旋钮:
enhance默认 True:模型会先"扩写"你的 prompt 再生成,风格描述更稳;update_state不显式传值时,自动继承实例默认;- 每次更新成功后,本地的
initial_prompt/initial_image会同步刷新。断线重连后直接恢复到最新风格,不用你再喊一遍。
背后发生了什么:从一帧视频到重绘画面
整条数据流,5 步:
- 你发布视频轨道,框架调
process_video,处理器抓住轨道、向 Decart 建 WebSocket 连接,初始 prompt + enhance + 参考图一次性带入; - 你的帧沿这条连接出去,Decart 返回一路重绘后的帧流;
- 帧逐个进入
DecartVideoTrack的"最新 2 帧"队列(容量 2,见 decart_video_track.py),只留最新的,旧的直接丢; - 尺寸不符的帧自动缩放到 1280x720;首帧到达前输出一块深色占位帧,不黑屏、不卡顿;
- 发布端最多等 33ms(约一个 30fps 帧周期)取最新帧,取不到就复用上一帧,画面持续流动。
断线自愈内置三条规则:
- WebSocket 断开(
ConnectionClosedError)一律重连; - SDK 报错只在消息含 "connection"、"disconnect"、"timeout" 时才重连,像 "invalid api key" 这类凭证问题判定为不可恢复,故意不重连;
- 事件驱动之外,还有每秒一次的轮询兜底:后台循环检查连接状态,发现掉了就主动重连。
收尾靠close()一次性搞定:断开 Decart 连接、停止视频轨道、取消收帧/处理/重连三个后台任务、关闭客户端——不残留任何悬挂连接和任务。
避坑 FAQ
Q:没有 API Key 会怎样?
🔑 参数和环境变量都没给,构造函数立刻抛ValueError,提示你设DECART_API_KEY或传api_key。起不来,但起不来总比半吊子运行强。
Q:Key 填错了,为什么不会自动重连?
插件只把"连接类"故障当可恢复。"invalid api key" 是凭证问题,不是网络抖动,反复重连也没意义,所以故意不重连。看日志、改 Key 就好。
Q:参考图传哪种形式最省心?
URL。不用管文件、不用操心容器挂载路径,贴链接就行。本地路径也行,只要确认它在进程运行目录下真实存在。
Q:输出分辨率默认多少?
1280x720,模型偏好尺寸。想自定义就传width/height,不符尺寸的帧会被自动缩放对齐。
Q:还没连接就调update_state会怎样?
静默 no-op:不报错、不生效,只留一行 debug 日志。别指望"预先设置",更新要等连接建立后才起作用。
Q:update_state一个参数都不传呢?
直接ValueError:prompt和image至少要给一个。
三句话带走
- 🔑 API Key 优先走环境变量
DECART_API_KEY;prompt 和参考图要同时改时,优先update_state原子调用,画面不会出现半更新。 - 参考图 5 种形式——bytes / 本地路径 / URL / data: URI / base64——部署选 URL,本地开发选路径。
- 重连、缩放、清理全在插件里内置;你只需要盯凭证类错误的日志,因为那种情况不给你自动恢复。
想再深一层,去读 测试文件——原子更新、重连边界、帧队列回退这些行为都在那里被逐条验证,比任何文档都实在。
【免费下载链接】Vision-AgentsOpen Vision Agents by Stream. Build voice and vision agents quickly with any model or video provider. Uses Stream's edge network for ultra-low latency.项目地址: https://gitcode.com/GitHub_Trending/vi/Vision-Agents
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考