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

python的3D可视化库vedo-3 (visual模块)点对象的属性、光效、附注

文章目录

  • 3 PointsVisual的方法
    • 3.1 对象属性
      • 3.1.1 顶点大小
      • 3.1.2 复制属性
      • 3.1.3 颜色设置
      • 3.1.4透明度设置
    • 3.2 对象光效
      • 3.2.1 点的形状
      • 3.2.2 点的表面光效
    • 3.3 尾随线和投影
      • 3.3.1 尾随线
      • 3.3.2 投影
    • 3.4 给对象附加文字说明
      • 3.4.1 标注
      • 3.4.2 2D标注
      • 3.4.3 气泡说明
      • 3.4.4 旗标说明
      • 3.4.5 在窗口悬挂的说明框

visual子模块包含了管理对象及其属性的可视化和外观的基类。
visual模块的 PointsVisual是点对象 Points和网格可视化对象 MeshVisual的基类。
本文对 PointsVisual类的方法做了整理和测试。

3 PointsVisual的方法

PointsVisual用于控制Points对象的可视化。

3.1 对象属性

3.1.1 顶点大小

c.point_size(value=None)
c.ps(pointsize=None)
设置或获取网格顶点的点大小。

获取点大小没问题。设置点大小后,使用show呈现会把对象变为3D点阵图,见下图。

s = vedo.Sphere()
s.ps(10)
s.show()

使用ps

有时不能显示点图。这个可能是系统显卡支持的OpenGL版本太低的缘故,需要更新显卡驱动或安装最新的OpenGL库。

3.1.2 复制属性

c.copy_properties_from(source, deep=True, actor_related=True)
从另一个Points对象复制属性。

3.1.3 颜色设置

c.color(c=False, alpha=None) c.c(color=False, alpha=None)
设置或获取网格对象的颜色。输入None时,会根据活动标量确定颜色。

# 获取颜色,返回RGB颜色数组,值范围0-1。
print(s.color(), c.color())
# 设置颜色
s.color("#00FF00")
c.color("#00FFFF")
print(s.color(), c.color())

代码运行结果:

[0.8627451  0.20784314 0.27058824] [0.13333333 0.54901961 0.22745098]
[0. 1. 0.] [0. 1. 1.]

c.cmap()
提供标量列表和颜色映射表,为每个点或单元格设置颜色。
参数如下:

  • input_cmap,颜色映射表,用于将实数转成颜色。
    可以填三类数据:
    1. VTK的查找表,可直接使用;
    2. matplotlib的线性分段颜色映射表或等价的字符串表示,会先按input_array提供的数值转为对应的颜色查找,颜色数由n_colors决定;
    3. 自定义的颜色序列,自己给定每个颜色,颜色数如果超过256,需要把n_colors改为给定的颜色数。

    自定义颜色序列如果想实现渐变色,可以借用colors模块的build_lutbuild_palette方法。

  • input_array=None,数组名称、数组或VTK数组。其中
  • on='',默认为空字符串,可填pointscells。把颜色映射表对应到点或单元格上的数据上。
  • name='Scalars',为input_array输入的数组设置名字。
  • vmin=None,把标量以给定最小值截断,小于该值的部分按这个值去查找颜色;
  • vmax=None,把标量以给定最大值截断,大于该值的部分按这个值去查找颜色。
  • n_colors=256,使用matplotlib的线性分段颜色映射表或自定义颜色序列时,其中的不同颜色的数目;
  • alpha=1.0,网格的透明度。
    也可以填透明度值的列表,对应到网格的每个顶点上。
    填单个数值时,会先按n_colors的值转为透明度列表,以便和颜色列表对应。因此在自定义颜色表的色数超过n_colors的默认值256时,必须指定到n_colors

    源码中alpha列表长度与n_colors是强关联的。

  • logscale=False,是否使用Logscale

cmap使用示例:

import vedo# 创建3个球体
s1 = vedo.Sphere(r=0.7)
s2 = vedo.Sphere(r=0.7)
s3 = vedo.Sphere(r=0.7)# 取顶点坐标的y坐标,可以使颜色从下到上变化
input_array = s1.vertices[:, 1]
a, b = min(input_array), max(input_array)# 创建vtk查找表,其中的颜色数等于输入颜色数的8倍
vtklut = vedo.colors.build_lut([(a, "#FF0000"), (b, "#00FF00")], interpolate=True)
# 使用vtk查找表上色
s1.cmap(vtklut, input_array)# 使用表示matplotlib内部的颜色映射表的字符串
s2.cmap("hot", input_array)# 创建自定义的渐变色列表,颜色数是球体的点数
palette = vedo.build_palette("#FFFF00", "#00FFFF", len(input_array))# 使用自定义颜色上色,注意需要指明颜色数
s3.cmap(palette, input_array, n_colors=len(input_array))# 展示这3种效果
vedo.show([s1, s2, s3], N=3, size=(900, 300))

展示的效果:
在这里插入图片描述
c.lut_color_at(value)
查看给定值在查找表上对应的颜色和透明度。
cmap操作之后,对象的LUT列表已有内容,因此可以使用这个方法查找颜色。

print(s1.lut_color_at(0.3))
print(s1.lut_color_at(-0.3))

返回颜色格式是numpy数组,4个值代表rgb值和透明度。

[0.26666667 0.73333333 0.         1.        ]
[0.73333333 0.26666667 0.         1.        ]

c.cellcolors
设置或获取网格的每个单元格的颜色。
通过赋值为[R,G,B][R,G,B,A]形式的颜色列表可以改变单元格颜色。列表中的颜色数需要等于网格中的单元格数。颜色和透明度值的取值范围都是[0,255]
也可以赋值为一个颜色字符串或RGBA值。
赋值时会自动创建一个名为CellsRGBA的单元格数组,可以通过c.celldata["CellsRGBA"]访问。

c.pointcolors
设置或获取每个点(网格的每个顶点)的颜色。
也是通过赋值设置颜色,具体要求和c.cellcolors一致。
会自动创建PointsRGBA数组,通过c.pointdata["PointsRGBA"]访问。

通过对cellcolors和pointcolors赋值改变球体的面和点的颜色:

from itertools import cycle, isliceimport vedo# 创建测试球
s1 = vedo.Sphere()
s2 = vedo.Sphere()
# 三种颜色循环产出的迭代器
color_cycle = cycle([(255, 0, 0), (0, 255, 0), (0, 0, 255)])
# 长度等于单元格数的颜色列表
color_list = list(islice(color_cycle, s1.ncells))
s1.cellcolors = color_list# 长度等于点数的颜色列表
color_list = list(islice(color_cycle, s2.npoints))
s2.pointcolors = color_listvedo.show([s1, s2], N=2)

渲染效果:
在这里插入图片描述

3.1.4透明度设置

c.alpha(opacity) c.opacity(alpha=None) 设置网格对象的透明度。

c.force_opaque(value=True)
强制MeshLine或点云显示为不透明的;
c.force_translucent(value=True)
强制MeshLine或点云显示为半透明;
这两个强制方法对show展示的结果没什么影响。

3.2 对象光效

3.2.1 点的形状

c.render_points_as_spheres(value=True)
使点看起来是球体的,或者是方形的。

# 随机生成10个点的坐标
pos_list = np.random.rand(10, 3)
# 创建这些点的对象
points = vedo.Points(pos_list, r=15, c=(1,0,0))
# 设置光效,这样看起来是3D的
points2.lighting("metallic")
# 默认即为球状的,False可以设置为方形的
points.render_points_as_spheres(False)
points.show()

注意下图右侧的方形,不是正方体。
在这里插入图片描述

3.2.2 点的表面光效

c.lighting()
控制物体的表面光效。具体参数如下:

  • style="",预设风格,可选["", default, metallic, plastic, shiny, glossy, ambient, off]
  • ambient=None,取值范围0-1,环境光比例;
  • diffuse=None,取值范围0-1,漫反射光比例;
  • specular=None,取值范围0-1,镜面反射光的比例;
  • specular_power=None,取值范围1-100,镜面反射光的强度;
  • specular_color=None,镜面反射的颜色。默认为对象自身的颜色。style="glossy"时镜面反射颜色值为(1,1,0.99)(接近白色),style="ambient"时镜面反射颜色值为(1,1,1)(纯白色)。
  • metallicity=None,取值范围0-1,金属质感系数;默认0。
  • roughness=None,取值范围0-1,粗糙度系数;默认0.5。

物体的光效主要通过四个参数ambientdiffusespecularspecular_power控制。
设置style="off"时,关闭光效,所填的参数值都不起作用。
默认style=""时,需要使用这些参数填参数控制光效。
其他的style分别有自己的预设参数值,把4个参数对应的值放在列表分别是:

styleambientdiffusespecularspecular_power
default0.11.00.055
metallic0.10.31.010
plastic0.30.40.35
shiny0.20.60.850
glossy0.10.70.990
ambient0.11.00.055

也可以在这些预设参数基础上人为调整。
下图为使用不同style的区别:
不同style的展示
下图左侧为ambientdiffuse不同值组合的效果。右侧是specularspecular_power不同值组合的效果(设置了specular_color="green")。
在这里插入图片描述
c.point_blurring(r=1, alpha=1.0, emissive=False)
设置点模糊。对点应用高斯卷积滤波器。在这种情况下,半径 r 以网格坐标的绝对单位表示。设置自发光后,点的光晕变为自发光。
这个方法存在BUG,暂时无法使用。

3.3 尾随线和投影

3.3.1 尾随线

c.add_trail()
为网格对象添加一条尾随线,可以通过c.trail访问尾随线对象。参数如下:

  • offset=(0, 0, 0),从对象中心点设置一个偏移向量;
  • n=50,尾随线的段数。每次update_trail后,会把上次update_trail时的位置到当前的位置做连线,这算作一段。
  • c=None,尾随线颜色;
  • alpha=1.0,尾随线透明度;
  • lw=2,尾随线的宽度;

c.update_trail()
更新正在移动的物体的尾随线;

使物体运动并更新尾随线:

# 示例点,初始位置为原点
s = vedo.Point((0, 0, 0), r=10)
# 结束点,加了结束点才会展示对应长度的坐标轴
s_end = vedo.Point((20, 0, 0))
# 球体添加尾线
s.add_trail(n=100)# 控制窗口渲染的对象
plt = vedo.show(s, s_end, axes=1, interactive=False)
for i in np.arange(0, 20, 0.01):# 新位置为x轴上下往复运动new_pos = (i, np.sin(i), 0)# 改变物体位置s.pos(new_pos)# 更新尾随线s.update_trail()# 使上述变化在窗口展现plt.render()
# 不自动关闭窗口
plt.interactive()
print(s.trail)

效果图:
运动点的尾随线
代码打印的s.trail信息:
尾随线对象的信息

3.3.2 投影

c.add_shadow()
在三个笛卡尔平面之一上生成网格的影子。
输出一个代表影子的新的网格,可以通过c.shadow访问。
默认会把影子放在边界框的底部的面上。
参数如下:

  • plane,投影的平面,可以是字符串"x""y""z"之一,分别表示x截面、y截面和z截面。也可以是一个vedo.shapes.Plane平面实例。
  • point,如果plane是字符串,point就得填一个表示截距的浮点值。否则,point需要填透视投影的相机位置。
  • direction,斜投影的方向。
  • c=(0.6, 0.6, 0.6)
  • alpha=1
  • culling=0

c.update_shadows()
更新正在移动的物体的影子;

还是使用上面的运动方式,在3个面上创建投影:

# 示例点对象,初始位置为原点
s = vedo.Point((0, 0, 0), r=20)
s_end = vedo.Point((10, 5, 4))
# 在x=2的平面上投影
s.add_shadow('x', 2.0)
# 在y=4的平面上投影
s.add_shadow('y', 4.0)
# 在z=3的平面上投影
s.add_shadow('z', 3.0)# 控制窗口渲染的对象
plt = vedo.show(s, s_end, axes=1, interactive=False, elevation=20)for i in np.arange(0, 8, 0.01):# 沿x轴上下往复运动new_pos = (i, np.sin(i), 0)s.pos(new_pos)s.update_shadows()plt.render()plt.interactive()

3个平面投影效果:
在三个平面上做投影
c.clone2d(size=None, offset=(), scale=None)
把3D的PointsMesh转为2D的演员对象Actor2D并返回。Actor2D对象会悬挂在窗口。

演员对象是VTK中可视化场景中的实体,代表一个可视化对象。演员包含了图形数据的表示信息,并负责在渲染器中正确显示这些数据。

  • size,2D演员对象的缩放大小;替代参数scale
  • offset,演员在范围[-1, 1]中的2d(x, y)坐标。

3.4 给对象附加文字说明

3.4.1 标注

c.labels()
为网格的单元格或点生成值或ID的标签。标签数目大时使用font="VTK"能加快速度。
这些标签的方向和角度会随着物体转动。
参数如下:

  • content=None,填"id""cellid"、数组名或数组编号。也能传递长度等于点或单元格的数目的数组。
  • on='points'"points""cells"
  • scale=None,设置标签的绝对大小。填None会自动确定大小。
  • xrot=0.0,标签绕x轴的旋转角度,单位是度。
  • yrot=0.0,标签绕y轴的旋转角度,单位是度。
  • zrot=0.0,标签绕z轴的旋转角度,单位是度。
  • ratio=1,跳跃比,用来减少大型网格的标签数。
  • precision=None,标签数值的精度。
  • italic=False,是否斜体;
  • font='',字体;
  • justify='',对齐;
  • c='black',颜色;
  • alpha=1.0,透明度;

创建单元格的标注和点的标注,和球体一同渲染:

s1 = vedo.Sphere(res=10, c="#CC8800")
# 标注单元格,compute_normals可以让四周的对象自动对齐,而不会穿模
s1.linewidth(0.1).compute_normals()
labels1 = s1.labels("id", on="cells")s2 = vedo.Sphere(res=10, c="#00CC22")
# 标注点
s2.linewidth(0.1)
labels2 = s2.labels("id", on="points")vedo.show([(s1, labels1, vedo.Text2D("cells id")), (s2, labels2, vedo.Text2D("points id"))], N=2)

标注单元格和点

3.4.2 2D标注

c.labels2d()
为网格的单元格或点创建二维的值或ID的标签。
2D标签的方向、角度是固定的,不会随着物体的拖拽而转动。
参数如下:

  • content="id",填"id""cellid"或数组名。
  • on='points'"points""cells"
  • scale=1.0,设置标签的绝对大小。填None会自动确定大小。
  • precision=4,标签数值的精度。
  • font='Calcao',字体;
  • justify='bottom-left',对齐;
  • frame=False,是否在标签周围画框线;
  • c='black',颜色;
  • bc=None,标签背景色;
  • alpha=1.0,透明度

创建2D标注:

s = vedo.Sphere(res=8, c="#CC8800")
s.linewidth(0.1)
labels = s.labels2d("id")
vedo.show(s, labels, size=(500, 500))

2D标注

c.legend(txt)
预设一个图例文本。效果未知。

3.4.3 气泡说明

c.flagpole()
生成一个用来描述对象的气泡说明。
文字默认会随着物体而转动。可以使用flagpole.follow_camera()方法,让文字一直面向相机。
参数如下:

  • txt=None,展示的文本。默认是文件名或对象名。
  • point=None,旗杆指向的的位置;
  • offset=None,文本相对于point位置的偏离值。
  • s=None,旗杆元素的大小;
  • font='Calco',字体;
  • rounded=True,在文本周围加圆形或方形的文本框;
  • c=None,文本和文本框的颜色;
  • alpha=1.0,文本和文本框的透明度;
  • lw=2,文本框宽度;
  • italic=0.0,文本倾斜度;
  • padding=0.1,边距;

3.4.4 旗标说明

c.flagpost()
生成一个用来描述对象的旗杆说明。旗杆垂直于锚点。
参数如下:

  • txt=None,展示的文本。默认是文件名或对象名。
  • point=None,旗杆标记的锚点位置;
  • offset=None,3D位移或偏移;
  • s=1.0,文字大小;
  • c="k9",文本和线的颜色;
  • bc="k1",标记的背景色;
  • alpha=1,文本和文本框的透明度;
  • lw=0,文本框的粗细;
  • font='Calco',文本字体
  • justify="center-left",内部文本对齐方式;
  • vspacing=1.0,文本行间距;

3.4.5 在窗口悬挂的说明框

c.caption()
为对象创建一个2D的标题,可以随着相机移动。不支持Latex文字。
参数如下:

  • txt=None,要渲染的文本,默认为文件名;
  • point=None,锚点;
  • size=(0.3, 0.15),标题框的宽和高;
  • padding=5,标题框的内边距,单位为像素;
  • font='Calco',字体;
  • justify="center-right",内部文字对齐方式;
  • vspacing=1.0,行间距;
  • c=None,文字和标题框的颜色;
  • alpha=1.0,文字和标题框的透明度;
  • lw=1,框线宽度;
  • ontop=True,置顶2D标题;

对比上述3种风格:

# 3个示例球体
s1 = vedo.Sphere(c="#CCCC00").compute_normals()
s2 = vedo.Sphere(c="#AA00AA").compute_normals()
s3 = vedo.Sphere(c="#00DD00").compute_normals()
# 气泡
fp1 = s1.flagpole("flagpole", c="black")
# 旗标
fp2 = s2.flagpost("flagpost")
# 悬挂说明
fp3 = s3.caption("caption", c="black")vedo.show([(s1, fp1, vedo.Text2D("flagpole", s=3)),(s2, fp2, vedo.Text2D("flagpost", s=3)),(s3, fp3, vedo.Text2D("caption", s=3))], N=3, size=(1500, 500))

3种风格的说明文字

相关文章:

python的3D可视化库vedo-3 (visual模块)点对象的属性、光效、附注

文章目录 3 PointsVisual的方法3.1 对象属性3.1.1 顶点大小3.1.2 复制属性3.1.3 颜色设置3.1.4透明度设置 3.2 对象光效3.2.1 点的形状3.2.2 点的表面光效 3.3 尾随线和投影3.3.1 尾随线3.3.2 投影 3.4 给对象附加文字说明3.4.1 标注3.4.2 2D标注3.4.3 气泡说明3.4.4 旗标说明3…...

llamaindex实战-ChatEngine-ReAct Agent模式

概述 ReAct 是一种基于Agent的聊天模式,构建在数据查询引擎之上。对于每次聊天交互,代理都会进入一个 ReAct 循环: 首先决定是否使用查询引擎工具并提出适当的输入 (可选)使用查询引擎工具并观察其输出 决定是否重复…...

redis快速进门

、数据库类型认识 关系型数据库 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。 SQL 语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行…...

从0开始linux(39)——线程(2)线程控制

欢迎来到博主的专栏:从0开始linux 博主ID:代码小豪 文章目录 线程创建线程标识符线程参数多线程竞争资源 回收线程detach 线程退出pthread_cancel 线程创建 线程创建的函数为pthread_create。该函数是包含在posix线程库当中,posix线程是C语言…...

International Journal of Medical Informatics投稿经历时间节点

20240423,完成投稿 20240612,按编辑要求修改后再投, with editor 20240613,under review,completed 0, accepted 0, invitation 2. 20240620, under review,completed 0, accepted 1, invitation 2. 20240626, unde…...

BUUCTF—Reverse—Java逆向解密(10)

程序员小张不小心弄丢了加密文件用的秘钥,已知还好小张曾经编写了一个秘钥验证算法,聪明的你能帮小张找到秘钥吗? 注意:得到的 flag 请包上 flag{} 提交 需要用专门的Java反编译软件:jd-gui 下载文件,发现是个class文…...

CLIP-MMA: Multi-Modal Adapter for Vision-Language Models

当前的问题 CLIP-Adapter仅单独调整图像和文本嵌入,忽略了不同模态之间的交互作用。此外,适应性参数容易过拟合训练数据,导致新任务泛化能力的损失。 动机 图1所示。多模态适配器说明。 通过一种基于注意力的 Adapter ,作者称之…...

三维扫描仪-3d扫描建模设备自动检测尺寸

在现代工业制造领域,三维扫描仪已成为实现高精度尺寸检测的关键设备。CASAIM自动化智能检测系统以其自动化三维立体扫描技术,为产品尺寸的自动检测提供了高效、可靠的解决方案。 CASAIM自动化智能检测系统通过非接触式测量方式,通过激光扫描…...

vue3+ant design vue实现日期选择器默认显示当前年,并限制用户只能选择当前年及之前~

1、思路:之前想拿当前年直接做赋值操作,实际上是行不通的,因为组件本身有数据格式限制,会出现报错,然后索性直接获取当前日期(YYYY-MM-DD)赋值给日期组件,这样不管你用的是年&#x…...

【electron-vite】搭建electron+vue3框架基础

一、拉取项目 electron-vite 中文文档地址: https://cn-evite.netlify.app/guide/ 官网网址:https://evite.netlify.app/ 版本 vue版本:vue3 构建工具:vite 框架类型:Electron JS语法:TypeScript &…...

05《存储器层次结构与接口》计算机组成与体系结构 系列课

目录 存储器层次结构概述 层次结构的定义 存储器的排名 存储器接口 处理器与存储器的速度匹配 存储器接口的定义 存储器访问命中率 两种接口 第1种方式:并行 命中率的计算 存储器访问时间 第2种方式:逐级 结语 大家好,欢迎回来。…...

elasticsearch报错fully-formed single-node cluster with cluster UUID

1.问题描述 k8s集群内部署的es中间件起不来,查看日志发现如下警告,节点发现功能开启,但是目前我是单节点服务,所以尝试编辑sts将节点发现功能去掉或者在部署时将你的sts的yaml文件和chart文件修改重新部署以去掉该功能 {"t…...

Milvus×Florence:一文读懂如何构建多任务视觉模型

近两年来多任务学习(Multi-task learning)正取代传统的单任务学习(single-task learning),逐渐成为人工智能领域的主流研究方向。其原因在于,多任务学习可以让我们以最少的人力投入,获得尽可能多…...

DAPP

02-DAPP 1 啥是 DApp? DApp,部署在链上的去中心化的应用。 DApp 是开放源代码,能运行在分布式网络上,通过网络中不同对等节点相互通信进行去中心化操作的应用。 DAPP 开放源代码,才能获得人的信任。如比特币&#xff…...

生产环境中,nginx 最多可以代理多少台服务器,这个应该考虑哪些参数 ?怎么计算呢

生产环境中,nginx 最多可以代理多少台服务器,这个应该考虑哪些参数 ?怎么计算呢 关键参数计算方法评估步骤总结 在生产环境中,Nginx最多可以代理的服务器数量并没有一个固定的限制,它取决于多个因素,包括Ng…...

【深度学习|目标跟踪】StrongSORT 详解(以及StrongSORT++)

StrongSort详解 1、论文及源码2、DeepSORT回顾3、StrongSORT的EMA4、StrongSORT的NSA Kalman5、StrongSORT的MC6、StrongSORT的BOT特征提取器7、StrongSORT的AFLink8、StrongSORT的GSI模块 1、论文及源码 论文地址:https://arxiv.org/pdf/2202.13514 源码地址&#…...

23种设计模式-原型(Prototype)设计模式

文章目录 一.什么是原型设计模式?二.原型模式的特点三.原型模式的结构四.原型模式的优缺点五.原型模式的 C 实现六.原型模式的 Java 实现七. 代码解析八.总结 类图: 原型设计模式类图 一.什么是原型设计模式? 原型模式(Prototype…...

Qt—QLineEdit 使用总结

文章参考:Qt—QLineEdit 使用总结 一、简述 QLineEdit是一个单行文本编辑控件。 使用者可以通过很多函数,输入和编辑单行文本,比如撤销、恢复、剪切、粘贴以及拖放等。 通过改变 QLineEdit 的 echoMode() ,可以设置其属性,比如以密码的形式输入。 文本的长度可以由 m…...

go-zero使用自定义模板实现统一格式的 body 响应

前提 go环境的配置、goctl的安装、go-zero的基本使用默认都会 需求 go-zero框架中,默认使用goctl命令生成的代码并没有统一响应格式,现在使用自定义模板实现统一响应格式: {"code": 0,"msg": "OK","d…...

BUGKU printf

整体思路 实现循环-->获取libc版本和system函数地址->将strcpy的got表项修改为system并获得shell 第一步:实现循环 从汇编语句可以看出,在每次循环结束时若0x201700处的值是否大于1则会继续循环。 encode1会将编码后的结果保存至0x2015c0处&am…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...