vue运行background-removal-js库

前段时间在github上有个能在浏览器扣图的js库蛮火https://github.com/imgly/background-removal-js
演示网站:demo
在这里插入图片描述
在这里插入图片描述

不仅仅能将人物主体扣出,还能处理动物、植物等
最近我萌发出在vue中运行这个库的想法,记录一下

下载、配置

首先当然是通过npm下载这个js库

npm i @imgly/background-removal
<h1>本地抠图工具</h1><h2>选择图片:</h2><el-uploadaction="#":auto-upload="false":on-change="uploadImg"list-type="picture-card"accept=".png,.jpg"><el-icon><Plus /></el-icon>
</el-upload><el-row :gutter="20"><el-col :span="12" v-if="orginImg"><h2>原图:</h2><el-image :src="orginImg" fit="contain" /></el-col><el-col :span="12" v-loading="loading"><h2>抠图结果:</h2><el-image v-if="feedBackImg"  :src="feedBackImg" fit="contain" /></el-col></el-row>
import { ref } from "vue";
import type { UploadFile } from "element-plus";
import { Plus } from '@element-plus/icons-vue'
import imglyRemoveBackground, { Config } from "@imgly/background-removal";
type image_src = ImageData | ArrayBuffer | Uint8Array | Blob | URL | string;// 选择图片
const orginImg = ref<Blob | string>("");
const uploadImg = (file: UploadFile) => {// 拿到本地图片地址orginImg.value = file.url;removeBackgorund(file.url);
};const loading = ref<boolean>(false)
// 抠图配置
let config: Config = {publicPath: "/src/static/removeBk/",//将模型文件存入本地,直接从项目本地跑模型,省去了下载模型的时间fetchArgs: {mode: "no-cors",//跨域问题},progress: (key:string, current:number) => {//进度回调,目前只会返回加载模型的进度,处理图片的进度不会返回loading.value = !(key==='compute:inference' && current === 1)},
};
// 抠图方法const feedBackImg = ref<Blob | string>("");
const removeBackgorund = async (temUrl: image_src) => {const blob: Blob = await imglyRemoveBackground(temUrl, config);const url = URL.createObjectURL(blob);feedBackImg.value = url;
};

核心代码主要是

const blob: Blob = await imglyRemoveBackground(temUrl, config);
const url = URL.createObjectURL(blob);

配置项

其中imglyRemoveBackground接收的第一个参数是本地图片地址,通过上传图片拿到bolb格式,将其传入,第二参数是配置项,目前全部的配置项有六个

publicPath: //找本地模型文件所处位置,配置了可以直接从项目本地跑模型,省去了下载模型的时间;
fetchArgs: boolean;//如果您遇到CORS问题,您可能希望通过fetch函数传递额外的参数。
progress: //进度回调函数,第一个参数是当前在处理什么,第二个是当前处理到多少,第三个是总大小;
debug: boolean; // 启用或禁用有用的控制输出。
proxyToWorker: boolean; // 是否将计算代理给Web Worker进行处理。(默认为true)
model: 'small' | 'medium'; // 使用的模型。(默认为“medium” 80m大小) small 40m大小

其中publicPath配置项加上抠图速度能提升不小,不加就是每次运行方法会下载抠图模型,加了后直接跑项目的模型,
在控制台运行这俩命令即可获取到模型文件

cp node_modules/@imgly/background-removal/dist/*.wasm $PUBLIC_PATH
cp node_modules/@imgly/background-removal/dist/*.onnx $PUBLIC_PATH

在这里插入图片描述
publicPath的值指向存放这五个文件的地址即可

效果图

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/14604.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【专题速递】音频生成、TTS和AIGC在音乐上的运用

// AIGC的发展为音频带来了什么&#xff1f;AIGC如何赋能音乐创作&#xff1f;如何识别虚假音频&#xff1f;TTS可以在哪种场景下解决特定问题&#xff1f;7月29日LiveVideoStackCon2023上海站音频新体验专场&#xff0c;为您解答。 音频新体验 随着多媒体和通信网络技术的不…

嵌入式开发--XW09A触摸芯片的使用

XW09A触摸芯片 XW09A是厦门市芯网电子科技有限公司出品的一颗触摸芯片&#xff0c;支持9键多点触摸&#xff0c;I2C接口&#xff0c;带中断引脚。 以下摘抄自芯片手册 极高的灵敏度&#xff0c;可穿透13mm 的玻璃&#xff0c;感应到手指的触摸 超强的抗干扰和ESD 能力,不加任何…

Debian 11 x64 安装 MySQL 8.0.33

更新 sudo apt update sudo apt install gnupg安装 DEB Package wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.25-1_all.deb sudo dpkg -i mysql-apt-config_0.8.25-1_all.deb具体版本见官方网站&#xff1a;MySQL Community Downloads&#xff0c;这里仅以版本 …

AI 对抗超级细菌:麦克马斯特大学利用深度学习发现新型抗生素 abaucin

内容一览&#xff1a;鲍曼不动杆菌是一种常见的医院获得性革兰氏阴性病原体&#xff0c;通常表现出多重耐药性。利用传统方法&#xff0c;发现抑制此菌的新型抗生素很困难。但利用机器学习可以快速探索化学空间&#xff0c;从而增加发现新型抗菌分子的可能性。近期&#xff0c;…

Vue3 动态路由、动态组件使用示例

前期回顾 Vue3 TS Vite —— 大屏可视化 项目实战_vue3可视化大屏_彩色之外的博客-CSDN博客大屏可视化项目实战_vue3可视化大屏https://blog.csdn.net/m0_57904695/article/details/131014666?spm1001.2014.3001.5501 目录 &#x1f44d; 动态组件 &#x1f440; 动态路…

Java支付SDK接口远程调试 - 支付宝沙箱环境【公网地址调试】

文章目录 1.测试环境2.本地配置3. 内网穿透3.1 下载安装cpolar内网穿透3.2 创建隧道 4. 测试公网访问5. 配置固定二级子域名5.1 保留一个二级子域名5.2 配置二级子域名 6. 使用固定二级子域名进行访问 转载自cpolar极点云文章&#xff1a;Java支付宝沙箱环境支付&#xff0c;SD…

解密Docker容器网络

一个Linux容器能看见的“网络栈”&#xff0c;被隔离在它自己的Network Namespace中。 1 “网络栈”的内容 网卡&#xff08;Network Interface&#xff09;回环设备&#xff08;Loopback Device&#xff09;路由表&#xff08;Routing Table&#xff09;iptables规则 对于一…

97、基于stm32单片机智能药箱药盒温湿度体温光照时钟wifi手机APP监控(程序+原理图+PCB源文件+手机APP源码+硬件设计资料+元器件清单等)

单片机类型选择 方案一&#xff1a;可以使用现在比较主流的单片机STC89C5单片机进行数据处理。这款单片机具有的特点是内存和51的单片机相比多了4KB内存&#xff0c;但是价格和51单片机一样。并且支持数据串行下载和调试助手。此款单片机是有ATMEL公司生产&#xff0c;可用5V电…

详细解释lvs的工作原理

vsl用于集群中的直接路由它的原理如下 如果在公司并发太高了怎么解决 1.加配置cpu 内存 带宽 ssd高效硬盘 2.加服务器 为用户提供服务 横向扩展 集群是什么 由的多台主机构成,相当于一台大型计算机,只提供一个访问入口(域名与ip地址) 集群用在那个场景 高并发场景 vrrp是…

【AI新趋势期刊#2】AI发明计算机算法,如何给大模型排行,照片秒变二维码,视频一键动漫风

前言 每天都要浏览大量AI相关新闻&#xff0c;是不是感到信息量爆炸&#xff0c;有效信息少&#xff1f; 这么多新产品和新工具&#xff0c;到底哪些是真正是有价值的&#xff0c;哪些只是浮躁的一时热点&#xff1f; 想参与AI产品和工具的开发&#xff0c;从哪里能够获得大…

spring security权限路由匹配restful格式的详情id设计

解决方案&#xff1a; 先直接说下解决方案&#xff0c;权限点设计成如下&#xff1a; /api/books/{id:\d*}问题描述&#xff1a; 获取书本详情的标准restful路由&#xff0c;一般是这样的/api/books/12&#xff0c; 12即该book的id&#xff0c;如果需要拥有访问该路由的权限…

设计模式之三:装饰者模式

装饰者模式可以在不修改任何底层代码的情况下&#xff0c;给对象赋予新的职责&#xff08;使用对象组合的方式&#xff0c;在运行时装饰类&#xff09;。 假定星巴兹咖啡需要更新订单系统&#xff0c;而他们原先类的设计如图&#xff1a; 现在他们考虑客户可以选择添加调料&am…