【UE5】数字人基础

这里主要记录一下自己在实现数字人得过程中涉及导XSens惯性动捕,视频动捕,LiveLinkFace表捕,GRoom物理头发等。

一、导入骨骼网格体

骨骼网格体即模型要在模型雕刻阶段就要雕刻好表捕所需的表情体(blendshape),后面表捕的效果直接由雕刻的表情体决定。

导入fbx时,需要确保勾选了导入变形目标选项,一般UE默认是未勾选的,否则无法导入表情体。

表情体在UE中称作变形目标,直接存储在骨骼网格体中,打开骨骼网格体编辑视图,点击窗口/变形目标预览器可以打开变形目标的预览视图,在视图中可以修改变形目标的权重值来查看变形目标的变形效果和多个变形目标的混合效果。

变形目标在UE中不可再次修改,需要修改变形目标,只能到3D建模阶段中修改后再次导入。

每一个变形目标都是一个动画曲线,导入后UE5会自动生成对应的动画曲线,我们可以在添加动画曲线时看到对应变形目标名称的曲线。对于动画曲线的定义,可以查看我的这篇博文。

二、表情捕捉

1.基于LiveLinkFace的表捕流程

在开始开发表捕之前,我们应该首先要了解表捕的流程,了解全貌才能有条不紊。

我这里使用的是苹果的LiveLinkFace来实现表情捕捉的,所以流程也是基于LiveLinkFace的流程,其他的实现方案可能会有所不同。

首先我们要确保启动了UE5的LiveLink插件,一般UE5会默认启用LiveLink插件,当UE5启用了LiveLink插件后,在编辑器的窗口/虚拟制片/LiveLink可以打开LiveLink源管理视图。对于LiveLink源管理视图的具体参数即使用详情见官方文档。

首先LiveLinkFace会使用ARKit标准识别人脸的52个表情,并计算出变化值存储到对应的52个参数中,然后由LiveLink协议将52个参数的参数名及参数值实时同步到UE编辑器中,然后在动画蓝图中使用LiveLinkPose节点接收指定源传送进来的数据,根据接收到数据修改对应的Pose权重,再通过Pose驱动对应的表情体(动画曲线),然后通过PoseAssest将各个修改后的Pose融合成一个整体,于是一个完整的表情就被驱动起来了。

苹果ARKit BlandShape:ARFaceAnchor.BlendShapeLocation | Apple Developer Documentation。

2.LiveLinkFace连接UE

首先我们需要将LiveLinkFace连接到UE以便数据通信。

在苹果应用商店下载LiveLinkFace,进入App后进入设置/LiveLink界面,点击添加,为LiveLinkFace添加数据发送地址,地址就是UE编辑器运行的电脑的IP地址,端口可以使用默认的1111端口。

在这里插入图片描述

然后需要使苹果手机与UE编辑器所在电脑处于同一局域网中,因为目前LiveLink只支持同一局域网内的数据同步。

