我是如何构建浏览器端背景移除工具的

我有 300 张产品照片需要处理。我需要为一家 Shopify 店铺移除它们的背景。

我不想将这些尚未发布的照片上传到随机的服务器。我想要一个能在浏览器本地运行的解决方案。

我测试了两种不同的方法,看看哪种效果最好。

方法 1:Canvas API

这种方法使用像素操作。你从角落选取一种颜色,并将所有相似的像素设置为透明。

• 优点:速度极快。无需下载额外文件。几乎不占用内存。 • 缺点:如果背景有阴影、渐变或纹理,该方法就会失效。它会产生锯齿状边缘。

方法 2:WebAssembly (WASM) + 机器学习

这种方法通过 ONNX Runtime Web 使用机器学习模型来识别什么是人或物体。

• 优点:可以处理头发、皮毛和复杂的边缘。适用于几乎任何背景。 • 缺点:必须下载一个 8MB 的模型。它会消耗更多的 CPU 和内存。

测试结果

我在 MacBook Pro 上测试了 500 张图像。以下是它们的对比情况:

  • Canvas 速度:每张图像 12-18 毫秒。
  • WASM 速度:每张图像 180-220 毫秒。
  • Canvas 准确率:500 张图像中的 187 张。
  • WASM 准确率:500 张图像中的 412 张。

我的解决方案:混合方法

我构建了一个结合两者的工具。它首先尝试 Canvas 方法。如果背景过于复杂,它就会切换到机器学习模型。这样平均每张图像耗时 40 毫秒。

给你的技术建议:

  • getImageData() 会导致延迟,因为它需要将数据从 GPU 移动到 CPU。请批量处理你的操作以节省时间。
  • 在 ONNX Runtime 中使用 WebGL 后端,速度可提升 3-5 倍。
  • 模型请坚持使用 256x256 的输入尺寸。对于产品照片来说,更大的尺寸会让处理速度变慢 4 倍,却不会带来足够的收益。

如果你需要快速处理简单的照片,请使用 Canvas。如果你需要高质量,请使用机器学习。

来源:https://dev.to/saba_khan_50d6d6e112c484f/how-i-built-a-browser-side-background-remover-and-benchmarked-canvas-vs-webassembly-5bf2

可选的学习社区:https://t.me/GyaanSetuAi