当前位置: 首页 > article >正文

Vue与Konva:解锁Canvas绘图的无限可能

前言

在现代Web开发中,动态、交互式的图形界面已成为提升用户体验的关键要素。Vue.js,作为一款轻量级且高效的前端框架,凭借其响应式数据绑定和组件化开发模式,赢得了众多开发者的青睐。而当Vue.js邂逅Konva.js,两者结合产生的化学反应更是令人惊叹。今天,就让我们一同深入探索如何利用Vue.js和Konva.js绘制复杂且交互丰富的Canvas图形。


一、Vue Konva简介

Vue Konva是一款基于Vue.js的JavaScript库,它为开发者提供了声明式和响应式的绑定方式,使得在Vue中使用Konva框架变得异常简单。通过Vue Konva,我们可以轻松地在Vue组件中绘制各种复杂的Canvas图形,并且能够实现图形的动态更新和交互。

二、快速上手

  1. 安装
    首先,确保你的项目中已经安装了Vue.js 2.4+版本。接下来,通过npm安装vue-konva和konva:
    对于Vue 3
npm install vue-konva konva --save

对于Vue 2

npm install vue-konva@2 konva --save
  1. 引入和使用VueKonva
    在Vue 3中,你需要在main.js中引入VueKonva并使用它:
import { createApp } from 'vue';
import App from './App.vue';
import VueKonva from 'vue-konva';const app = createApp(App);
app.use(VueKonva);
app.mount('#app');

在Vue 2中,引入和使用VueKonva的方式如下:

import Vue from 'vue';
import VueKonva from 'vue-konva';Vue.use(VueKonva);
  1. 在组件模板中引用
    在你的Vue组件中,你可以通过以下方式使用Vue Konva的组件:
<template><v-stage :config="configKonva"><v-layer><v-circle :config="configCircle"></v-circle></v-layer></v-stage>
</template><script>
export default {data() {return {configKonva: {width: 200,height: 200},configCircle: {x: 100,y: 100,radius: 70,fill: "red",stroke: "black",strokeWidth: 4}};}
};
</script>

三、绘制基础图形

Vue Konva提供了与Konva框架相同名称的组件,前缀为v-。你可以通过config属性传递参数来配置这些组件。以下是一些核心形状的示例:

  • v-rect(矩形)
  • v-circle(圆形)
  • v-ellipse(椭圆)
  • v-line(线条)
  • v-image(图片)
  • v-text(文本)
  • v-text-path(文本路径)
  • v-star(星形)
  • v-label(标签)
  • v-path(路径)
  • v-regular-polygon(正多边形)
    在这里插入图片描述
<template><div><v-stage ref="stage" :config="stageSize"><v-layer><v-text :config="{text: 'Some text on canvas', fontSize: 15}"/><v-rect :config="{x: 20,y: 50,width: 100,height: 100,fill: 'red',shadowBlur: 10}"/><v-circle :config="{x: 200,y: 100,radius: 50,fill: 'green'}"/><v-line :config="{x: 20,y: 200,points: [0, 0, 100, 0, 100, 100],tension: 0.5,closed: true,stroke: 'black',fillLinearGradientStartPoint: { x: -50, y: -50 },fillLinearGradientEndPoint: { x: 50, y: 50 },fillLinearGradientColorStops: [0, 'red', 1, 'yellow']}"/></v-layer><v-layer ref="dragLayer"></v-layer></v-stage></div>
</template><script>
const width = window.innerWidth;
const height = window.innerHeight;
export default {data() {return {stageSize: {width: width,height: height}};}
};
</script>

四、自定义形状

除了基础形状,Vue Konva还允许你创建自定义形状。通过使用v-shape组件,你可以定义一个绘图函数,该函数接收一个Konva.Canvas渲染器,你可以利用它访问HTML5 Canvas上下文,并使用特殊方法如context.fillStrokeShape(shape)来自动处理填充、描边和阴影效果。
在这里插入图片描述

