新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/11/16 3:54:23来源:尧图网络
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

相关资讯

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

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/15 4:54:16

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/15 2:04:12

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/14 17:14:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/15 4:06:36

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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