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

Unity--Cubism Live2D模型使用

了解LIVE2D在unity的使用--前提记录

了解各个组件的作用

Live2D Manuals & Tutorials

这些文件都是重要的控制动画参数的

Cubism Editor是编辑Live2D的工具,而导出的数据的类型,需要满足以上的条件

SDK中包含的Cubism的Importer会自动生成一个Prefab。
这个生成的Prefab是转换为Unity可以处理Live2D模型的版本。
可以从Hierarchy视图中操作参数和部件的显示。

了解一下Live2D的制作流程

1立绘分层_哔哩哔哩_bilibili

可以设置阴影、透明度、将人物分为多个部分部分,每个部分都可以有自己的变化曲线

达成最终的呈现效果,所以在Unity调动2D模型的时候,这些很多的变化要如何规范,这是一个盲区

旋转变形器  曲面  父子集  流畅度(带动周围格子变形)

透明度设置为0,需要切换发型则将新发型设置为1,原来的设置为0

可以整体依然用同一套物理

制作过程中也会存在分文件夹制作

对单个头发的部件控制

这样看,SDK的作用确实很重要了,把这些本来规定在Editor里的规则,搬运到unity里得到控制

头部的移动,但头发作为子物体,通过调整,达到保持了重力的垂直效果

眼部的闭合也是通过一个0~1的参数就可以控制变化

睫毛作为部件被变化曲线连带

闭眼不失去高光点

微笑,左右眼开闭,以及闭眼变成微笑融合的情况

这么复杂的变化,unity不能在自己的引擎里控制每一个部分的参数变化

所以需要外部提供变化的规则文件,就像给出多个int  ,每个int 只能控制一个范围的变化,但凑起来可以达到在Editor里展现的效果

加速度,scale变化,xy的位置绑定,转换到具体的每一个unity物体

连带的曲面等等,则通过额外的连动计算脚本控制

头部的转向控制,xy控制,z控制大小

图片只需要一张就可以,其余的都是Editor下的对图片的各种物理变化

轻微的拉伸是合理的,并不会造成视觉上的怪异

里面也会有喷枪等额外添加的图片层,可能是贴在原图上,可能是新建资源,

但在unity里,如果是前者无变化,是后者则变化较大,

会涉及到新图的放置问题(但Editor也可以转换成参数控制显隐,以及像转动头部一样的xy控制,最后的模型的处理规则传递到SDK里,应该不会有什么变化)

最后的呈现效果真的很惊人,,资源是仅仅一个图集,但最后呈现的效果非常广,好强,,

每个部件的变化都有自己的 参数可以提供输出,,

每个部件也可以接受别的部件的输出 影响自身部件的变化倍率,变化幅度等等

9导出和按键表情包_哔哩哔哩_bilibili

最后一课导出,

每一个表情,衣服的透明度都单独调整为1,之前的设置为0,然后导出一个文件

每次都导出,每一个透明度替换状态对应一个按钮,就可以在电脑键盘上对应切换状态

---------------

回到unity控制Live2D

在Unity项目模型上 播放从Cubism Editor 输出的嵌入动画文件

.motion3.json在载入时会自动转变Unity的动画格式AnimationClip

从Cubism Editor输出的嵌入动态文件连同包含它的文件夹拖放到Project视图中

经过该操作,AnimationClip将从.motion3.json生成、、也可以为生成的AnimationClip设置Loop

AnimationClip以曲线的形式拥有设置为模型各参数的值,此曲线上设置的参数的属性位于模型Prefab以下层次结构中。

Cubism Part 控制 Opacity透明度

Cubism Parameters则是 控制变化的参数

指定这些属性,则可以使用在Unity上创建的AnimationClip或程序

操作模型的参数和部件的不透明度

Cubism的 动画格式载入项目时会转变为AnimationClip,所以可以使用Animator管理 过渡和混合多个动态

在运行时导入模型 | SDK 教程 | Live2D Manuals & Tutorials

在3.0或更高版本中,处理已经完全重新设计,使用CusbimModel3Json.LoadAtPath导入模型后,调用.ToModel()即可显示模型。
另外,创建并显示Prefab,无需从脚本中编写.update().draw()的更新绘制,绘制也会更新。

自己用c#脚本实现对导入模型的“转unity”

在运行时导入模型 | SDK 教程 | Live2D Manuals & Tutorials

这一块附近的内容都相对关键一些,先找找现在有没有更简单的工具可以帮我实现,但我还没找过,关于这些复杂的控制先暂时停下

---

回到制作层面,现在可以接入Deepseek的API来回答出问题了

(这里是future,,还是打算用GPT的API了,)

完成了对话的内容,接下来需要达到的效果是什么样的:

Live2D只是交互的方式,是说话或Idle 的时候可以表现出的动画控制

接下来可以填入什么进去?

1.语音模型,达到朗读发音

....

---

再次回到对Live2D的模型unity里进行控制

Live2D Cubism 模型有 多个参数 用来控制 表情、动作、变形。常见参数:

