Web Demo 是一款前端 React 应用,它展示了完全在浏览器中运行的 Segment Anything Model (SAM) 的能力。本页面介绍了 Web Demo 的架构、工作原理以及如何运行和自定义它。有关 Web Demo 使用的 ONNX 导出的信息,请参阅 ONNX 导出。
Web Demo 通过使用 WebAssembly 在浏览器中直接运行模型,展示了 SAM 的实时分割能力。该 Demo 允许用户将鼠标悬停在图像上,模型会根据鼠标位置实时预测对象掩码。
来源: demo/README.md1-23 demo/src/App.tsx21-23
Web Demo 是一个 React 应用,它加载预先计算好的图像嵌入,并在浏览器中直接运行 SAM ONNX 模型。它使用了 Web Worker 的多线程和 SIMD128 优化来提高性能。
来源: demo/README.md96-123 demo/src/App.tsx25-130 demo/src/components/Stage.tsx1-49 demo/src/components/Tool.tsx1-73
The App 组件是主入口点,负责
来源: demo/src/App.tsx25-130 demo/README.md98-103
The Stage 组件管理用户交互
来源: demo/src/components/Stage.tsx13-47 demo/README.md104-107
The Tool 组件处理可视化
来源: demo/src/components/Tool.tsx12-73 demo/README.md108-111
来源: demo/src/App.tsx38-96 demo/src/components/Stage.tsx19-37 demo/src/components/Tool.tsx12-70
安装 Yarn
npm install --g yarn
构建并运行应用
yarn && yarn start
导航至 http://:8081/
可以通过替换图像、嵌入和模型文件来定制 Web Demo。该过程包括
使用 SAM Python API,您可以为新图像生成嵌入
初始化预测器
设置您的图像并导出嵌入
在 App.tsx 中更新以下常量
来源: demo/README.md73-81 demo/src/App.tsx21-23
Web Demo 为了性能使用了多线程,这需要特定的 HTTP 头部才能进行跨域隔离。
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: credentialless
这些头部允许使用 SharedArrayBuffer,这是多线程 WebAssembly 执行所必需的。
Demo 将输入图像缩放到最长边为 1024 像素,这是 SAM 模型的预期输入尺寸。
来源: demo/src/App.tsx64-78 demo/README.md122-123
来源: demo/src/components/Stage.tsx19-37 demo/src/App.tsx97-125
| 文件 | 目的 |
|---|---|
App.tsx | 主应用组件,负责模型初始化和推理 |
Stage.tsx | 管理用户交互和点击生成 |
Tool.tsx | 负责图像和掩码的渲染 |
helpers/maskUtils.tsx | 将模型输出转换为可显示的图像 |
helpers/onnxModelAPI.tsx | 为 ONNX 模型格式化输入 |
helpers/scaleHelper.tsx | 处理 SAM 的图像缩放 |