在浏览器里就可以运行的本地AI模型 - 一键去除图片背景AI

news/2024/10/30 17:20:52/

前言

浏览器的功能越来越强大, 从Chrome 113 开始, 谷歌把WebGPU引入到了浏览器中, 通过WebGPU的API, 可以直接访问本机电脑的GPU资源. 既然GPU资源可以在浏览器里运行, 给AI模型推理等带来了便利, 使得一些AI模型可以直接在浏览器里运行.

本文主要介绍介绍以下WebGPU的基本概念和使用, 同时看一个可以在浏览器中运行的AI模型 - 一键去除图片背景的例子

WebGPU介绍

WebGPU是一种新兴的Web标准,旨在为现代图形和计算应用提供高性能、低功耗的API。它由W3C GPU for the Web社区小组开发,受到了Apple的Metal、Microsoft的DirectX 12和Khronos Group的Vulkan等现代图形API的启发。WebGPU专为现代图形硬件设计,通过显式的资源管理、多线程渲染和低开销的API调用,可以充分利用GPU的并行计算能力,实现比WebGL更高的性能。同时,它还支持自动功耗管理,可以根据设备的性能和功耗需求自动调整渲染质量,在移动设备和笔记本电脑上更加节能。

在易用性方面,WebGPU使用JavaScript和WebIDL作为编程接口,开发者可以使用熟悉的Web技术进行开发。此外,它还提供了一套统一的着色语言(WGSL),简化了跨平台开发的复杂性。在安全性上,WebGPU通过严格的资源验证和错误处理机制,确保了在浏览器环境中的安全运行。

WebGPU可以应用于各种Web场景,包括3D游戏、数据可视化、虚拟现实和增强现实以及机器学习和计算等。它为Web游戏提供高性能的图形渲染,使游戏在浏览器中运行得更加流畅;可以处理大量的数据点和几何体,为复杂的数据可视化应用提供强大的支持;还可以与WebXR API结合使用,为Web上的虚拟现实和增强现实应用提供高性能的图形渲染。

一个简单的WebGPU代码的例子