LiveLinkFace在UE中没有单独的管理源,所以LiveLinkFace的数据源会直接通过UE的LiveLink消息总线进行传输,我们可以在LiveLink管理视图的源/消息总线源下看到接收到数据源,点击数据源后,就可以在主题命名下看到对应的数据源了,如果LiveLinkFace使用的不是默认端口,则我们需要在对应的源类型的Settings/Advanced/Port Number`设置对应的端口。

在这里插入图片描述

接收到数据源之后,管理视图看起来就是这样子的:

在这里插入图片描述

  • Subject Name:数据同步的主体;
  • Role:应用的LiveLink协议规则,LiveLink支持多个协议规则,包括用于动画或骨骼数据的LiveLinkAnimationRole、基础规则LiveLinkBasicRole、用于相机同步的LiveLinkCameraRole和LiveLinkTransformRole、专门用于相机镜头的LiveLinkLensRole、用于光源数据的LiveLinkLightRole等;
  • 带颜色的小圆点:小圆点有黄色和绿色两种状态,黄色状态表示数据主体有连接上,但是在规定时间段内没有接收到数据,绿色表示数据接收正常。

需要注意,根据LiveLink的协议,LiveLink的数据传输只会传输给数据源端搜索到的第一个同一地址同一端口的接收端,及如果在一台主机上启动了两个UE使用同一个端口接收数据,只会有一个UE能接收到数据。

3.编辑动画曲线

由于模型雕刻流程中可能为了更灵活的控制雕刻出来的表情体可能会多于ARKit的52个表情,或者可能表情体命名规范不符合ARKit标准,此时我们就需要UE中再做一层映射,其中编辑动画曲线就是其中一步。

我们可以双击骨骼资产,再骨骼资产编辑视图中点击创建资产/创建动画/当前姿势,使用当前Pose创建一段空的动画序列,创建的空的动画序列只是一个Pose所以只有一帧。

在这里插入图片描述

我们需要将序列扩充到52帧,一帧对应一个Pose,一个Pose对应一个ARKit表情,双击打开动画序列,在曲线编辑视图右键,选择在开始处附加,然后输入51,这样我们就得到了一个52帧的动画序列。

在这里插入图片描述

然后单击曲线编辑视图的曲线下拉三角,在菜单中选择添加曲线,然后我们就能看到表情体名称对应的曲线了,把我们需要用的曲线全部添加进来。

在这里插入图片描述

然后在每一帧使用需要的曲线K出我们需要的表情,以便后一步我们生成Pose资产:

在这里插入图片描述

当然这一步其实也是可以直接由动画师一步到位,及动画直接提供一个52帧,每帧对应一个表亲Pose的动画序列,UE导入后可以直接使用这个动画序列生成Pose资产。

4.生成Pose资产

通过上一步,我们就拥有了一个有52个表情帧的动画序列,我们可以右键动画序列,在创建/创建姿势资产中,使用这个动画序列创建相应的姿势资产。

在创建姿势资产视图中,提供一个Pose Name列表给我们指定每一个Pose的名称,一行为一个Pose名称,行序号与帧序号对应。

在这里插入图片描述

需要注意,第一行必须师Default名称,或者任何无意义的名称,用于对应动画序列的第0帧。

输入的Pose名称需要符合ARKit的标准命名,否者将无法正确映射。

这里提供一份ARKit的标准表情Pose命名:

Default
EyeBlinkLeft
EyeLookDownLeft
EyeLookInLeft
EyeLookOutLeft
EyeLookUpLeft
EyeSquintLeft
EyeWideLeft
EyeBlinkRight
EyeSquintRight
EyeLookDownRight
EyeLookInRight
EyeLookOutRight
EyeLookUpRight
EyeWideRight
JawForward
JawLeft
JawRight
JawOpen
MouthFunnel
MouthPucker
MouthLeft
MouthRight
MouthSmileLeft
MouthSmileRight
MouthFrownLeft
MouthFrownRight
MouthDimpleLeft
MouthDimpleRight
MouthStretchLeft
MouthStretchRight
MouthRollLower
MouthRollUpper
MouthShrugLower
MouthShrugUpper
MouthPressLeft
MouthPressRight
MouthLowerDownLeft
MouthLowerDownRight
MouthUpperUpLeft
MouthUpperUpRight
BrowDownLeft
BrowDownRight
BrowInnerUp
BrowOuterUpLeft
BrowOuterUpRight
CheekPuff
CheekSquintLeft
CheekSquintRight
NoseSneerLeft
NoseSneerRight
TongueOut

然后我们需要设置Pose资产的Asset Details/Additive/Additive/Base Pose为Default姿势,基础姿势设置的不对会导致表情映射错位,致使表情驱动异常。

Pose资产配置好之后,我们就可以到动画蓝图中应用了。

备注:

其实第三第四步再UE中是可以省略的,只需要动画师提供一个包含了52个表情帧的动画序列,模型师在雕刻表情体时按照ARKit的命名标准来命名表情体,在导入时UE就会自动生成符合ARKit表情命名标准的曲线,这样在UE中也就不需要再做映射了。当然方便的代价就是丧失一定的灵活性,需要根据具体情况取舍。

5.驱动表情体

在动画蓝图中使用LiveLinkPose接收LiveLinkFace的数据源,通过姿势资产映射数据到相应的表情体上,于是表情就被驱动了。

在这里插入图片描述

当LiveLinkFace与UE连接上之后,可以直接在LiveLinkPose节点的LiveLinkSubjectName直接指定接收的数据源,也可以通过LiveLinkSubjectName变量来传入。

然后将动画蓝图应用到角色上,就可以测试效果了:

由于CSDN的gif图最大只支持5MB,所以请移步查看

6.表情扩展

ARKit的52个标准表情都是一些人体的基础表情,有的时候因为一些需求,可能需要使用到一些较为夸张的表情,这些表情是真人做不出来的,此时我们就需要对表情进行扩展。

扩展表情的方式有两种,一种是直接在雕刻表情体时就把表情调得夸张一些,然后直接驱动;另一种是将一个夸张的表情单独调一个表情体,然后在动画蓝图中使用程序驱动,通过条件触发。

但是需要注意的是,过于夸张的表情在做融合的时候可能会产生比较诡异的效果,这个就需要具体情况具体调整了。

第一种方式在UE中不需要再做调整,这里就略过了,这里主要记录第二种方式。

首先我们需要导入一个带有夸张表情体的骨骼网格体,但由于ARKit的52个标准表情中没有与我们夸张表情对应的参数,所以我们需要自己涉及一套算法来分割组合52个参数,使用分割组合的参数来驱动夸张表情。如:我们有一个大笑的夸张表情,为了不影响原来的笑的表情,我们可以将MouthSmileLeft、MouthSmileRight两个参数分割成小于0.4的部分和大于0.4的部分,小于0.4的部分我们不做处理,大于0.4的部分用于驱动夸张表情。

在这里插入图片描述

首先我们需要了解LiveLink协议传输数据的数据结构,根据官方文档的说明:

主体由以下数据组成:

  1. 名称。
  2. 不会变更的静态数据(例如动画角色骨架)。
  3. 一个或多个"帧"数据(例如动画角色的骨骼变换)。
  • 名称:用于使用LiveLinkSubjectName来获取对应的数据;
  • 静态数据:数据的键值,及参数名,不同的协议规则,数据类型不同;
  • 帧数据:与静态数据数量对应的参数值,不同的协议规则,数据类型不同;

LiveLinkFace使用的是LiveLinkBasicRole协议规则,我们可以使用EvaluateLiveLinkFrame节点来获取指定名称的数据源传输过来的静态数据和帧数据:

在这里插入图片描述

在LiveLinkFace传输过来的数据中,StaticData就是52个表情的参数名,FrameData则是参数名对应的参数值和元数据,参数值取值范围为0-1;

如上面的逻辑,我拆分了MouthSmileLeft和MouthSmileRight用于驱动夸张表情,同时组合了JawOpen参数用于控制表情的触发,当三个参数满足触发条件之后,则取MouthSmileLeft和MouthSmileRight中最大值,将其0.6-1的取值映射到范围映射到0-0.5上,然后将值存储到对应的曲线上,但表情退出时使用插值进行平滑退出。

当我们将所有的夸张表情曲线值更新关闭之后,就可以在AnimGraph视图中使用ModifyCurve节点将曲线值更新到实际的曲线上了,更新上去之后,表情就被驱动了。

在这里插入图片描述

这种方式有个弊端,就是对平滑处理的要求比较高,否则很容易出现表情的跳跃,导致表情过渡不自然。

还有一种比较好的处理方式,就是将一个表情拆分成标准部分和夸张部分,当要做夸张表情的时候将夸张表情叠加到标准表情之上,这样就算平滑处理的不是很好也不会出现表情的跳跃,但是这种方式又对表情雕刻有很高的要求,建模师要能够有这个能力把一个表情拆分成标准部分和夸张部分。

三、动作捕捉

1.基于Xsens惯性动捕的动作捕捉

和表捕一样我们也需要先了解动捕的整个流程。

Xsens的动捕服在收集完动捕数据之后通过连在主机上的专门的接收天线传输到Xsens的动捕软件里,动捕软件再将数据应用到标准骨架上,然后动捕软件再通过LiveLink协议传输到UE编辑器上,这也要求运行动捕软件的主机和运行UE的主机在同一局域网内或是在同一主机上。XSens传输过来的数据再通过骨骼重定向,就可以直接映射到我们数字人的骨骼上了,然后就可以像动画序列驱动骨骼一样使用动捕数据驱动骨骼了。

2.Xsens动捕软件

Xsens动捕服连接Xsens动捕软件和Xsens动捕软件连接UE,我所用的环境是已经配置好的,也没有自己亲手配置过,就不臆想误导别人了,可以参参考这两篇文章:

Xsens动捕使用说明 - 知乎 (zhihu.com)

Xsens惯性动捕连接虚幻UE5教程 - 知乎 (zhihu.com)

3.安装MVN Live Link插件

Xsens的动捕数据有专门的接收总线,要能在UE中接Xsens动捕数据,需要MVN Live Link插件的支持,目前我发现Epic商城的MVN Live Link插件已经暂停提供了,这里提供了一份UE4.27、5.0和5.1版本的插件百度云地址:https://pan.baidu.com/s/1axao8Uf-0BSyqYzxqmuEug ?password=vrmu。

解压后将插件拷贝到引擎的Engine\Plugins\Marketplace目录下。

弄好之后启动UE到插件管理视图启动LiveLinkMvnPlugin插件。

需要注意的是Xsens动捕软件内置了MVN的支持,也需要设置一下。

启动插件后,我们就可以在LiveLink管理视图的源处看到专门的Xsenx Live Source接收专线。通过设置好端口,就可以接收到XSens传输过来的数据了。

在这里插入图片描述

4.骨骼重映射

MVN插件已经为我们设定好了映射资源,在启动了MVN插件之后,我们右键骨骼资产,可以在右键菜单中看到Xsens选项,选择Create Remap Asset可以直接创建对应骨骼的重映射资源。

在这里插入图片描述

双击打开创建的资源,在细节面板中:

  • Bones Names/Naming Convention选项我们可以选择Unreal/Metahuman,这是MVN插件为UE的数字人标准骨骼映射好的映射资源,如果自己的数字人主要骨骼层级符合UE数字人标准,就可以直接使用,如果有差异,则可以在Live Link Mvn Remap处手动设置映射关系;
  • Reference Pose/TPose Animation 选项设置映射资源需要使用T-Pos资产,这里要注意,MVN插件必须使用T-Pos,如果骨骼资产是A-Pos,我们可以在骨骼资产编辑视图编辑骨骼到T-Pos,然后在创建资产/创建动画/当前姿势来创建一个T-Pos动画序列,当然也可以直接交由动画师提供一个T-Pos动画;
  • Reference Pose/Is Forward Y:在应用动捕数据后,出现方向不正确是勾选;
  • Live Link Mvn Remap/Remapping Assets:设置骨骼重映射;
  • Live Link Mvn Remap/Skeleton:设置映射资源所使用的骨骼资产,创建资产是会默认设置好。

5.驱动骨骼

然后直接使用LiveLinkPose节点,设置LiveLinkSubjectName到对应的数据源,设置LiveLinkPose节点的Details/Retarget/Retarget Asset为上一步创建的映射资产,然后就可以通过Xsens动捕数据驱动数字人骨骼运动了。

在这里插入图片描述

四、物理发型

1.启动GRoom插件

UE的物理发型功能由GRoom插件提供,一般UE引擎默认是未启用GRoom插件的,所以我们需要自己去启用。

同时也要启动Alembic GRoom Importer插件来支持GRoom缓存的导入。

为了使UE支持毛发渲染,我们还需要启用Project Settings/Engine/Rendring/Support Compute Skin Cache选项。

2.创建GRoom资产

GRoom资产是在模型建模阶段制作好的头发资源,以abc缓存文件的格式导入到UE,GRoom插件读取到之后,会自动生成GRoom资产。

在这里插入图片描述

上面第一个发丝图标的就是GRoom资产。

进入GRoom编辑视图,在LOD选项卡中可以配置GRoom的LOD信息,在Strands选项卡中可以配置发丝的粗细等,在Physics选项卡中可以启用GRoom的物理模拟。

3.创建绑定

GRoomBinding资产可以让GRoom适配到骨骼网格体上,并且使GRoom跟随骨骼网格体运动。

右键GRoom资产,Create Binding可以使用指定的GRoom资产创建GRoomBinding资产,创建时需要指定资产绑定的骨骼网格体。

在这里插入图片描述

在第二小节中右侧的资产图标就是GRoomBinding的图标。

4.应用GRoom资产

创建角色蓝图,为角色添加Skeletal Mesh组件,并赋予骨骼网格体,然后再为角色添加GRoom组件,依附于Skeletal Mesh组件之下,在GRoom组件的GRoom/GRoom Asset设置GRoom资产,在GRoom/Binding Asset设置GRoomBinding资产,在Materials设置头发的材质。这样一个物理发型就应用到角色身上了。为了使骨骼网格体能应用绑定,还需要将骨骼网格体的AssetData/LOD0/LOD Info/Skin Cache Usage选项设置为Enabled。

有时我们为发现设置了绑定资产之后,头发会消失,此时我们删掉原来的绑定资产,然后重新创建绑定资产,如果还是没有效果,则需要删掉GRoom资产,重新导入。

当相机离头发很近时头发消失

最近做虚拟人,遇到一个问题,即当相机靠进到虚拟人一定距离时,人物的头发直接不渲染了。

如图:

由于CSDN的gif图最大只支持5MB,所以请移步查看

这可能是UE为了性能需求,为GRoom设置了渲染边界,超出阈值时就不渲染了,我们需要将所有的GRoom和GRoom所依附的骨骼网格体的Readering/Bounds Scale,UE4是Readering/Bounds Scale,UE5则是Readering/Advanced/Bounds Scale,设置到合适的值,设置这个值会影响到物体聚焦的距离,设置得太大,聚焦时相机会跑得非常远。

这里我设置成了5,然后再看一下效果:

由于CSDN的gif图最大只支持5MB,所以请移步查看

GRoom在设置Binding Asset后不显示

有时在使用GRoom时发现配置了绑定资产后GRoom会消失,而去掉绑定资产后GRoom又会显示,导致这个问题的原因可能是骨骼网格体使用GRoom的必要配置项没启用。

首先确保Project Settings/Engine/Tending/Optimizations/Support Compute Skin Cache设置是勾选上的;

然后打开使用的骨骼网格体编辑视图,将Asset Details/LOD 0/LOD Info/Skin Cache Usage设置为Enabled。

-SL3Amq2j-1714308968770)]

GRoom在设置Binding Asset后不显示

有时在使用GRoom时发现配置了绑定资产后GRoom会消失,而去掉绑定资产后GRoom又会显示,导致这个问题的原因可能是骨骼网格体使用GRoom的必要配置项没启用。

首先确保Project Settings/Engine/Tending/Optimizations/Support Compute Skin Cache设置是勾选上的;

然后打开使用的骨骼网格体编辑视图,将Asset Details/LOD 0/LOD Info/Skin Cache Usage设置为Enabled。

然后绑定就生效了。

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

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

相关文章

Elasticsearch 索引 blocks:深入探讨数据保护

Elasticsearch 作为搜索和分析数据的首选分布式引擎在技术领域脱颖而出,尤其是在处理日志、事件和综合文本搜索时。 它的与众不同之处在于它如何让你使用各种块选项调整对其索引的访问。 这对于那些负责技术项目的人(比如管理员和编码员)来说…

LTE的EARFCN和band之间的对应关系

一、通过EARFCN查询对应band 工作中经常遇到只知道EARFCN而需要计算band的情况,因此查了相关协议,找到了他们之间的对应关系,可以直接查表,非常方便。 具体见: 3GPP TS 36.101 5.7.3 Carrier frequency and EAR…

Leetcode—1235. 规划兼职工作【困难】(upper_bound、自定义排序规则)

2024每日刷题&#xff08;125&#xff09; Leetcode—1235. 规划兼职工作 算法思想 实现代码 class Solution { public:int jobScheduling(vector<int>& startTime, vector<int>& endTime, vector<int>& profit) {int n startTime.size();vec…

doris经典bug

在部署完登录web页面查看的时候会发现只有一个节点可以读取信息剩余的节点什么也没读取到 在发现问题后&#xff0c;我们去对应的节点去看log日志&#xff0c;发现它自己绑定到前端的地址上了 现在我们已经发现问题了&#xff0c;以下就开始解决问题 重置doris 首先对be进行操…

代码审计提升系统安全,为企业数字化繁荣保驾护航

近年来&#xff0c;软件安全事件频发&#xff0c;凸显出严峻的信息系统安全形势&#xff0c;传统的安全防护机制已经无法帮助企业实现安全保障。忽视软件代码自身的安全性&#xff0c;仅依靠外围防护、事后修补&#xff0c;无法深层次发现和解决软件迭代开发过程中存在的潜在安…

一键实现在VS Code中绘制流程图

VS Code是一款常用的IDE&#xff0c;受到许多用户的欢迎和喜爱。而其较为出众的一点&#xff0c;就是较好的可拓展性&#xff0c;即丰富的插件应用&#xff0c;这些应用可以极大地提高生产效率&#xff0c;并优化日常使用。 流程图是一种直观的图示方法&#xff0c;可以用简明…

Fastadmin 日常项目常见用法整理

ps&#xff1a;自己使用笔记备用&#xff0c;不间断更新&#xff0c;常见功能点 一&#xff0c;数据库后缀 结尾字符示例类型要求字段说明timerefreshtimebigint/datetime识别为日期时间型数据&#xff0c;自动创建选择时间的组件imagesmallimagevarchar识别为图片文件&#…

谷歌推广和seo收录是一回事吗?

那自然不是一回事&#xff0c;谷歌推广一般指的是谷歌的广告服务&#xff0c;通过购买广告位&#xff0c;以便用户在谷歌搜索特定关键词时显示您的广告&#xff0c;这种方式通常基于点击收费&#xff0c;意味着您只有在有人点击您的广告时才需要支付费用。谷歌推广可以让您的网…

加密技术在保护企业数据中的应用

加密技术是企业数据保护的核心&#xff0c;对于维护信息安全至关重要。透明加密技术使文件加密后不改变用户对文件的使用习惯&#xff0c;内部文件打开自动解密&#xff0c;存储自动加密&#xff0c;一旦离开使用环境&#xff0c;加密文件将无法正常读取&#xff0c;从而保护文…

【Java】第二讲:字符串相关类

个人主页&#xff1a;深情秋刀鱼-CSDN博客 Java专栏&#xff1a;Java程序设计 目录 一、String 1.Java中的数据类型 2.字符串概述 3.字符串构造方法 4.字符串构造内存原理 5.字符串比较 6.字符串常见方法 二、StringBuilder 1.定义 2.常用方法 3.StringBuilder内存分…

04-xss获取cookie实验

二、开发XSS服务器端 1、确认实验环境 攻击者服务器&#xff1a;192.168.74.134&#xff0c;将获取到cookie数据保存到该服务器的数据库中&#xff0c;运行PHP代码暴露一个接收Cookie的URL地址。 正常Web服务器&#xff1a;192.168.74.133&#xff0c;用于正常的用户访问的目…

【介绍下大数据组件之Storm】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

《我的医养信息化之路》之三十四:家庭健康管理员

在2019年的健康中国行动中&#xff0c;国家出台《关于实施健康中国行动的意见》、《健康中国行动&#xff08;2019—2030&#xff09;》、《中国公民健康素养66条》、《关于全面开展健康家庭建设的通知》等多份文件&#xff0c;提出每个人都是自己健康的第一责任人&#xff0c;…

Linux磁盘IO、网络IO、零拷贝详解

一、什么是I/O&#xff1f; 在计算机操作系统中&#xff0c;所谓的I/O就是输入&#xff08;input&#xff09;和输出&#xff08;output&#xff09;,也可以理解为读&#xff08;read&#xff09;和写&#xff08;write&#xff09;,针对不同的对象&#xff0c;I/O模式可以划分…

【代码随想录——哈希表】

1.哈希表理论基础 首先什么是 哈希表&#xff0c;哈希表&#xff08;英文名字为Hash table&#xff0c;国内也有一些算法书籍翻译为散列表&#xff0c;大家看到这两个名称知道都是指hash table就可以了&#xff09;。 那么哈希表能解决什么问题呢&#xff0c;一般哈希表都是用…

windows安装ElasticSearch以及踩坑

1.下载 elasticsearch地址&#xff1a;Past Releases of Elastic Stack Software | Elastichttps://www.elastic.co/cn/downloads/past-releases#elasticsearch IK分析器地址&#xff1a;infinilabs/analysis-ik: &#x1f68c; The IK Analysis plugin integrates Lucene IK…

【网站项目】戒烟网站

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

【Unity Shader入门精要 第4章】数学基础(二)

1. Unity中的坐标空间 1.1 五个坐标空间 模型空间 模型自身的3D坐标系空间&#xff0c;左手坐标系是一个相对空间&#xff0c;坐标轴指向随模型旋转变化当物体有父节点时&#xff0c;Transform组件中各属性的值表示的即为该物体在其父物体的模型空间中的值当模型顶点传入顶点…

ICDE2024 |VDTuner:向量数据库自动调优技术

在CodeFuse接入实际业务的过程中&#xff0c;大模型的推理成本以及生成内容的准确性是产品规模落地的两个核心考量因素。为了降低推理成本&#xff0c;我们研发了CodeFuse-ModelCache语义缓存加速功能&#xff0c;通过引入Cache机制&#xff0c;缓存已经计算的结果&#xff0c;…

OpenCV 入门(五) —— 人脸识别模型训练与 Windows 下的人脸识别

OpenCV 入门系列&#xff1a; OpenCV 入门&#xff08;一&#xff09;—— OpenCV 基础 OpenCV 入门&#xff08;二&#xff09;—— 车牌定位 OpenCV 入门&#xff08;三&#xff09;—— 车牌筛选 OpenCV 入门&#xff08;四&#xff09;—— 车牌号识别 OpenCV 入门&#xf…