TEN Framework 中的 PIL 演示 Python 扩展:基于 VideoFrame 的图像处理实战
人工智能AI Agent多模态语音AI 应用【免费下载链接】ten-frameworkOpen-source framework for conversational voice AI agents项目地址https://gitcode.com/TEN-framework/ten-framework点击查看免费下载导读本文围绕 pil_demo_python 扩展讲解如何在 TEN Framework 中编写一个基于 Python 的 PILPython Imaging Library扩展重点剖析它如何通过on_video_frame回调接收视频帧、将VideoFrame内存缓冲直接映射为 PILImage对象并执行图像处理。读完本文你将掌握 TEN 扩展的完整生命周期实现、视频帧数据访问方式以及如何将该扩展接入自己的 TEN 应用。扩展概览这个扩展是什么pil_demo_python是 TEN Framework 提供的一个示例扩展包位于 packages/example_extensions/pil_demo_python。根据其 manifest.json 的描述它是一份使用 Python 语言编写的 TEN Framework PILPython 影像库示範擴充用来演示以下能力在 Python 中编写 TEN Framework 扩展的完整骨架初始化、启动、停止、反初始化通过on_cmd处理外部命令并返回结果通过on_video_frame接收视频帧并借助 Pillow 对帧数据做图像处理例如高斯模糊遵循 TEN 的 Addon / Extension 注册机制成为可被框架按需加载的组件。该扩展依赖 Pillowpillow11.1.0见 requirements.txt运行时依赖 TEN 的 Python 绑定ten_runtime_python版本 0.11.73见 manifest.json 中的dependencies。包结构与构建清单扩展的顶层文件结构如下packages/example_extensions/pil_demo_python/ ├── BUILD.gn # GN 构建描述声明打包资源 ├── LICENSE ├── __init__.py # 包加载入口 ├── main.py # 扩展与 Addon 的核心实现 ├── manifest.json # 扩展元数据名称、版本、依赖、多语言说明 ├── property.json # 扩展属性配置当前为空对象 ├── pyproject.toml # Python 项目元数据与依赖声明 └── requirements.txt # pip 依赖锁定从 BUILD.gn 可以看到该包通过ten_package(pil_demo_python)声明为extension类型打包时会把LICENSE、__init__.py、main.py、manifest.json、property.json、pyproject.toml、requirements.txt以及docs/下的全部多语言文档一起纳入资源并依赖//core/src/ten_runtime编译产物。启用 ten_managerten_enable_ten_manager时还会生成upload_pil_demo_python_to_server目标用于发布。pyproject.toml 声明requires-python 3.10依赖pillow11.1.0这是运行本扩展的环境前提。核心实现剖析main.py扩展类与生命周期回调main.py 定义了PilDemoExtension(Extension)实现了 TEN Python 绑定要求的标准生命周期回调on_init扩展初始化入口记录on_init日志后调用ten_env.on_init_done()通知框架初始化完成on_start扩展启动入口记录日志后调用ten_env.on_start_done()通知启动完成on_stop扩展停止入口调用ten_env.on_stop_done()on_deinit扩展反初始化入口调用ten_env.on_deinit_done()。这一整套回调是 TEN 扩展的标准生命周期契约任何自定义扩展都应遵循同样的回调 显式 done模式。命令处理on_cmddef on_cmd(self, ten_env: TenEnv, cmd: Cmd) - None: cmd_json, _ cmd.get_property_to_json() ten_env.log(LogLevel.INFO, fon_cmd json: {cmd_json}) cmd_result CmdResult.create(StatusCode.OK, cmd) cmd_result.set_property_string(detail, success) ten_env.return_result(cmd_result)on_cmd演示了命令处理的标准写法先把收到的Cmd序列化为 JSON 并记录日志再以StatusCode.OK创建CmdResult通过set_property_string(detail, success)写入返回内容最后ten_env.return_result(cmd_result)把结果回传给调用方。视频帧处理on_video_framedef on_video_frame(self, ten_env: TenEnv, video_frame: VideoFrame) - None: ten_env.log(LogLevel.DEBUG, on_video_frame) if video_frame.get_pixel_fmt() ! PixelFmt.RGBA: ten_env.log(LogLevel.ERROR, on_video_frame, not support pixel format) return im Image.frombuffer( RGBA, (video_frame.get_width(), video_frame.get_height()), video_frame.get_buf(), ) im2 im.filter(ImageFilter.BLUR) im2.save(./blur.png)这是本扩展的核心演示逻辑分为三步像素格式校验调用video_frame.get_pixel_fmt()与PixelFmt.RGBA比较非 RGBA 格式直接记录 ERROR 日志并返回避免对不支持的格式做错误处理。可见该演示扩展目前仅支持 RGBA 视频帧。零拷贝映射为 PIL 图像使用 Pillow 的Image.frombuffer(RGBA, (width, height), buf)把VideoFrame的缓冲区get_buf()返回bytearray见 libten_runtime_python.pyi 中VideoFrame的get_buf/get_width/get_height/get_pixel_fmt声明直接当作图像内存映射无需逐像素复制。图像处理与落盘对映射出的 PIL 图像应用ImageFilter.BLUR高斯模糊并将结果保存为当前工作目录下的./blur.png直观展示视频帧 → PIL → 处理后图像的完整链路。Addon 注册机制register_addon_as_extension(pil_demo_python) class PilDemoExtensionAddon(Addon): def on_create_instance(self, ten_env: TenEnv, name: str, context: object) - None: ten_env.log(LogLevel.DEBUG, on_create_instance) ten_env.on_create_instance_done(PilDemoExtension(name), context)扩展通过register_addon_as_extension(pil_demo_python)注册为 AddonAddon 的名字与 manifest.json 中的name字段一致。框架在需要实例化扩展时调用on_create_instance这里创建PilDemoExtension(name)并调用on_create_instance_done返回实例。manifest.json扩展的元数据契约manifest.json 是 TEN 扩展的元数据契约关键字段包括typeextension声明这是一个扩展包namepil_demo_python与register_addon_as_extension的名字对应version0.11.73display_name/description提供en-US、zh-CN、zh-TW、ja-JP、ko-KR五语言的显示名与描述readme.locales指定各语言 README 的import_uri繁体中文对应 docs/README.zh-TW.mddependencies依赖系统包ten_runtime_python版本 0.11.73这是运行 Python 扩展所必需的基础运行时api当前为空对象{}表示该演示扩展未声明额外的对外 API。快速开始与集成到 TEN 应用前置条件满足 manifest.json 中声明的依赖TEN 运行时会自动解析并安装ten_runtime_python满足 Python 环境要求Python 3.10并安装 Pillow可通过pip install -r packages/example_extensions/pil_demo_python/requirements.txt安装pillow11.1.0一份可运行的 TEN Framework 应用应用与扩展的通用开发方式可参考 docs/development/how_to_develop_with_ext.cn.md。安装作为 TEN 标准软件包pil_demo_python遵循 TEN Framework 的套件安装流程可通过tmanten manager从本地或远端 registry 安装到应用的ten_packages/extension/目录。仓库中的 ai_agents/agents/examples 下的多个示例 agent 也演示了在应用中声明扩展依赖、由框架自动拉取的方式。集成到应用在 TEN 应用的项目配置中把pil_demo_python声明为依赖并在应用的property.json图中将该扩展接入消息流即可。集成后上游扩展如摄像头采集、视频源将视频帧作为VideoFrame消息发送给本扩展触发on_video_frame其他组件可通过Cmd与本扩展通信on_cmd会返回detail: success的结果处理结果以./blur.png的形式落盘供后续流程或人工查看。小结pil_demo_python是一个麻雀虽小、五脏俱全的 TEN Python 扩展示例它完整展示了扩展生命周期、命令响应、视频帧回调、Addon 注册与 manifest 元数据声明。对于想在 TEN Framework 中处理视频帧或接入图像处理的开发者它是最直接的入门参考——把ImageFilter.BLUR替换成任意 PIL 图像算法即可快速验证自己的图像处理链路。该扩展属于 TEN Framework 开源项目的一部分见 packages/example_extensions/pil_demo_python/LICENSE源码可在当前仓库中直接查阅与运行。赞分享人工智能AI Agent多模态语音AI 应用【免费下载链接】ten-frameworkOpen-source framework for conversational voice AI agents项目地址https://gitcode.com/TEN-framework/ten-framework点击查看免费下载相关推荐TEN Framework 中的 AWS ASR Python 扩展基于 Amazon Transcribe 流式 API 的实时语音识别实战指南TEN Framework 中的 AWS ASR Python 扩展基于 Amazon Transcribe 流式 API 的实时语音识别实战指南 导读 本文人工智能AI Agent多模态语音AI 应用在 TEN Framework 中使用 gemini_tts_python基于 Google Gemini 2.5 的实时 TTS 扩展在 TEN Framework 中使用 gemini_tts_python基于 Google Gemini 2.5 的实时 TTS 扩展 gemini_tts人工智能AI Agent多模态语音AI 应用TEN Framework 中 OpenAI ASR Python 扩展实战基于 Realtime 转录 API 的实时语音转文本接入指南TEN Framework 中 OpenAI ASR Python 扩展实战基于 Realtime 转录 API 的实时语音转文本接入指南 本文以 opena人工智能AI Agent多模态语音AI 应用上一篇Zwift Offline本地部署指南打造专属骑行训练系统下一篇Swift-scripts性能优化指南加速大规模Swift项目的代码分析速度创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