// 引入WebGPU适配器和设备
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();// 创建WebGPU上下文
const canvas = document.getElementById('webgpuCanvas');
const context = canvas.getContext('webgpu');// 配置交换链格式
const swapChainFormat = 'bgra8unorm';
context.configure({device: device,format: swapChainFormat
});// 顶点着色器代码
const vertexShaderCode = `@stage(vertex)fn main(@builtin(vertex_index) VertexIndex: u32) -> @builtin(position) vec4<f32> {var pos = array<vec2<f32>, 3>(vec2<f32>(0.0, 0.5),vec2<f32>(-0.5, -0.5),vec2<f32>(0.5, -0.5));return vec4<f32>(pos[VertexIndex], 0.0, 1.0);}
`;// 片段着色器代码
const fragmentShaderCode = `@stage(fragment)fn main() -> @location(0) vec4<f32> {return vec4<f32>(1.0, 0.0, 0.0, 1.0); // 红色}
`;// 创建着色器模块
const vertexShaderModule = device.createShaderModule({code: vertexShaderCode
});
const fragmentShaderModule = device.createShaderModule({code: fragmentShaderCode
});// 创建渲染管道
const pipeline = device.createRenderPipeline({vertex: {module: vertexShaderModule,entryPoint: 'main'},fragment: {module: fragmentShaderModule,entryPoint: 'main',targets: [{format: swapChainFormat}]},primitive: {topology: 'triangle-list'}
});// 渲染过程
const commandEncoder = device.createCommandEncoder();
const textureView = context.getCurrentTexture().createView();
const renderPassDescriptor = {colorAttachments: [{view: textureView,loadValue: [0.0, 0.0, 0.0, 1.0], // 背景颜色为黑色storeOp: 'store'}]
};
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
passEncoder.setPipeline(pipeline);
passEncoder.draw(3, 1, 0, 0); // 绘制一个三角形
passEncoder.endPass();// 提交命令
device.queue.submit([commandEncoder.finish()]);

上述的WebGPU代码, 一个基本的WebGPU程序,绘制了一个红色的三角形. 

WebGPU运行AI模型的例子

首先, 通过JS运行AI模型, 需要使用Transformer.js, 它是一个 JavaScript 库,用于在浏览器中实现机器学习模型。它允许开发者轻松地在网页上部署和运行各种机器学习算法,包括分类、回归和聚类等。Transformer.js 通过 WebAssembly/WebGL/WebGPU 等技术,实现了高性能的计算,使得复杂的机器学习模型也能在浏览器中高效运行。

在HuggingFace上, 可以找到一个去除图片背景的例子, 它使用了Transformer.js库, 并开启了WebGPU支持:

Remove Background Web - a Hugging Face Space by Xenova

相关代码文件这边页提交到了CSDN代码库中, 你可以到这里查看相应的代码:

https://gitcode.com/u012416063/remove-background-web.git

提示, 你可以自己在本地部署上述的代码测试, 测试时需要注意, 目前WebGPU只能运行在https下面, 本地的ip地址可能会报错误. 同时, 需要确保你的Chrome浏览器版本大于113

打开网页可以看到如下的界面:

我们上传一张图片上去, 原始图片如下:

处理完成后:

可以看到效果非常不错, 整体速度也还行, 我这边4070显卡测试一般只需要数秒钟便可以处理完成, 对于普通的用户已经足够了.

总结

以上便是关于WebGPU和一个可以运行在浏览器中的去除图片背景的AI介绍, 如果你想了解更多关于AI, HTML打包加密等内容, 欢迎关注收藏.


http://www.ppmy.cn/news/1543147.html

相关文章

利用前向勾子获取神经网络中间层的输出并将其进行保存(示例详解)

代码示例&#xff1a; # 激活字典&#xff0c;用于保存每次的中间特征 activation {}# 将 forward_hook 函数定义在 upsample_v2 外部 def forward_hook(name):def hook(module, input, output):activation[name] output.detach()return hookdef upsample_v2(in_channels, o…

抓取和分析JSON数据:使用Python构建数据处理管道

引言 在大数据时代&#xff0c;电商网站如亚马逊、京东等已成为数据采集的重要来源。获取并分析这些平台的产品信息可为市场分析、价格比较等提供数据支持。然而&#xff0c;由于网站数据通常以JSON格式动态加载&#xff0c;且限制较多&#xff08;如IP限制、反爬机制&#xf…

echarts实现 水库高程模拟图表

需求背景解决思路解决效果index.vue 需求背景 需要做一个水库高程模拟的图表&#xff0c;x轴是水平距离&#xff0c;y轴是高程&#xff0c;需要模拟改水库的形状 echarts 图表集链接 解决思路 配合ui切图&#xff0c;模拟水库形状 解决效果 index.vue <!--/*** author:…

【Python爬虫实战】网络爬虫完整指南:网络协议OSI模型

网络爬虫完整指南&#xff1a;从协议基础到实践应用 什么是网络协议&#xff1f; **网络协议&#xff08;Network Protocol&#xff09;**是指计算机网络中设备和设备之间进行通信的规则和约定。它定义了数据传输的格式、顺序、传输方法和错误处理机制&#xff0c;使不同设备和…

Ubuntu 22.04系统启动时自动运行ROS2节点

在 Ubuntu 启动时自动运行 ROS2 节点的方法 环境&#xff1a;Ubuntu 系统&#xff0c;ROS2 Humble&#xff0c;使用系统自带的 启动应用程序 目标&#xff1a;在系统启动时自动运行指定的 ROS2 节点 效果展示 系统启动后&#xff0c;自动运行小乌龟节点和键盘控制节点。 实践…

uniapp写抖音小程序阻止右滑返回上一个页面

最近用uniapp写小程序遇到一个问题因为内部用到右滑的业务&#xff0c;但是只要右滑就会回到上一页面&#xff0c;用了event.preventDeafult()没有用&#xff0c;看了文档找到了解决办法 1.在最外层view加上touchstart事件 <view class"container" touchstart&q…

ChartCheck: Explainable Fact-Checking over Real-World Chart Images

论文地址: https://aclanthology.org/2024.findings-acl.828.pdfhttps://aclanthology.org/2024.findings-acl.828.pdf 1.概述 事实验证技术在自然语言处理领域获得了广泛关注,尤其是在针对误导性陈述的检查方面。然而,利用图表等数据可视化来传播信息误导的情况却很少受到…

一篇快速入门Jmeter

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 为什么要撰写这样一个教程呢&#xff1f; 深入学习Jmeter 温故而知新。尽管我已经使用JMeter很长时间&#xff0c;但还有许多元件我并不十分了解&#xff0c;…