插件
Micro-Seg 通过任务插件扩展:插件是 WebAssembly 组件,在独立的插件宿主 进程中沙箱运行。行为异常的插件既不能让应用崩溃,也读不到宿主没有交给它的 任何数据。
插件分两类:
- 标注任务:驱动交互式与自动标注流程(通常是 AI 模型)
- 扩展任务:提供导出、分析、汇总与表格,从插件管理器中运行
把插件包放进用户插件目录即可:
- Windows:
%APPDATA%/MicroSeg/data/plugins - Linux:
~/.config/MicroSeg/data/plugins
插件包是 <plugin_id>/<version>/ 结构的目录树,包含 plugin.json
(清单)、plugin.wasm 以及可选资源。当同一插件同一版本既有内置副本又有
用户安装副本时,以用户安装的为准。
插件管理器展示每个任务所需的上下文、权限、能力与资源画像,并支持逐个启用 或禁用插件。被禁用的插件永远不会被执行。
交互式与自动标注各自绑定哪个插件,是按项目记录在
<project_root>/.microseg/plugins.json 中的,并可钉住特定版本。
Micro-Seg 自带:
microseg.example.hrnetocr—— 交互式 AI 分割microseg.example.hrnetocr_automatic—— 自动多种子分割microseg.example.extensions—— 扩展任务示例
插件用 Rust 基于 plugin-tasks-sdk crate 编写,编译为面向
microseg:plugin/tasks@1.0.0 world 的 WASM 组件。
最小插件示例:
use plugin_tasks_sdk::prelude::*;
struct Plugin;
struct ExampleSession { seed_context: TaskSessionSeedContext,}
impl SessionPlugin for Plugin { type Session = ExampleSession;
fn open_session( task_id: String, seed_context: TaskSessionSeedContext, ) -> Result<Self::Session, TaskSessionError> { if task_id != "example.task" { return Err(error_invalid_request(format!( "unsupported task_id: {task_id}" ))); } Ok(ExampleSession { seed_context }) }}
impl TaskSession for ExampleSession { fn run(&mut self) -> Result<TaskSessionResult, TaskSessionError> { let image_id = self.seed_context.require_active_image_id()?; let labels = read_label_schema()?;
publish_progress(Some("Running example task"), Some(0.5))?;
Ok(TaskSessionResult { summary: Some(format!("image={image_id}, labels={}", labels.labels.len())), artifacts: Vec::new(), tables: Vec::new(), }) }}
export_task_plugin!(Plugin);在会话内,插件可以通过类型化的 require_ops 查询宿主状态(已有实例、标签
模式、占用图、栅格化),用 apply_ops 提交增量草稿变更,并发布进度、日志、
汇总、表格与产物。会话由宿主显式提交或丢弃——只有提交批次才是持久化的最终
事实。
完整插件契约、SDK 与清单模板可 联系获取。