跳转到内容

插件

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 与清单模板可 联系获取