新闻详情

新闻详情

首页 / 资讯中心 / 详情

TEN Framework 中的 PIL 演示 Python 扩展:基于 VideoFrame 的图像处理实战

发布时间:2026/9/26 16:29:33来源:尧图网络
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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

论文降AI后还要再查吗?交稿前怎么确认AI率符合学校要求? 2026/9/26 16:29:30

论文降AI后还要再查吗?交稿前怎么确认AI率符合学校要求?

论文降AI后还要再查吗?交稿前怎么确认AI率符合学校要求? 工具提示处理完成,正文读起来也比之前顺。你准备交稿,却发现手里只有修改前的检测报告。再查一次怕浪费机会,不查又不知道学校会得到什么结果。更麻烦的是&…

阅读更多 →
VOC-14963垃圾检测数据集:YOLO训练全流程与避坑指南 2026/9/26 16:29:30

VOC-14963垃圾检测数据集:YOLO训练全流程与避坑指南

简介:面向目标检测学习者和垃圾分类项目开发者的标准数据集资源,适配YOLOv3/v4/v5、Darknet等主流框架直接用于模型训练与验证。压缩包共44891个文件,包含14963张jpg图像、对应14963个xml标注文件及14963份yolo格式txt标签,另有类…

阅读更多 →
YOLOv5烟叶病害识别实战:从数据集到模型部署的完整指南 2026/9/26 16:29:30

YOLOv5烟叶病害识别实战:从数据集到模型部署的完整指南

简介:面向深度学习和目标检测方向的高校学生,这份基于YOLOv5的烟叶病害识别项目,提供从源码、数据集到演示与安装的完整闭环,尤其适合课程设计、期末大作业与毕业设计等场景。项目共378个文件,以jpg图像样本、txt标注文…

阅读更多 →
Redis命令:HGETALL 2026/9/26 16:29:24

Redis命令:HGETALL

Redis HGETALL 命令详细教程 HGETALL 返回 Hash 中全部字段与值。回复长度是 Hash 大小的两倍,字段顺序不保证稳定。 资料合集:https://pan.quark.cn/s/10e98d308913、https://pan.quark.cn/s/f56bc69c5338 一、概览与语法 HGETALL key项目说明数据类…

阅读更多 →
uos安装vncserver 2026/9/26 16:29:24

uos安装vncserver

步骤1 :更新系统sudo apt-get update步骤2 :安装x11vncsudo apt-get install x11vnc -y步骤3 :设置VNC连接密码sudo x11vnc -storepasswd /etc/x11vnc.pass 根据提示,输入并确认VNC连接的密码,密码保存在/etc/x11vnc.p…

阅读更多 →
安卓手机录音转文字哪个好?核心功能盘点 2026/9/26 16:29:24

安卓手机录音转文字哪个好?核心功能盘点

安卓生态下录音转文字工具的实际表现,往往和宣传页描述存在偏差。会议室角落录的音转出来满页"嗯啊那个",户外采访风声盖过人声,多人讨论分不清谁讲了什么——这些都是高频翻车场景。转写准确率、声纹区分能力、离线可用性&#xf…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