AI辅助的逆向分析:用 TaoToken 统一 Key 打通 Cline 与 settings.json 配置

AI辅助的逆向分析:用 TaoToken 统一 Key 打通 Cline 与 settings.json 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 3:57:05 阅读更多 →
PaddleNLP SimpleServing 服务化部署实战:基于 UIE-X 的文档信息抽取 HTTP 服务搭建指南

PaddleNLP SimpleServing 服务化部署实战:基于 UIE-X 的文档信息抽取 HTTP 服务搭建指南

人工智能大模型预训练微调LoRARLHF强化学习分布式训练 【免费下载链接】PaddleNLP Easy-to-use and powerful LLM and SLM library with awesome model zoo. 项目地址: https://gitcode.com/gh_mirrors/pa/PaddleNLP 点击查看 免费下载 本文面向需要在生产环境中上…

2026/9/25 3:57:05 阅读更多 →
OpenShift Origin QuickStart 模板详解:应用骨架的构建原理、参数体系与自动同步机制

OpenShift Origin QuickStart 模板详解:应用骨架的构建原理、参数体系与自动同步机制

测试云原生质量保障 【免费下载链接】origin Conformance test suite for OpenShift 项目地址: https://gitcode.com/gh_mirrors/or/origin 点击查看 免费下载 本篇技术文章基于 examples/quickstarts/README.md 展开,系统讲解 OpenShift Origin 中 Qui…