参数名功能
ParamAngleX头部左右旋转
ParamAngleY头部上下旋转
ParamAngleZ头部歪斜(倾斜)
ParamEyeLOpen左眼开合(0=闭眼, 1=睁眼)
ParamEyeROpen右眼开合
ParamEyeBallX眼球左右移动
ParamEyeBallY眼球上下移动
ParamMouthOpenY嘴巴开合(0=闭嘴, 1=张嘴)
ParamMouthForm嘴型(-1=悲伤, 1=笑)
ParamBodyAngleX身体左右旋转
ParamBodyAngleY身体上下移动
简单测试
public class Live2DControl : MonoBehaviour
{private CubismModel model;  // Live2D 模型void Start(){model = GetComponent<CubismModel>();  // 获取模型组件}
}打印所有参数
void Start()
{model = GetComponent<CubismModel>();foreach (var param in model.Parameters){Debug.Log("参数名: " + param.Id + ",当前值: " + param.Value);}
}

52个参数,这个还算是简单的模型

.要做到可以控制各个参数,像虚拟主播一样:

EyeBlink | Cubism SDK 手册 | Live2D Manuals & Tutorials

---

CubismEyeBlinkController.Refresh()

CubismEyeBlinkController.EyeOpening

可以通过操作CubismEyeBlinkController.EyeOpening的值,将值应用于眨眼的参数

CubismEyeBlinkController在每帧的LateUpdate()时机

将CubismEyeBlinkController.EyeOpening的值应用于CubismEyeBlinkParameter标记的参数

Cubism SDK for Unity中,各组件的执行顺序由CubismUpdateController控制

---

刚才直接去看了Sample自带的场景,发现了一些可以直接引用的组件,达到实现追踪的效果

target就是挂载的游戏对象,会整体跟随移动

那大致要怎么控制的框架就有了

大致框架理解之后,Sample里的例子就很容易知道重点在哪一部分了

lookAt的动画变化,并不是由unity的animator控制的,此时挂在模型上的animator是空的

导入进来的Live2D模型实际上和 unity里的Motion调整动作没有关系,,或者说在导入之前,Editor里就已经把物理规则定的很标准,是不允许在unity里乱调不暴露出来的重要参数的

这些各种Controller就是整理好的,可以在unity中暴露被修改的部分

unity才是扒拉人家模型,强行想用到自己的引擎里,但Editor对这方面的规定比较完善和硬核,所以unity能改的地方并不多,

状态机可以做的,是安排各种条件,对应各种动作表情(这些也是Editor规定好的,不会为了unity bro去额外改什么规则),这样就可以把效果的控制全转移到C#的代码逻辑上了

 这些动作也和状态机没有一点关系

但是参数的修改有时候在unity上没有很及时的同步,不知道是不是适配原因

这些动作的切换是Motion Controller控制的,但是layer count没有很及时的变换(unity也是够卑微 )

Fade Controller,应该就是动作之间切换的时候,透明度逐渐调为0的过程

所以需要list确保淡去哪个,显示哪个

这个动画就运用了状态机,让他自己切换播放

可以确定了,Live2D在unity里就是不能通过Animation播放这些动作的

但是Animation里的 Clip文件,对每个参数的变化的都是有记录的,这些内部参数又是不会暴露给unity的,所以无法通过Animation窗口查看,

但可以在Game窗口里,当状态切换的时候,会把对应的动作调用出来得到展示

每个状态上也挂了对应的观察脚本(应该是控制透明度切换,更换新的动作),并没有把控制权交给unity

进这个脚本里大致看看结构,也可以差不多的感觉到对切换的监控和准备切换为新状态

Cubism的射线检测

一个测试脚本,拖入模型之后,就可以检测到碰撞(也是Sample样本里的)

--------

animator又在一些时候有用,,

OW(Original Workflow,原始工作流)是 Live2D Cubism SDK for Unity 中的一部分,它提供了一系列 组件脚本,用于管理 Live2D 模型的参数、动作、表情、姿势让开发者可以通过 代码 轻松控制 Live2D 模型的各种表现

你理解得 基本正确——OW 主要是 暴露出可以操作的参数,让开发者可以通过 C# 修改参数 以控制 Live2D 角色的各种行为,比如 表情、动作、姿势、过渡效果

OW(Original Workflow)目录下的文件 主要包含以下功能:

文件作用
CubismParameterStore存储参数值,可用于保存和恢复 Live2D 模型状态
CubismUpdateController管理参数更新,确保模型的参数随时间变化
Expression管理表情(类似 happy.face3.json 这样的表情文件)
Motion管理动作(如 Idle.motion3.json 等)
MotionFade处理动画淡入淡出,让不同的动画过渡更自然
Pose管理 Live2D 角色的姿势,用于防止角色姿势不自然

Expression | Cubism SDK 手册 | Live2D Manuals & Tutorials

Expression的文件创建,使用到Live2D上

下载了模型之后,检查有没有生成.asset文件(unity形式的expression和motion文件,下方的文本是json文件,是Cubism Editor 里做好的原始文件,unity并不能控制)

了解各个系统在unity中的使用之前,首先要清楚,unity在Live2D模型的控制力是很卑微的(在以后学习到别的资源引用的时候应该也会这样),

Editor做好的模型都在SDK里几乎自己解决了,给unity也不想unity乱用,所以暴露出来的可控区域很少,基本上OW文档里面说了什么,就只能用这些

Live2D 表情系统(Expression)


1. Expression

Live2D Expression 负责 控制表情,主要用于 眨眼、微笑、皱眉、惊讶短时间的动态变化

  • 通过 .exp3.json 文件定义表情参数(类似于“开心”、“惊讶”)。
  • 通过 CubismExpressionController 播放表情。
  • 通过 加算(Additive)、覆盖(Override)、正片叠底(Multiply) 计算表情对参数的影响。
  • Unity 的 Animator 没有“正片叠底”功能,所以需要 Expression 系统 处理表情混合。

2. 使用前提

Unity 里使用 Expression(表情系统) 之前,需要确保:

  1. Live2D 预制体(Prefab)已经包含---SDK has done commonly
    • CubismUpdateController
    • CubismParameterStore
  2. 有表情文件(.exp3.json)
    • 需要从 Live2D Editor 导出,并转换成 Unity 可用的 .exp3.asset 文件。
  3. 表情列表(.expressionList.asset
    • 管理多个表情,类似于“表情索引”。

3. 完整流程

1. 创建 .exp3.asset(表情数据)---SDK has done commonly

.exp3.asset.exp3.jsonScriptableObject 版本,用于存储解析后的表情信息。

  • 解析 .exp3.json,转换为 CubismExpressionData
  • 创建 .exp3.asset
  • 不要手动修改 .exp3.asset,否则可能导致异常。
代码示例
// 解析 .exp3.json 并创建 .exp3.asset
expressionData = CubismExpressionData.CreateInstance(ExpressionJson);
AssetDatabase.CreateAsset(expressionData, AssetPath.Replace(".exp3.json", ".exp3.asset"));// 更新 Unity 资源库
EditorUtility.SetDirty(expressionData);

 2. 创建 .expressionList.asset(表情列表)---SDK has done commonly

.expressionList.asset管理表情 .exp3.asset 的列表

  • 这个文件 记录了当前模型支持的所有表情
  • 使用 CubismExpressionController 通过 索引(CurrentExpressionIndex) 选择要播放的表情。
代码示例
// 获取现有的表情列表
var expressionList = AssetDatabase.LoadAssetAtPath<CubismExpressionList>(expressionListPath);// 如果不存在,创建新资产
AssetDatabase.CreateAsset(expressionList, expressionListPath);// 更新 Unity 资源
EditorUtility.SetDirty(expressionList);

 3. 追加 .exp3.asset.expressionList.asset---SDK has done commonly

每个模型的 .expressionList.asset 都需要绑定 .exp3.asset(表情数据)

代码示例
// 追加新的 .exp3.asset
expressionIndex = expressionList.CubismExpressionObjects.Length;
Array.Resize(ref expressionList.CubismExpressionObjects, expressionIndex + 1);
expressionList.CubismExpressionObjects[expressionIndex] = expressionData;// 更新 Unity 资源库
EditorUtility.SetDirty(expressionList);

 4. 通过 CubismExpressionController 播放表情

Unity 运行时,可以通过 CubismExpressionController.CurrentExpressionIndex 切换表情

代码示例
using Live2D.Cubism.Framework.Expression;
using UnityEngine;public class ExpressionController : MonoBehaviour
{private CubismExpressionController expressionController;void Start(){expressionController = GetComponent<CubismExpressionController>();}void Update(){if (Input.GetKeyDown(KeyCode.H)){expressionController.CurrentExpressionIndex = 0;  // 播放第一个表情}if (Input.GetKeyDown(KeyCode.S)){expressionController.CurrentExpressionIndex = 1;  // 播放第二个表情}}
}

🔹 说明

  • CurrentExpressionIndex = 0 → 切换到 happy.exp3.asset
  • CurrentExpressionIndex = 1 → 切换到 sad.exp3.asset
  • 必须 绑定 CubismExpressionController 组件。

 5. 让表情有“淡入淡出”效果

每个表情有:

  • FadeInTime淡入时间
  • FadeOutTime淡出时间

切换表情时,应该 设置上一个表情的 ExpressionEndTime,让它正确淡出。

代码示例
// 让上一个表情淡出
if (_playingExpressions.Count > 0)
{var playingExpression = _playingExpressions[_playingExpressions.Count - 1];playingExpression.ExpressionEndTime = playingExpression.ExpressionUserTime + playingExpression.FadeOutTime;_playingExpressions[_playingExpressions.Count - 1] = playingExpression; 
}

🔹 这个代码会 自动计算表情的过渡时间,让表情更流畅。


 6. 计算表情并应用

表情在每帧更新时,系统会计算新表情的值,并应用到 CubismParameter 里。

  • 表情数据结构
    字段作用
    Type.exp3.json 类型
    FadeInTime表情淡入时间
    FadeOutTime表情淡出时间
    Weight影响权重(0 ~ 1)
    ExpressionUserTime播放时间
    ExpressionEndTime退出时间
    Destinations影响的 Live2D 参数
    Value表情应用到参数的值
    Blend计算方式(Override、Additive、Multiply

Live2D SDK 通过 CubismExpressionController.OnLateUpdate() 计算表情参数的最终值。

必须在 ParameterStore.SaveParameters() 之后应用表情,否则会导致参数错误。


测试表情的代码

using Live2D.Cubism.Framework.Expression;
using UnityEngine;public class ExpressionController : MonoBehaviour
{private CubismExpressionController expressionController;void Start(){expressionController = GetComponent<CubismExpressionController>();}void Update(){if (Input.GetKeyDown(KeyCode.E)){expressionController.CurrentExpressionIndex++;if (expressionController.CurrentExpressionIndex >= expressionController.ExpressionsList.CubismExpressionObjects.Length){expressionController.CurrentExpressionIndex = -1;}Debug.Log(expressionController.CurrentExpressionIndex);}}
}

模型的Render错位

模型导入到LIVE2D场景之后,会出现这样的问题,因为Editor里的图层顺序安排,在unity里并不适用,要在RenderController里设置后-前 Order,这样部件的排序(大概率是SDK做的Order)就可以改掉unity的展示问题

功能实现记录

梳理一下自己的需求,视线追踪要实现,自由切换表情,,,(这个可能还要结合一下语音内容什么的,已经有动作了,表情要怎么处理,,,这个还得考虑)

--------------

AnimationClip以曲线的形式拥有设置为模型各参数的值,此曲线上设置的参数的属性位于模型Prefab以下层次结构中。(Value在Inspector中隐藏)

[模型根]/Parameters/[参数ID]/Cubism Parameters/Value

----

SDK会带来自己的状态机文件,和动画clip

这些clip都是json转出来的适用于unity的动作控制

clip动画和对模型的控制的其他组件功能是分开的,不会产生重叠的问题

通过使用Motion,您可以从脚本播放动画,而无需使用Unity的Mecanim构建状态机

要使用Motion,您需要CubismFadeController组件和Unity的Animator。
如果在Animator组件中设置AnimatorController,则不会播放Motion,而是播放AnimatorController的动画

但加上也是可以的,只不过和Clip的动画会有一些出入,比如覆盖clip里规定 的各个参数变化,眼睛一直保持某个状态不变等

加于不加并不冲突

太多类型如果都去记,就很消耗时间,var这个类型前缀,用的很多是有原因的

注意,Center是target 对象身上的中心,是可以不拖的,默认就把target物体的中心做中心来计算

(因为是鼠标,所以可能这个地方的lookAt功能并不是很能体现出Center的位置重要性) 

参数中,将名为CubismLookParameter的组件附加到希望跟踪的gameobject

最后,准备要跟踪的对象。

在CubismLookController组件的[Target]中,设置实装[ICubismLookTarget]接口的组件。

加look parameter组件一定要加载对应的gameobject上

视线追踪和点击头、身体的随机动画是做好了

----

关于这个自动眨眼,一些模型会自带的做上去,附加上Controller

mao这个模型就附带了,也不用加auto blink input了

-----

口形同步设置

关于blend mode,大多默认是multiply,这样就是如果有别的部分在操作参数,自己则不使用参数

additive就是附加,“正片叠底”

override就是完全控制该blend下的全部参数

MouthMovement包含作为输入范例,根据AudioSource的音量和Sin波操作嘴巴开合值的组件。

此次附加一个名为 CubismAudioMouthInput 的组件,以便您可以从AudioSource设置值。

 Sampling Quality:设置要采样的音量的精度。设置的阶数越低,精度越高,计算负载越大。

Gain:设置以多少倍的值处理采样音量。1为等倍

 Smoothing:设置从音量计算的开/关值平滑化多少。值越高,则越平滑,但也会增加计算负载

最后,要获取音量,将AudioSource拖入 CubismAudioMouthInput的Audio Input 

-----

最后,就是接入语音模型了,也是不怎么了解的领域,先了解一下吧

相关文章:

Unity--Cubism Live2D模型使用

了解LIVE2D在unity的使用--前提记录 了解各个组件的作用 Live2D Manuals & Tutorials 这些文件都是重要的控制动画参数的 Cubism Editor是编辑Live2D的工具&#xff0c;而导出的数据的类型&#xff0c;需要满足以上的条件 SDK中包含的Cubism的Importer会自动生成一个Pref…...

Day4 C语言与画面显示练习

文章目录 1. harib01a例程2. harib01b例程3. harib01e例程4. harib01f例程5. harib01h例程 1. harib01a例程 上一章主要是将画面搞成黑屏&#xff0c;如果期望做点什么图案&#xff0c;只需要再VRAM里写点什么就好了&#xff0c;使用nask汇编语言实现一个函数write_mem8&#…...

【redis】全局命令exists、del、expire、ttl(惰性删除和定期删除)

exists——判定 key 是否存在 语法&#xff1a; exists key [key...] # 返回值&#xff1a;key 存在的个数针对多个 key 来说&#xff0c;是非常有用的时间复杂度 O ( 1 ) O(1) O(1) Redis 组织这些 key 就是按照哈希表的方式来组织的。Redis 支持很多数据结构指的是 value …...

VUE3项目的文档结构分析

1. Vue 3 项目的文档结构 Vue 3 项目通常基于 Vue CLI 或 Vite 等工具创建&#xff0c;其文档结构如下&#xff1a; 常见目录结构 my-vue-project/ ├── public/ # 静态资源目录 │ ├── index.html # 入口页面 ├── src/ …...

Linux笔记---自定义shell

目录 前言 1. 程序框架 2. 打印命令行提示符 2.1 获取用户名(GetUserName) 2.2 获取主机名(GetHostName) 2.3 获取工作目录(GetPwd) 3. 获取命令行输入 4. 判断是否有重定向 5. 解析命令行 6. 内建命令 6.1 内建命令的特点 6.2 常见内建命令 6.3 内建命令 vs 外部命…...

步进电机软件细分算法解析与实践指南

1. 步进电机细分技术概述 步进电机是一种将电脉冲信号转换为角位移的执行机构&#xff0c;其基本运动单位为步距角。传统步进电机的步距角通常为 1.8&#xff08;对应 200 步 / 转&#xff09;&#xff0c;但在高精度定位场景下&#xff0c;这种分辨率已无法满足需求。细分技术…...

mapbox开发小技巧

自定义图标 // 1、单个图标 const url ./static/assets/symbols/code24x24/VIDEO.png // 图标路径 map.loadImage(url ,(error, image) > {if (error) throw errormap.addImage(video-icon, image) })// 2、雪碧图利用canvas // json和png图片 function getStyleImage(fil…...

ApoorvCTF Rust语言逆向实战

上周参加了国外的比赛&#xff0c;名称叫&#xff1a;ApoorvCTF 看一下老外的比赛跟我们有什么不同&#xff0c;然后我根据国内比赛对比发现&#xff0c;他们考点还是很有意思的&#xff0c;反正都是逆向&#xff0c;哈哈哈 Rusty Vault 题目描述&#xff1a; In the heart…...

IntersectionObserver接口介绍

IntersectionObserver API 是浏览器提供的一个用于异步观察目标元素与其祖先元素或视口&#xff08;Viewport&#xff09;交叉状态&#xff08;即是否进入或离开视口&#xff09;的接口。在 IntersectionObserver 出现之前&#xff0c;开发者通常需要通过监听 scroll 事件或使用…...

AI壁纸进阶宝典:让创作效率与质量飞速提升的法门

在数字化创意浪潮席卷的当下&#xff0c;AI壁纸以其独特魅力和无限可能&#xff0c;吸引了众多设计爱好者和专业设计师的目光。然而&#xff0c;如何在众多创作者中脱颖而出&#xff0c;打造令人惊艳的AI壁纸呢&#xff1f;本文将从基础到进阶&#xff0c;全方位剖析AI壁纸创作…...

Releases(发布) 和 版本管理 是两个紧密相关的概念

在软件开发和维护中,Releases(发布) 和 版本管理 是两个紧密相关的概念,特别是在开源项目或企业软件开发中。 1. Releases(发布) Release 是指软件的一个正式发布版本,通常经过开发、测试、修复 Bug,并被认为是足够稳定和可用于生产环境的版本。 主要特点 里程碑:通…...

从零开始用react + tailwindcss + express + mongodb实现一个聊天程序(十二) socketio 消息处理

1.后端 在message.controller.js中 在sendMessage方法中 每当我们发送消息 需要socketio把这个消息转发给 接收人 加入转发逻辑 // 把消息发给指定的用户的socket const receiverSocketId getReceiverSocketId(receiverId); if(receiverSocketId) { io.to(receiverSocket…...

【运维篇】KubeSphere-02(经验汇总)

一、使用建议 1.对于数据库、对像存储比较重的要不能丢失&#xff0c;有异地存储备份需求的有状态服务&#xff0c;不建议采用k8s进行部署&#xff0c;会导致运维难度更大。 2.对于中间件如redis、MQ、harbor、seata、nacos、zookeeper可采用k8s部署。 3.对于无状态服务tomc…...

8.大模型微调学习案例:基于 Hugging Face、8位量化与 LoRA 适配器的方案

文章目录 一、引言二、数据预处理与构建数据集2.1 加载 JSON 数据2.2 构造训练样本2.3 构建 Hugging Face 数据集与分词2.4 添加标签字段2.5 划分训练集与验证集 三、模型加载、量化与适配器配置3.1 配置设备与显存使用3.2 配置 8 位量化3.3 加载预训练模型并映射设备3.4 为 8 …...

用分页干掉显存浪费!聊聊VLLM的PagedAttention

不知道你在部署模型的时候&#xff0c;有没有经历过这样的抓狂时刻——跑大模型时显卡显存明明没有占满&#xff0c;程序却报错OOM&#xff08;内存不足&#xff09;&#xff1f;表面看是显存不足&#xff0c;背后其实是KVCache碎片化和重复存储这个"隐形刺客"在作祟…...

Python——地图可视化

分级统计地图&#xff1a;一般使用同一种颜色表示一个区域的属性&#xff0c;常用与选举和人口普查数据的可视化。对于颜色的选择可以使用单色渐变系、双向渐变系、完整色谱变化。 使用这类颜色渐变进行填充存在的问题&#xff1a; 使用这类方法适用于数据密集分布的区域&#…...

3.8【Q】cv

这个draw_line函数的逻辑和功能是什么&#xff1f;代码思路是什么&#xff1f;怎么写的&#xff1f; 这个t是什么&#xff1f;t.v[0]和t.v[1],[2]又是什么&#xff1f; void rst::rasterizer::draw(rst::pos_buf_id pos_buffer, rst::ind_buf_id ind_buffer, rst::Primitive ty…...

LeetCode 热题 100_字符串解码(71_394_中等_C++)(栈)

LeetCode 热题 100_字符串解码&#xff08;71_394&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;栈&#xff09;&#xff1a; 代码实现代码实现&#xff08;栈&#xff09;&#xff1a;以思路一为例进行调…...

基于大模型预测的新型隐球菌脑膜炎综合诊疗研究报告

目录 一、引言 1.1 研究背景与目的 1.2 研究现状综述 二、大模型预测原理及数据基础 2.1 大模型技术简介 2.2 数据收集与预处理 2.3 模型训练与验证 三、术前风险预测与准备 3.1 病情评估指标确定 3.2 手术方案制定 3.3 麻醉方案规划 四、术中监测与应对 4.1 实时…...

SQL Server核心知识总结

SQL Server核心知识总结 &#x1f3af; 本文总结了SQL Server核心知识点,每个主题都提供实际可运行的示例代码。 一、SQL Server基础精要 1. 数据库核心操作 -- 1. 创建数据库&#xff08;核心配置&#xff09; CREATE DATABASE 学生管理系统 ON PRIMARY (NAME 学生管理系统…...

浏览器WEB播放RTSP

注意&#xff1a;浏览器不能直接播放RTSP&#xff0c;必须转换后才能播放。这一点所有的播放都是如此。 参考 https://github.com/kyriesent/node-rtsp-stream GitHub - phoboslab/jsmpeg: MPEG1 Video Decoder in JavaScript 相关文件方便下载 https://download.csdn.net…...

登录固定账号和密码:

接口文档 【apifox】面试宝典 个人中心-保存用户数据信息 - 教学练测项目-面试宝典-鸿蒙 登录固定账号和密码&#xff1a; 账号&#xff1a;hmheima 密码&#xff1a;Hmheima%123 UI设计稿 【腾讯 CoDesign】面试宝典 CoDesign - 腾讯自研设计协作平台 访问密码&#xff1…...

深度学习/强化学习调参技巧

深度调优策略 1. 学习率调整 技巧&#xff1a;学习率是最重要的超参数之一。过大可能导致训练不稳定&#xff0c;过小则收敛速度慢。可以使用学习率衰减&#xff08;Learning Rate Decay&#xff09;或自适应学习率方法&#xff08;如Adam、RMSprop&#xff09;来动态调整学习…...

Java常用正则表达式(身份证号、邮箱、手机号)格式校验

目录 身份证号的正则表达式 代码解释 正则表达式 方法 isValidIDCard 注意事项 校验邮箱的正则表达式 代码解释 正则表达式 方法 isValidEmail 注意事项 手机号的正则表达式 中国大陆手机号校验&#xff08;支持空字符串&#xff09; 代码解释 通用手机号校验&am…...

1.12.信息系统的分类【ES】

专家系统&#xff08;ES&#xff09;技术架构深度解析 一、ES核心定义 &#x1f9e0; 智能决策中枢 由三大核心能力构建的领域专家模拟系统&#xff1a; 存储专家级领域知识&#xff08;10^4规则量级&#xff09;支持不确定性推理&#xff08;置信度>85%&#xff09;动态…...

c语言程序设计--(结构体、共用体)冲刺考研复试中的面试问答,来看看我是怎么回答的吧!

结构体 1、谈谈你对结构体的理解。 答&#xff0c;首先在结构的基础知识上&#xff0c;结构是一些值的集合&#xff0c;这些值称为成员变量结构的每个成员可以是不同类型的变量。结构体其实就是把&#xff08;一些单一类型的数据&#xff09;不同类型的数据组合在一起的做法便…...

闭包:JavaScript 中的隐形大杀器

你可能已经在很多地方听说过闭包这个词&#xff0c;尤其是涉及到 JavaScript 的作用域和异步操作时。闭包是 JavaScript 中非常核心的概念&#xff0c;然而它又非常容易让开发者感到困惑。今天我们就来深入剖析闭包&#xff0c;帮助你真正理解它的工作原理&#xff0c;以及如何…...

分布式锁—7.Curator的分布式锁一

大纲 1.Curator的可重入锁的源码 2.Curator的非可重入锁的源码 3.Curator的可重入读写锁的源码 4.Curator的MultiLock源码 5.Curator的Semaphore源码 1.Curator的可重入锁的源码 (1)InterProcessMutex获取分布式锁 (2)InterProcessMutex的初始化 (3)InterProcessMutex.…...

linux---天气爬虫

代码概述 这段代码实现了一个天气查询系统&#xff0c;支持实时天气、未来天气和历史天气查询。用户可以通过终端菜单选择查询类型&#xff0c;并输入城市名称来获取相应的天气信息。程序通过 TCP 连接发送 HTTP 请求&#xff0c;并解析返回的 JSON 数据来展示天气信息。 #in…...

C++蓝桥杯基础篇(九)

片头 嗨&#xff01;小伙伴们&#xff0c;大家好~ 今天我们将学习蓝桥杯基础篇&#xff08;十&#xff09;&#xff0c;学习函数相关知识&#xff0c;准备好了吗&#xff1f;咱们开始咯&#xff01; 一、函数基础 一个典型的函数定义包括以下部分&#xff1a;返回类型、函数名…...

Java Spring MVC (2)

常见的Request Controller 和 Response Controller 的区别 用餐厅点餐来理解 想象你去一家餐厅吃饭&#xff1a; Request Controller&#xff08;接单员&#xff09;&#xff1a;负责处理你的点餐请求&#xff0c;记录你的口味、桌号等信息。Response Controller&#xff08…...

Elasticsearch:使用 BigQuery 提取数据

作者&#xff1a;来自 Elastic Jeffrey Rengifo 了解如何使用 Python 在 Elasticsearch 中索引和搜索 Google BigQuery 数据。 BigQuery 是 Google 的一个平台&#xff0c;允许你将来自不同来源和服务的数据集中到一个存储库中。它还支持数据分析&#xff0c;并可使用生成式 AI…...

接口-菜品分页查询

业务内容 页面上菜品根据菜品名称、菜品分类、售卖状态三个字段进行分页查询。 在请求参数中携带了菜品名称、菜品分类、售卖状态三个字段参数。 返回PageResult类型的实体。 注意&#xff1a;在返回数据中在records下有个categoryName&#xff0c;这个字段的内容在category…...

springboot3 RestClient、HTTP 客户端区别

1 RestClient使用 RestClient 是 Spring 6.1 M2 中引入的同步 HTTP 客户端&#xff0c;它取代了 RestTemplate。同步 HTTP 客户端以阻塞方式发送和接收 HTTP 请求和响应&#xff0c;这意味着它会等待每个请求完成后才继续下一个请求。本文将带你了解 RestClient 的功能以及它与…...

自我训练模型:通往未来的必经之路?

摘要 在探讨是否唯有通过自我训练模型才能掌握未来的问题时&#xff0c;文章强调了底层技术的重要性。当前&#xff0c;许多人倾向于关注应用层的便捷性&#xff0c;却忽视了支撑这一切的根本——底层技术。将模型简单视为产品是一种短视行为&#xff0c;长远来看&#xff0c;理…...

RuoYi框架添加自己的模块(学生管理系统CRUD)

RuoYi框架添加自己的模块&#xff08;学生管理系统&#xff09; 框架顺利运行 首先肯定要顺利运行框架了&#xff0c;这个我不多说了 设计数据库表 在ry数据库中添加表tb_student 表字段如图所示 如图所示 注意id字段是自增的 注释部分是后面成功后前端要展示的部分 导入…...

linux查看python版本

1.查看Linux是否安装python yum list all | grep python 2.Linux安装python yum install python 3.Linux查看python版本 python -V...

算法题(89):单项链表

审题&#xff1a; 本题需要我们实现一个可以执行三个指令的数据结构来解决这里的问题 思路&#xff1a; 方法一&#xff1a;利用数组模拟链表 由于这里涉及插入删除操作&#xff0c;所以我们不能使用数组结构存储数据&#xff0c;这样子会超时&#xff0c;所以我们就利用数组来…...

开源之夏经验分享|Koupleless 社区黄兴抗:在开源中培养工程思维

开源之夏经验分享&#xff5c;Koupleless 社区黄兴抗&#xff1a;在开源中培养工程思维 文|黄兴抗 电子信息工程专业 Koupleless 社区贡献者 就读于南昌师范学院&#xff0c;电子信息工程专业的大三学生。 本文 2634 字&#xff0c;预计阅读 7​ 分钟​ 今天 SOFAStack 邀…...

体验开源openeuler openharmony stratovirt模拟器

文档 openeuler社区面向数字基础设施的开源操作系统 openharmony社区 OpenHarmony是由开放原子开源基金会&#xff08;OpenAtom Foundation&#xff09;孵化及运营的开源项目, 目标是面向全场景、全连接、全智能时代、基于开源的方式&#xff0c;搭建一个智能终端设备操作系统…...

【AI实践】基于TensorFlow/Keras的CNN(卷积神经网络)简单实现:手写数字识别的工程实践

深度神经网络系列文章 【AI深度学习网络】卷积神经网络&#xff08;CNN&#xff09;入门指南&#xff1a;从生物启发的原理到现代架构演进【AI实践】基于TensorFlow/Keras的CNN&#xff08;卷积神经网络&#xff09;简单实现&#xff1a;手写数字识别的工程实践 引言 在深度…...

深入探讨AI-Ops架构 第一讲 - 运维的进化历程以及未来发展趋势

首先&#xff0c;让我们一起回顾运维的进化之路&#xff0c;然后再深入探讨AI-Ops架构的细节。 运维的进化历程 1. AI 大范围普及前的运维状态 (传统运维) 在AI技术尚未广泛渗透到运维领域之前&#xff0c;我们称之为传统运维&#xff0c;其主要特点是&#xff1a; 人工驱动…...

2025年全球生成式AI消费应用发展趋势报告

原文链接&#xff1a;The Top 100 Gen AI Consumer Apps - 4th Edition | Andreessen Horowitz 核心要点&#xff1a;本报告由a16z发布&#xff0c;深度解析了2025年全球生成式AI消费应用的发展格局&#xff0c;揭示了技术迭代与商业化加速的双重趋势。 报告显示&#xff0c;A…...

VBA 列方向合并单元格,左侧范围大于右侧范围

实现功能如下&#xff1a; excel指定行列范围内的所有单元格 规则1&#xff1a;每一列的连续相同的值合并单元格 规则2&#xff1a;每一列的第一个非空单元格与其下方的所有空白单元格合并单元 规则3&#xff1a;优先左侧列合并单元格&#xff0c;合并后&#xff0c;右侧的单元…...

设计AI芯片架构的入门 研究生入行数字芯片设计、验证的项目 opentitan

前言 这几年芯片设计行业在国内像坐过山车。时而高亢&#xff0c;时而低潮。最近又因为AI的热潮开始high起来。到底芯片行业的规律是如何&#xff1f; 我谈谈自己观点&#xff1a;芯片设计是“劳动密集型”行业。 “EDA和工具高度标准化和代工厂的工艺标准化之后&#xff0c;芯…...

【弹性计算】异构计算云服务和 AI 加速器(二):适用场景

异构计算云服务和 AI 加速器&#xff08;二&#xff09;&#xff1a;适用场景 1.图形处理2.视频处理3.计算4.人工智能 异构计算 目前已经被广泛地应用于生产和生活当中&#xff0c;主要应用场景如下图所示。 1.图形处理 GPU 云服务器在传统的图形处理领域具有强大的优势&…...

JVM常用概念之移动GC和局部性

问题 非移动GC一定比移动GC好吗&#xff1f; 基础知识 移动GC和非移动GC 移动GC 在进行垃圾回收时&#xff0c;为了减少碎片而移动对象来顺利完成垃圾回收的GC。 Serial GC 在单线程环境下&#xff0c;它在标记-清除&#xff08;Mark-Sweep&#xff09;算法的基础上进行…...

微服务保护:Sentinel

home | Sentinelhttps://sentinelguard.io/zh-cn/ 微服务保护的方案有很多&#xff0c;比如&#xff1a; 请求限流 线程隔离 服务熔断 服务故障最重要原因&#xff0c;就是并发太高&#xff01;解决了这个问题&#xff0c;就能避免大部分故障。当然&#xff0c;接口的并发…...

使用Wireshark截取并解密摄像头画面

在物联网&#xff08;IoT&#xff09;设备普及的今天&#xff0c;安全摄像头等智能设备在追求便捷的同时&#xff0c;往往忽视了数据传输过程中的加密保护。很多摄像头默认通过 HTTP 协议传输数据&#xff0c;而非加密的 HTTPS&#xff0c;从而给潜在攻击者留下了可乘之机。本文…...

IDEA 基础配置: maven配置 | 服务窗口配置

文章目录 IDEA版本与MAVEN版本对应关系maven配置镜像源插件idea打开服务工具窗口IDEA中的一些常见问题及其解决方案IDEA版本与MAVEN版本对应关系 查找发布时间在IDEA版本之前的dea2021可以使用maven3.8以及以前的版本 比如我是idea2021.2.2 ,需要将 maven 退到 apache-maven-3.…...