<template><v-stage ref="stage" :config="stageSize"><v-layer><v-shape :config="{width: 260,height: 170,sceneFunc: function (context, shape) {const width = shape.width();const height = shape.height();context.beginPath();context.moveTo(0, 0);context.lineTo(width - 40, height - 90);context.quadraticCurveTo(width - 110, height - 70, width, height);context.closePath();// (!) Konva特定方法,非常重要context.fillStrokeShape(shape);},fill: '#00D2FF',stroke: 'black',strokeWidth: 4}"/></v-layer></v-stage>
</template><script>
const width = window.innerWidth;
const height = window.innerHeight;export default {data() {return {stageSize: {width: width,height: height}};}
};
</script>

五、事件监听

Vue Konva使得监听用户输入事件(如click、dblclick、mouseover、tap、dbltap、touchstart等)和拖拽事件(如dragstart、dragmove、dragend)变得非常简单。你可以通过在组件上添加事件监听器来实现这些功能。
在这里插入图片描述

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

<template>
<v-stage ref="stage" :config="stageSize"><v-layer ref="layer"><v-regular-polygon@mousemove="handleMouseMove"@mouseout="handleMouseOut":config="{x: 80,y: 120,sides: 3,radius: 80,fill: '#00D2FF',stroke: 'black',strokeWidth: 4}"/><v-text ref="text" :config="{x: 10,y: 10,fontFamily: 'Calibri',fontSize: 24,text: text,fill: 'black'}" /></v-layer></v-stage>
</template><script>
const width = window.innerWidth;
const height = window.innerHeight;export default {data() {return {stageSize: {width: width,height: height},text: ''};},methods: {writeMessage(message) {this.text = message;},handleMouseOut(event) {this.writeMessage('Mouseout triangle');},handleMouseMove(event) {const mousePos = this.$refs.stage.getNode().getPointerPosition();const x = mousePos.x - 190;const y = mousePos.y - 40;this.writeMessage('x: ' + x + ', y: ' + y);}}
};
</script>

六、绘制图片

在Vue Konva中,绘制图片需要手动创建一个原生的window.Image实例或canvas元素,并将其作为v-image组件的image属性。
在这里插入图片描述

<template><v-stage ref="stage" :config="stageSize"><v-layer ref="layer"><v-image :config="{image: image}"/></v-layer></v-stage>
</template><script>
const width = window.innerWidth;
const height = window.innerHeight;export default {data() {return {stageSize: {width: width,height: height},image: null};},created() {const image = new window.Image();image.src = "https://konvajs.org/assets/yoda.jpg";image.onload = () => {// 图片加载完成后设置this.image = image;};}
};
</script>

七、应用滤镜

Vue Konva允许你为图形应用各种滤镜效果。你需要手动缓存Konva.Node,并在需要时重新缓存节点。
在这里插入图片描述

<template>
<v-stage ref="stage" :config="stageSize"><v-layer ref="layer"><v-rectref="rect"@mousemove="handleMouseMove":config="{filters: filters,noise: 1,x: 10,y: 10,width: 50,height: 50,fill: color,shadowBlur: 10}"/></v-layer></v-stage>
</template><script>
const width = window.innerWidth;
const height = window.innerHeight;
import Konva from 'konva';export default {data() {return {stageSize: {width: width,height: height},color: 'green',filters: [Konva.Filters.Noise]};},methods: {handleMouseMove() {this.color = Konva.Util.getRandomColor();// 重新缓存const rectNode = this.$refs.rect.getNode();// 可能需要手动重绘图层rectNode.cache();}},mounted() {const rectNode = this.$refs.rect.getNode();rectNode.cache();},
};
</script>

八、保存和加载Canvas

Vue Konva提供了简单的方法来保存和加载Canvas状态。你可以通过保存应用的状态来实现这一点,而不需要保存Konva内部的节点。
在这里插入图片描述

<template><div>点击Canvas创建一个圆。<a href=".">刷新页面</a>。圆应该仍然在这里。<v-stage ref="stage":config="stageSize"@click="handleClick"><v-layer ref="layer"><v-circlev-for="item in list":key="item.id":config="item"></v-circle></v-layer><v-layer ref="dragLayer"></v-layer></v-stage></div>
</template><script>
const width = window.innerWidth;
const height = window.innerHeight;export default {data() {return {list: [{ x: 100, y: 100, radius: 50, fill: 'blue' }],stageSize: {width: width,height: height}};},methods: {handleClick(evt) {const stage = evt.target.getStage();const pos = stage.getPointerPosition();this.list.push({radius: 50,fill: 'red',...pos});this.save();},load() {const data = localStorage.getItem('storage');if (data) this.list = JSON.parse(data);},save() {localStorage.setItem('storage', JSON.stringify(this.list));}},mounted() {this.load();}
};
</script>

九、拖拽功能

Vue Konva使得实现图形的拖拽功能变得非常简单。你只需要在组件中添加draggable: true属性即可。
在这里插入图片描述
在这里插入图片描述

<template>
<v-stage ref="stage" :config="stageSize"><v-layer ref="layer"><v-text@dragstart="handleDragStart"@dragend="handleDragEnd":config="{text: 'Draggable Text',x: 50,y: 50,draggable: true,fill: isDragging ? 'green' : 'black'}"/></v-layer></v-stage>
</template><script>
const width = window.innerWidth;
const height = window.innerHeight;export default {data() {return {stageSize: {width: width,height: height},isDragging: false};},methods: {handleDragStart() {this.isDragging = true;},handleDragEnd() {this.isDragging = false;}}
};
</script>

十、调整大小和旋转

虽然Vue Konva没有提供纯声明式的“Vue方式”来使用Transformer工具,但你仍然可以通过手动操作Konva节点来实现这一功能。
在这里插入图片描述
在这里插入图片描述

<template><v-stageref="stage":config="stageSize"@mousedown="handleStageMouseDown"@touchstart="handleStageMouseDown"><v-layer ref="layer"><v-rectv-for="item in rectangles":key="item.id":config="item"@transformend="handleTransformEnd"/><v-transformer ref="transformer" /></v-layer></v-stage>
</template><script>
import Konva from 'konva';
const width = window.innerWidth;
const height = window.innerHeight;export default {data() {return {stageSize: {width: width,height: height,},rectangles: [{rotation: 0,x: 10,y: 10,width: 100,height: 100,scaleX: 1,scaleY: 1,fill: 'red',name: 'rect1',draggable: true,},{rotation: 0,x: 150,y: 150,width: 100,height: 100,scaleX: 1,scaleY: 1,fill: 'green',name: 'rect2',draggable: true,},],selectedShapeName: '',};},methods: {handleTransformEnd(e) {// 形状被变换,保存新的属性回节点// 在我们的状态中找到元素const rect = this.rectangles.find((r) => r.name === this.selectedShapeName);// 更新状态rect.x = e.target.x();rect.y = e.target.y();rect.rotation = e.target.rotation();rect.scaleX = e.target.scaleX();rect.scaleY = e.target.scaleY();// 更改填充色rect.fill = Konva.Util.getRandomColor();},handleStageMouseDown(e) {// 点击舞台 - 清除选择if (e.target === e.target.getStage()) {this.selectedShapeName = '';this.updateTransformer();return;}// 点击变换器 - 什么都不做const clickedOnTransformer =e.target.getParent().className === 'Transformer';if (clickedOnTransformer) {return;}// 通过名称找到被点击的矩形const name = e.target.name();const rect = this.rectangles.find((r) => r.name === name);if (rect) {this.selectedShapeName = name;} else {this.selectedShapeName = '';}this.updateTransformer();},updateTransformer() {// 手动附加或分离变换器节点const transformerNode = this.$refs.transformer.getNode();const stage = transformerNode.getStage();const { selectedShapeName } = this;const selectedNode = stage.findOne('.' + selectedShapeName);// 如果选定节点已经附加,则什么都不做if (selectedNode === transformerNode.node()) {return;}if (selectedNode) {// 附加到另一个节点transformerNode.nodes([selectedNode]);} else {// 移除变换器transformerNode.nodes([]);}},},
};
</script>

十一、动画效果

Vue Konva允许你为图形添加动画效果。你可以使用Konva的Tween和Animation方法来实现这一点。
在这里插入图片描述
在这里插入图片描述

<template><v-stage ref="stage" :config="stageSize"><v-layer ref="layer"><v-rectref="rect"@dragstart="changeSize"@dragend="changeSize":config="{width: 50,height: 50,fill: 'green',draggable: true}"/><v-regular-polygonref="hexagon":config="{x: 200,y: 200,sides: 6,radius: 20,fill: 'red',stroke: 'black',strokeWidth: 4}"/></v-layer></v-stage>
</template><script>
import Konva from "konva";
const width = window.innerWidth;
const height = window.innerHeight;export default {data() {return {stageSize: {width: width,height: height}};},methods: {changeSize(e) {// to()是Konva.Node实例的方法e.target.to({scaleX: Math.random() + 0.8,scaleY: Math.random() + 0.8,duration: 0.2});}},mounted() {const vm = this;const amplitude = 100;const period = 5000;// in msconst centerX = vm.$refs.stage.getNode().getWidth() / 2;const hexagon = this.$refs.hexagon.getNode();// Konva.Animation示例const anim = new Konva.Animation(function(frame) {hexagon.setX(amplitude * Math.sin((frame.time * 2 * Math.PI) / period) + centerX);}, hexagon.getLayer());anim.start();}
};
</script>

十二、缓存图形

在Vue Konva中,你可以通过访问Konva节点并使用node.cache()函数来缓存节点。
在这里插入图片描述

<template><div><v-stage ref="stage" :config="stageConfig"><v-layer ref="layer"><v-group ref="group"><v-starv-for="item in list":key="item.id":config="{x: item.x,y: item.y,rotation: item.rotation,id: item.id,numPoints: 5,innerRadius: 30,outerRadius: 50, fill: '#89b717',opacity: 0.8,shadowColor: 'black',shadowBlur: 10,shadowOpacity: 0.6,scaleX: item.scale,scaleY: item.scale,}"/></v-group></v-layer></v-stage><div class="cache"><input type="checkbox" @change="handleCacheChange"> 缓存图形</div></div>
</template><script>
const width = window.innerWidth;
const height = window.innerHeight;
export default {data() {return {list: [],dragItemId: null,stageConfig: {width: width,height: height,draggable: true}};},methods: {handleCacheChange(e) {const shouldCache = e.target.checked;if (shouldCache) {this.$refs.group.getNode().cache();} else {this.$refs.group.getNode().clearCache();}}},mounted() {for (let n = 0; n < 300; n++) {this.list.push({id: Math.round(Math.random() * 10000).toString(),x: Math.random() * width,y: Math.random() * height,rotation: Math.random() * 180,scale: Math.random()});}}
};
</script><style>
body {margin: 0;padding: 0;
}.cache {position: absolute;top: 0;left: 0;
}
</style>

十三、改变zIndex和组件排序
在Vue Konva中,不推荐直接使用zIndex来改变组件的堆叠顺序。相反,你应该通过更新应用的数据来确保组件在模板中的顺序正确。
在这里插入图片描述
在这里插入图片描述

<template><div><v-stage ref="stage" :config="configKonva"><v-layer ref="layer"><v-circlev-for="item in items":key="item.id":config="item"@dragstart="handleDragstart"@dragend="handleDragend"></v-circle></v-layer></v-stage></div>
</template><script>
import Konva from "konva";
const width = window.innerWidth;
const height = window.innerHeight;function generateItems() {const items = [];for (let i = 0; i < 10; i++) {items.push({x: Math.random() * width,y: Math.random() * height,radius: 50,id: "node-" + i,fill: Konva.Util.getRandomColor(),draggable: true,});}return items;
}export default {data() {return {items: [],dragItemId: null,configKonva: {width: width,height: height,},};},methods: {handleDragstart(e) {// 保存拖动元素:this.dragItemId = e.target.id();// 通过重新排列items数组,将当前元素移动到顶部:const item = this.items.find((i) => i.id === this.dragItemId);const index = this.items.indexOf(item);this.items.splice(index, 1);this.items.push(item);},handleDragend(e) {this.dragItemId = null;},},mounted() {this.items = generateItems();},
};
</script><style>
body {margin: 0;padding: 0;
}
</style>

总结

通过以上内容,我们全面地介绍了Vue Konva的各种功能和用法。从基础图形的绘制到复杂的动画效果,Vue Konva都提供了强大的支持。希望这篇博客能够帮助你更好地理解和使用Vue Konva,为你的Web应用增添更多的交互性和视觉效果。

相关文章:

Vue与Konva:解锁Canvas绘图的无限可能

前言 在现代Web开发中&#xff0c;动态、交互式的图形界面已成为提升用户体验的关键要素。Vue.js&#xff0c;作为一款轻量级且高效的前端框架&#xff0c;凭借其响应式数据绑定和组件化开发模式&#xff0c;赢得了众多开发者的青睐。而当Vue.js邂逅Konva.js&#xff0c;两者结…...

如何修改DNS解析?

DNS(域名系统)就像互联网的“电话簿”&#xff0c;负责将我们输入的网址转换为计算机能够理解的IP地址。如果DNS解析出现问题&#xff0c;访问网站就会受到影响。那我们该如何修改DNS解析呢?接下来&#xff0c;我们就来介绍一下这个话题。 为什么要修改DNS解析? 使用默认的…...

go语言文件和目录

打开和关闭文件 os.Open()函数能够打开一个文件&#xff0c;返回一个*File 和一个 err。操作完成文件对象以后一定要记得关闭文件。 package mainimport ("fmt""os" )func main() {// 只读方式打开当前目录下的 main.go 文件file, err : os.Open(".…...

Solidity09 Solidity构造函数和修饰器

文章目录 一、构造函数二、修饰器三、OpenZeppelin的Ownable标准实现四、Remix 演示示例五、代码示例 这一讲&#xff0c;我们将用合约权限控制&#xff08; Ownable&#xff09;的例子介绍 Solidity语言中构造函数&#xff08; constructor&#xff09;和独有的修饰器&…...

ES6 Map 数据结构是用总结

1. Map 基本概念 Map 是 ES6 提供的新的数据结构&#xff0c;它类似于对象&#xff0c;但是"键"的范围不限于字符串&#xff0c;各种类型的值&#xff08;包括对象&#xff09;都可以当作键。Map 也可以跟踪键值对的原始插入顺序。 1.1 基本用法 // 创建一个空Map…...

使用wpa_supplicant和wpa_cli 扫描wifi热点及配网

一&#xff1a;简要说明 交叉编译wpa_supplicant工具后会有wpa_supplicant和wpa_cli两个程序生产&#xff0c;如果知道需要连接的wifi热点及密码的话不需要遍历及查询所有wifi热点的名字及信号强度等信息的话&#xff0c;使用wpa_supplicant即可&#xff0c;否则还需要使用wpa_…...

json转excel,在excel内导入json, json-to-excel插件

简介 JSON 转 Excel 是一款 Microsoft Excel 插件&#xff0c;可将 JSON 数据转换为 Excel 表格。 要求 此插件适用于以下环境&#xff1a;Excel 2013 Service Pack 1 或更高版本、Excel 2016 for Mac、Excel 2016 或更高版本、Excel Online。 快速开始 本快速开始指南适用…...

大模型应用与实战:专栏概要与内容目录

文章目录 大模型应用与实战&#x1f4da; 核心内容模块一、大模型推理与部署1.1 推理框架应用实践1.2 框架源码深度解析1.3 高并发部署优化1.4 国产化平台适配 二、Agent框架专题2.1 Langchain系列2.2 Qwen-Agent系列2.3 Dify应用实践2.4 框架对比与迁移 三、微调技术研究3.1 微…...

ZooKeeper 的典型应用场景:从概念到实践

引言 在分布式系统的生态中&#xff0c;ZooKeeper 作为一个协调服务框架&#xff0c;扮演着至关重要的角色。它的设计目的是提供一个简单高效的解决方案来处理分布式系统中常见的协调问题。本文将详细探讨 ZooKeeper 的典型应用场景&#xff0c;包括但不限于配置管理、命名服务…...

Arbess基础教程-创建流水线

Arbess(谐音阿尔卑斯) 是一款开源免费的 CI/CD 工具&#xff0c;本文将介绍如何使用 Arbess 配置你的第一条流水线&#xff0c;以快速入门上手。 1. 创建流水线 根据不同需求来创建不同的流水线。 1.1 配置基本信息 配置流水线的基本信息&#xff0c;如分组&#xff0c;环境&…...

科普书《从一到无穷大》的科普知识推翻百年集论

科普书《从一到无穷大》的科普知识推翻百年集论 黄小宁 “我们给两组无穷大数列中的各个数一一配对&#xff0c;如果最后这两组都一个不剩&#xff0c;这两组无穷大就是相等的&#xff1b;如果有一组还有些数没有配出去&#xff0c;这一组就比另一组大些&#xff0c;或者说强些…...

【键盘识别】实例分割

第一步 键盘检测 方案一 canny边缘检测 canny边缘检测检测结果不稳定,容易因为复杂背景或光线变换检测出其他目标。 如图是用canny边缘检测方法标出的检测出的边缘的四个红点。 参考的是这篇文章OpenCV实战之三 | 基于OpenCV实现图像校正_opencv 图像校正-CSDN博客 方案二…...

25/2/7 <机器人基础>雅可比矩阵计算 雅可比伪逆

雅可比矩阵计算 雅可比矩阵的定义 假设我们有一个简单的两个关节的平面机器人臂&#xff0c;其末端执行器的位置可以表示为&#xff1a; 其中&#xff1a; L1​ 和 L2 是机器人臂的长度。θ1​ 和 θ2是关节的角度。 计算雅可比矩阵 雅可比矩阵 JJ 的定义是将关节速度与末…...

apisix的real-ip插件使用说明

k8s集群入口一般都需要过负载均衡&#xff0c;然后再到apisix。 这时候如果后台业务需要获取客户端ip&#xff0c;可能拿到的是lb或者网关的内网ip。 这里一般要获取真实ip需要做几个处理。 1. 负载均衡上&#xff0c;一般支持配置获取真实ip参数&#xff0c;需要配置上。然…...

位图的深入解析:从数据结构到图像处理与C++实现

在学习优选算法课程的时候&#xff0c;博主学习位运算了解到位运算的这个概念&#xff0c;之前没有接触过&#xff0c;就查找了相关的资料&#xff0c;丰富一下自身&#xff0c;当作课外知识来了解一下。 位图&#xff08;Bitmap&#xff09;是一种用于表示图像的数据结构&…...

Python实现GO鹅优化算法优化支持向量机SVM分类模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 随着信息技术的迅猛发展&#xff0c;数据量呈爆炸式增长&#xff0c;如何从海量的数据中提取有价值…...

Deno vs Node.js:性能对比深度解析

1. 引言 Deno 和 Node.js 都是基于 V8 引擎的 JavaScript 运行时环境&#xff0c;然而它们在架构、模块管理、安全性和性能方面存在显著差异。Deno 由 Node.js 的原始作者 Ryan Dahl 开发&#xff0c;旨在解决 Node.js 设计上的一些问题&#xff0c;比如包管理、安全模型和 Ty…...

我用AI做数据分析之数据清洗

我用AI做数据分析之数据清洗 AI与数据分析的融合效果怎样&#xff1f; 这里描述自己在使用AI进行数据分析&#xff08;数据清洗&#xff09;过程中的几个小故事&#xff1a; 1. 变量名的翻译 有一个项目是某医生自己收集的数据&#xff0c;变量名使用的是中文&#xff0c;分…...

备战蓝桥杯:双指针(滑动窗口)算法之逛花展

P1638 逛画展 - 洛谷 | 计算机科学教育新生态 这道题我们只要用一个kind和一个mp[N]的数组就能解决了 我们的解法1就是暴力枚举&#xff0c;先固定2&#xff0c;从2开始找连续的满足所有种类的最短的子数组&#xff0c;然后固定5&#xff0c;3&#xff0c;1&#xff0c;3&…...

【sqlite】python操作sqlite3(含测试)

个人小项目或者小团队&#xff0c;sqllite很适用&#xff0c;数据库封装操作如下 #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2025-02-08 13:57 # Author : duxiaowei # File : connect_sqllite.py # Software: PyCharm """ sqllite操作, …...

mybatis 是否支持延迟加载?延迟加载的原理是什么?

1. MyBatis 是否支持延迟加载&#xff1f; 是的&#xff0c;MyBatis 支持延迟加载。延迟加载的主要功能是推迟数据加载的时机&#xff0c;直到真正需要时再去加载。这种方式能提高性能&#xff0c;尤其是在处理关系型数据时&#xff0c;可以避免不必要的数据库查询。 具体来说…...

collabora online+nextcloud+mariadb在线文档协助

1、环境 龙蜥os 8.9 docker 2、安装docker dnf -y install dnf-plugins-core dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sed -i shttps://download.docker.comhttps://mirrors.tuna.tsinghua.edu.cn/docker-ce /etc/yum.repos.…...

深度学习中的Checkpoint是什么?

诸神缄默不语-个人CSDN博文目录 文章目录 引言1. 什么是Checkpoint&#xff1f;2. 为什么需要Checkpoint&#xff1f;3. 如何使用Checkpoint&#xff1f;3.1 TensorFlow 中的 Checkpoint3.2 PyTorch 中的 Checkpoint3.3 transformers中的Checkpoint 4. 在 NLP 任务中的应用5. 总…...

字符串高频算法:无重复字符的最长子串

题目 3. 无重复字符的最长子串 - 力扣&#xff08;LeetCode&#xff09; 解题思路 思路 方法: 滑动窗口 [!简单思路] [^1]以示例一中的字符串 abcabcbb 为例&#xff0c;找出从每一个字符开始的&#xff0c;不包含重复字符的最长子串&#xff0c;其中最长的那个字符串即为答…...

用深度学习模型构建海洋动物图像分类保姆教程

使用深度学习模型构建深度学习海洋动物图像分类模型的完整步骤如下&#xff0c;分为关键阶段和详细操作说明&#xff1a; 1. 数据准备与预处理 1.1 数据集组织 按类别分文件夹存储图像&#xff0c;例如&#xff1a;dataset/train/class1/class2/...val/class1/class2/...test…...

51单片机俄罗斯方块计分函数

/************************************************************************************************************** * 名称&#xff1a;scoring * 功能&#xff1a;计分 * 参数&#xff1a;NULL * 返回&#xff1a;NULL * 备注&#xff1a;采用非阻塞延时 ****************…...

Android开发获取缓存,删除缓存

Android开发获取缓存&#xff0c;删除缓存 app设置中往往有清理缓存的功能。会显示当前缓存时多少&#xff0c;然后可以点击清理缓存 直接上代码&#xff1a; object CacheHelper {/*** 获取缓存大小* param context* return* throws Exception*/JvmStaticfun getTotalCache…...

npm无法加载文件 因为此系统禁止运行脚本

安装nodejs后遇到问题&#xff1a; 在项目里【node -v】可以打印出来&#xff0c;【npm -v】打印不出来&#xff0c;显示npm无法加载文件 因为此系统禁止运行脚本。 但是在winr&#xff0c;cmd里【node -v】,【npm -v】都也可打印出来。 解决方法&#xff1a; cmd里可以打印出…...

NLP_[2]-认识文本预处理

文章目录 1 认识文本预处理1 文本预处理及其作用2. 文本预处理中包含的主要环节2.1 文本处理的基本方法2.2 文本张量表示方法2.3 文本语料的数据分析2.4 文本特征处理2.5数据增强方法2.6 重要说明 2 文本处理的基本方法1. 什么是分词2 什么是命名实体识别3 什么是词性标注 1 认…...

知识库升级新思路:用生成式AI打造智能知识助手

在当今信息爆炸的时代&#xff0c;企业和组织面临着海量数据的处理和管理挑战。知识库管理系统&#xff08;Knowledge Base Management System, KBMS&#xff09;作为一种有效的信息管理工具&#xff0c;帮助企业存储、组织和检索知识。然而&#xff0c;传统的知识库系统往往依…...