2026/9/25 3:57:05 阅读更多 →

最新新闻

阅读笔记:《云计算关键领域安全指南v5》

阅读笔记:《云计算关键领域安全指南v5》

云计算是一种运营模型和一组技术,用于通过对计算、网络、存储等资源的抽象来管理共享资源池。云计算能够实现通过网络访问可扩展且具有弹性的可共享的物理或虚拟资源池,并可按需进行自助式资源调配和管理。云可以由几乎任何计算资源组成,从处…

2026/9/25 5:36:29 阅读更多 →
OpenShell Release Canary 实战指南:发布工件的最后一道冒烟关卡

OpenShell Release Canary 实战指南:发布工件的最后一道冒烟关卡

【免费下载链接】OpenShell OpenShell is the safe, private runtime for autonomous AI agents. 项目地址: https://gitcode.com/gh_mirrors/op/OpenShell 点击查看 免费下载 OpenShell 的 Release Canary(工作流定义位于 .github/workflows/release-c…

2026/9/25 5:36:29 阅读更多 →
Agent技能管理实战:从Prompt堆砌到结构化技能编排

Agent技能管理实战:从Prompt堆砌到结构化技能编排

做Agent开发也有小半年了,我最大的感受是:大多数人不是被模型能力卡住的,而是被“技能管理”卡住的。你让Agent做的事越多,它的行为就越不可控,Prompt越堆越长,到最后修一个bug能扯出一串连锁问题。这个项目…

2026/9/25 5:36:29 阅读更多 →
wp-calypso 中的 Quick Start(Business Concierge)预约流程:路由设计、多步向导组件与数据层实现

wp-calypso 中的 Quick Start(Business Concierge)预约流程:路由设计、多步向导组件与数据层实现

前端CMS 【免费下载链接】wp-calypso The JavaScript and API powered WordPress.com 项目地址: https://gitcode.com/gh_mirrors/wp/wp-calypso 点击查看 免费下载 本篇技术文章以 client/me/concierge/README.md 为骨架,结合 wp-calypso(T…

2026/9/25 5:36:29 阅读更多 →
hunkdiff 内容搜索的空白保留:从 less 式 `/` 查询到 n/N 重复的完整实现剖析

hunkdiff 内容搜索的空白保留:从 less 式 `/` 查询到 n/N 重复的完整实现剖析

开发工具代码评审CLIAI 应用 【免费下载链接】hunk Review-first terminal diff viewer for agentic coders 项目地址: https://gitcode.com/gh_mirrors/hu/hunk 点击查看 免费下载 hunk 是面向 agent 化开发者的 review-first 终端 diff 查看器,其内置…

2026/9/25 5:36:29 阅读更多 →
ClawHub 发布者搜索缺陷复现与句柄前缀检索修复验证

ClawHub 发布者搜索缺陷复现与句柄前缀检索修复验证

后端前端AI 技能AI 插件搜索引擎 【免费下载链接】clawhub Skill Plugin Registry for OpenClaw 项目地址: https://gitcode.com/gh_mirrors/mo/clawhub 点击查看 免费下载 listPublicPage 是 ClawHub(OpenClaw 的 Skill Plugin Registry)…

2026/9/25 5:35:28 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →