Hololens 2应用开发系列(3)——MRTK基础知识及配置文件配置(中)
Hololens 2应用开发系列(3)——MRTK基础知识及配置文件配置(中)
- 一、前言
- 二、输入系统
- 2.1 MRTK输入系统介绍
- 2.2 输入数据提供者(Input Data Providers)
- 2.3 输入动作(Input Actions)
- 2.4 控制器(Controllers)
- 2.5 指针(Pointers)
- 2.6 手势(笔势、Gestures)
- 2.7 手部关节追踪(Articulated Hand Tracking)
- 2.8 语音命令
- 2.9 其他
- 三、总结
- 参考文献
一、前言
在前面的Hololens 2应用开发系列文章中,我介绍了Hololens2开发环境配置及项目生成部署、使用MRTK在Unity中设置混合现实场景并进行程序模拟以及MRTK基础知识和总配置文件和相机配置使用的说明,在上述最后一篇文章中,我总体介绍了输入(Input) 配置的概要,而在本篇文章中,我将对输入(Input) 配置进行详细介绍。

二、输入系统
2.1 MRTK输入系统介绍
在了解MRTK输入系统前,请先了解几个关键名词:
- 输入数据提供者(Input Data Providers):本质上是数据提供者(参考该文章2.4节MRTK服务介绍),又被称为设备管理器,从硬件(HoloLens 2、鼠标、输入模拟程序等)底层获取信息并向MRTK提供数据;
- 控制器(Controllers):注意,此控制器不是实际的物理硬件,而是一个软件,是一个抽象的表达,它将从 输入数据提供者(Input Data Providers) 获取的数据转换为MRTK所需的数据类型和事件;
- 指针(Pointers):该处的指针概念类似于电脑的鼠标(电脑操作系统将鼠标信息在2D显示器平面上显示出的鼠标光标),由控制器(Controllers) 可视化转换而来,只不过,在3D空间中,指针也有所三维化,通常它是一条射线,由人手(或控制器,此处指物理控制器)发出,指向远处人手(控制器)所指向的方向;指针包含近指针和远指针。准确来说,近指针是对于附近物体的触摸和抓取等操作,而远指针才一般以射线形式显示;
- 焦点(Focus):指针指到某个物体上,则在该物体的表面与指针相交处产生了焦点;
- 光标(Cursor):指针射线末端,为展示焦点所在位置,同时提供指针交互的视觉表现,会在射线末端呈现一个圆环,类似于电脑中鼠标光标中所代表实际点击位置的最上方的角。
微软官方文档输入系统概述中,为我们介绍了输入系统的如下组成,其中,设备管理器为我们提供的系统层面的数据(因此,又称为数据提供者),而控制器Controller的配图与实际功能意义并非完全相符,但整体的层级关系是基本正确的,即数据提供者Input Data Providers→控制器Controllers→指针Pointers→焦点Focus→光标Cursor→交互Interactable。

从实现上来说,微软官方对MRTK的事件流进行了描述,其如下图所示。控制器将输入事件传递给指针,指针将指针事件传递给了聚焦物或目标物,聚焦物或目标物通过监听指针事件和输入事件执行相应命令。

而在具体实现上,MRTK输入系统之间各部分的关系较为复杂,为了更好地帮助大家理解各个组件之间的属性与关联,在此我以思维导图的方式将各个组件为大家展示如下:
其中,每个数据提供者可以生成一个或多个控制器(如左手控制器、右手控制器),同时一个控制器也可以根据不同的输入事件生成多种类型的指针(如点击、抓取、指向),但往往其在一个时刻对应一种指针,每个指针都有其焦点和光标,同时,聚焦的物体也根据输入事件执行不同的交互事件。但是,凡事也有例外,对于语音输入和听写输入,其无需控制器,而是根据输入内容,执行相应的处理服务,从而转化成相应的输入事件,如命令某个物体做出改变。(PS: 不同于电脑中只能有一个鼠标,系统中可以同时存在多个指针,如左手和右手一起交互。)
在理解了所有组件的基本概念之后,接下来再看各项的具体设置,便更为容易。
2.2 输入数据提供者(Input Data Providers)
微软官方对MRTK输入数据提供者的文档请参考:输入提供者 - MRTK2。
MRTK的输入系统为支持多种类型的输入源,对每种类型的输入设备或交互方式,几乎都通过输入数据提供者(Input Data Providers) 来捕获和处理相应的输入事件。因此,无论是内置的输入设备还是自定义的硬件平台,MRTK都要求或者支持开发人员创建对应的数据提供者来整合这些输入源到统一的输入管理系统中,确保应用能够无缝地响应来自各种交互方式的输入事件。

对于一个输入提供者,它可创建多个控制器,这些控制器统一由输入提供者进行生成、管理和销毁,但听写和语音输入提供者不会创建任何控制器,它们直接引发自己的专用输入事件。MRTK现有的一些输入数据提供者及其对应源输入设备如下:
| 输入数据提供者 | 源输入设备及相关说明 |
|---|---|
| Windows Mixed Reality Device Manager | 设备:HoloLens等 监测数据:手、语音等 创建的控制器:WMR 关节手、WMR 控制器、WMR GGV(凝视、手势和语音)手 |
| Mouse Device Manager | 设备:鼠标 监测数据:鼠标动作 创建的控制器:鼠标控制器 |
| OpenXR XRSDK Device Manager | 设备:通用OpenXR(VR、MR)设备 监测数据:设备按钮、操纵杆等动作数据 创建的控制器:通用OpenXR(VR、MR)控制器 |
| Unity Joystick Manager | 设备:操纵杆 监测数据:操纵杆动作数据 创建的控制器:Generic Joystick |
| Unity Touch Device Manager | 设备:触摸屏设备 监测数据:触碰数据 创建的控制器:Unity Touch Controller |
| Windows Speech Input | 设备:支持语音输入的Windows设备 监测数据:语音命令数据 创建的控制器:无 |
| Windows Dictation Input | 设备:支持语音输入的Windows设备 监测数据:听写数据 创建的控制器:无 |
| Hand Joint Service | 设备:带有手部关节识别的设备 监测数据:图像数据 创建的控制器: |
| Input Simulation Service | 设备:Unity模拟功能 监测数据:图像数据 创建的控制器:Simulated Hand |
在了解相关功能说明后,您可选择对应所需的输入数据提供者,并展开其菜单进行配置,常规情况下,您仅需选择并克隆对应设备下的配置文件即可,一些输入提供者可能会有额外设置,如输入模拟服务会要求您配置不同按键的动作。
如需创建自己的输入提供者,请参考微软官方教程创建输入系统数据提供程序 — MRTK2,该部分属于高阶教程,您可先行自行了解。
2.3 输入动作(Input Actions)
输入动作是对原始物理输入的抽象,所有的物理操作都需要转化成逻辑动作才能在程序中使用,输入动作旨在帮助将应用程序逻辑与产生输入的特定输入源隔离开来。因此,区分于上方为方便大家理解而绘制的思维导图,输入动作(Input Actions) 并非直接位于输入数据提供者之前或之后,而是位于整个输入处理流程的更高层级。
输入动作到底是什么?在前面叙述的逻辑中,我们仅了解了利用输入数据提供者对程序进行控制(或使程序监测输入数据来知道你的关注目标),这类似于在电脑桌面上的鼠标移动操作,而输入动作类似于选中某个图标后(物体获得焦点后)为“打开程序”(执行某种命令)的鼠标双击操作和回车操作(这两种操作作用是一样的),被关注的目标无需知道具体输入源(操作方式)是什么,而仅仅需要监听“打开程序”这个动作,便可知道自己要做什么改变。
具体来讲,如定义一个名为Select的操作并将其映射到鼠标左键、游戏手柄中的按钮和6DOF控制器中的触发器,然后应用程序只需要监听Select输入动作事件,便可执行选中这一命令。同时,我们也可以设定输入规则,将一个输入动作分解为多个输入动作,如摇动一个摇杆,可将该动作分解成向前、向后、向左、向右四个动作。
因此,在输入动作(Input Actions) 中,可以设置的是根据不同的输入类型设置具体的操作名称,和设置输入动作规则,对动作进行分解。该部分设置面板如下:

其中,在输入动作设置部分,我们可以根据输入数据类型设置其不同的动作名称(准确说是指定了操作名称后将其映射到某种输入类型),因此,在此我列出我们可以映射的输入数据类型。
| 数据类型 | 描述 |
|---|---|
| Digital(开关值) | 开关输入,等同于按键输入,如手柄按键 |
| SingleAxis(单轴) | 单轴模输入,如游戏手柄中的模拟触发器 |
| DualAxis(双轴) | 双轴模拟输入,如摇杆 |
| SixDof(6自由度) | 平移和旋转3D姿势,如6DOF控制器生成的3D姿势,如6自由度的手持控制器 |
| Raw | 原始数据,仅用于代理 |
| None | 无输入 |
除此之外,还有一些数据类型,我们可根据字面意义对其进行理解。
对于输入规则,我们可以选择原始的输入动作,在不同的方向上对其进行分解,进而产生新的输入。
对于定义好的输入动作,我们可在控制器部分将其映射到实体的控制器上,进而完成输入事件关联,详细可参考官方文档。
2.4 控制器(Controllers)
参考微软官方文档,在控制器设置中,我们需要将具体的实物控制器配置(映射)到其关联的MRTK控制器服务上。

如我们点击了Controller Definitions后,在弹出的菜单上我们选择鼠标控制器Mouse Controller,会出现鼠标控制器的选项界面:

在对相应的数据类型选择输入动作后,我们可以关注到下方小字,即该设置所映射到的控制器服务。针对HoloLens 2开发和测试,我们需要重点配置的控制器有GGV Hand Controller(手部控制器)、GGV Left Hand Controller(左手控制器)、GGV Right Hand Controller(右手控制器)和Mouse Controller(鼠标控制器)。其余控制器可根据需要进行配置。
在控制器的配置页面中,下方还有不少配置选项,主要是对控制器的可视化操作及可视化效果,在图像中会渲染出一个与你的控制器一致的控制器模型,通常我们并不需要,但在软件开发时可据此进行调试,检查控制器(如手势)的跟踪状态,此处可自行配置。
2.5 指针(Pointers)
指针用于与游戏对象交互。指针的类别分为近指针、远指针和瞬移指针。
- 远指针:该类型的指针用于与远离用户的对象进行交互。 这些类型的指针通常会投射出可以深入世界的线条,使用户能够对不在他们身边的对象进行交互和操作。
- 近指针:该类型的指针用于与距离用户足够近的对象进行交互,以便可以抓取、触摸和操作对象。 一般情况下,这些类型的指针通过查找附近区域中的对象来与对象交互(在短距离处进行光线投射、进行球体投射、查找附近的对象,或枚举被视为可抓取/可触摸对象的对象列表)。
- 瞬移指针:这些类型的指针插入到瞬移系统,以处理将用户移到指针所指位置的操作。

在程序运行过程中,当新的控制器被检测到时,会自动创建对应的指针。由于单个控制器可以有多个指针(例如,关节手可以具有近距和远距交互指针),因此有一个组件(指针调解器)负责调解哪个指针应处于活动状态。用户的手部接近某个可按按钮时,ShellHandRayPointer应停止显示,而PokePointer应该参与进来。通过更改指针配置文件中的PointerMediator属性,可以提供指针调解器的替代实现。由于指针调解器每帧都会运行,因此它最终会控制所有指针的活动/非活动状态。所以,如果在代码中设置指针的 IsInteractionEnabled属性,每帧的指针调解器会覆盖此属性值,我们可以改为自行指定PointerBehavior来控制指针的打开和关闭。 具体配置方法可参阅微软官方文档如何禁用指针。
在MRTK指针配置面板上,我们可以对指针进行配置,同时对其可视化与否和可视化效果进行设定。由于微软官方指针文档已较为全面,在此不再多余阐述。

2.6 手势(笔势、Gestures)
要注意区分手势Gestures与后面手部关节追踪Articulated Hand Tracking,手势识别是建立在手部关节追踪基础之上的高级抽象层,相比于手部关节追踪来说,手势更加注重动作的意义和目的性,开发者无需关心所有关节的详细动态,只需监听和响应特定的预设手势即可。微软官方教程中将Gestures亦翻译为了笔势,但不排除错误翻译的可能。手势是基于人手的输入事件。 MRTK 中有两种类型的设备会引发手势输入事件:
- Windows Mixed Reality设备,例如HoloLens。 它描述捏合运动(“隔空敲击”)和点击并按住手势(WindowsMixedRealityDeviceManager包装Unity XR.WSA.Input.GestureRecognizer以使用来自HoloLens设备的Unity手势事件)
- 触摸屏设备(UnityTouchController 包装支持物理触摸屏的 Unity Touch 类)
为了增强理解,微软官方为我们制作了一个基本手势操作的视频,通过本视频,您可了解具体的手势操作,同时对该部分的配置项有所了解。
HoloLens 2手势识别器会生成若干手势识别结果,并将其映射到默认的输入动作上,如单击(Tap)、抓取(Grab)、操作(Manipulation)等,同时我们也可以映射自定义的手势输入动作。
2.7 手部关节追踪(Articulated Hand Tracking)
手部关节追踪区分于手势,顾名思义,它是更底层的实现配置。手部关节追踪的设置偏重于对手部关节预制件的设置,在此我们尽量不要变动其原始设置。

借助手部关节追踪,我们可以从输入系统为每个手部关节请求位置和旋转。此外,系统还允许访问跟随关节的GameObject。 如果其他GameObject应连续跟踪某个关节,这会非常有用。TrackedHandJoint 枚举中列出了可用关节。具体请查阅官方文档,在此无需做详细描述。
2.8 语音命令
HoloLens 2中,系统提供了语音文字识别功能,在此我们可通过关键词设置语音控制命令,并将其关联到某个输入动作上。其中,总体的配置有启动行为Start Behavior,即选择自动启动还是手动启动;和识别可信等级,不同等级识别效果不同。

由于配置较为简单,在此不做阐述,详细可参阅官方文档。
2.9 其他
由于是引导章节,本文暂未涉及代码和高级功能的讲解,MRTK输入系统官方文档中还未我们提供了凝视(Gaze)、听写(Dictation)、访问 MRTK 中的输入状态、添加近交互性等功能的介绍、使用和代码编写,感兴趣的同学可以先行了解。
三、总结
错综复杂的输入逻辑一点点构成了MRTK日益丰富完善的输入系统,为了更好帮助大家理解,我尽量将一些专有名词或说法转化为了适合小白的通俗易懂的话语,内容制作属实不易,错误也不可避免,如有错误敬请指出!!!
参考文献
[1] 汪祥春.HoloLens 2开发入门精要:基于Unity和MRTK[M]. 北京:清华大学出版社,2021.
[2] MRTK2-unity开发文档[EB/OL].https://learn.microsoft.com/zh-cn/windows/mixed-reality/mrtk-unity/mrtk2,2022.
相关文章:
Hololens 2应用开发系列(3)——MRTK基础知识及配置文件配置(中)
Hololens 2应用开发系列(3)——MRTK基础知识及配置文件配置(中) 一、前言二、输入系统2.1 MRTK输入系统介绍2.2 输入数据提供者(Input Data Providers)2.3 输入动作(Input Actions)2…...
吴恩达深度学习笔记:深度学习引言1.1-1.5
目录 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第一周:深度学习引言(Introduction to Deep Learning)1.1 欢迎(Welcome)1.2 什么是神经网络?(What is a Neural Network)1.3 神经网络的监督学习(Supervised Learning …...
【Hadoop大数据技术】——Hadoop概述与搭建环境(学习笔记)
📖 前言:随着大数据时代的到来,大数据已经在金融、交通、物流等各个行业领域得到广泛应用。而Hadoop就是一个用于处理海量数据的框架,它既可以为海量数据提供可靠的存储;也可以为海量数据提供高效的处理。 目录 &#…...
蓝桥杯2023年第十四届省赛真题-工作时长
文件数据 把数据复制到excel中 数据按照增序排序 选中列数据,设置单元格格式,选择下述格式。注意,因为求和之后总小时数可能会超过24小时,所以不要选择最前面是hh的 设置B2 A2 - A1, B4 A4 - A3;然后选中已经算出…...
nginx禁止国外ip访问
1.安装geoip2扩展依赖 yum install libmaxminddb-devel -y 2.下载ngx_http_geoip2_module模块 https://github.com/leev/ngx_http_geoip2_module.git 3.编译安装 ./configure --add-module/datasdb/ngx_http_geoip2_module-3.4 4.下载最新数据库文件 模块安装成功后,还要…...
《腾讯音乐》24校招Java后端一面面经
1.手写LRU 2.项目拷打 3.Https客户端校验证书的细节? 4.对称加密和非对称加密的区别?你分别了解哪些算法? 5.在信息传输过程中,Https用的是对称加密还是非对称加密? 6.怎么防止下载的文件被劫持和篡改? 7.H…...
JavaScript:ES至今发展史简说
ECMAScript(简称ES)是JavaScript的标准,它的发展史经历了多个版本的迭代,以下是主要里程碑: ES1 (1997年6月):首个正式发布的ECMAScript标准,基于当时的JavaScript(由Netscape公司开…...
Linux:进程
进程 知识铺垫冯诺依曼体系结构操作系统(OS) 进程概念进程的查看ps 命令获取进程 pid文件内查看进程终止进程的方式kill命令快捷键 进程的创建 forkfork 返回值问题 进程状态运行状态 :R休眠状态:S (可中断)…...
【Vue3】defineExpose 实践
【Vue3】defineExpose 实践 defineExpose 是 Vue 3 的 <script setup> 语法糖中提供的一个函数,用于显式地暴露组件的属性、方法或其他响应式状态给其父组件或外部使用。这是在使用 <script setup> 语法时,控制组件公开哪些内部状态和方法的…...
centos7.9安装nacos
centos7.9安装nacos2.3.1 在centos x86_64环境安装nacos2.31环境准备 jdk1.8 、 mysql、 nacos 在window11环境安装nacos2.31 在centos x86_64环境安装nacos2.31 环境准备 jdk1.8 、 mysql、 nacos Nacos 依赖 Java 环境来运行。我们通过下载编译后压缩包方式安装。 重点踩坑…...
ARM/Linux嵌入式面经(四):浙江大华
大华一面 嵌入式 主要是问的项目相关 标准的十五分钟 电话面 这个面试官主要问项目,我同门面的全问八股,可能面试官不一样吧 文章目录 UART串口通信的波特率,常用波特率有哪些串口通信校验方式是什么,有什么区别方便简单的奇偶校验偶校验(even parity)累加和校验CRC循环冗…...
ubuntu 18.04安装教程(详细有效)
文章目录 一、下载ubuntu 18.04镜像二、安装ubuntu1. 点击下载好的Vmware Workstation,点击新建虚拟机,选择 “自定义(高级)”,之后下一步。2. 默认配置,不需要更改,点击下一步。3. 选择 “安装程序光盘映像文件(iso)(…...
第二十一天-NumPy
目录 什么是NumPy NumPy使用 1.数组的创建 2.类型转换 3.赠删改查 4.数组运算 5.矩阵运算 什么是NumPy 1.NumPy操作的是多维数组,什么是纬度? NumPy使用 1. 安装 pip install numpy import numpy as np 2.官网: 中文官网:…...
Vue:自动按需导入element-plus图标
自动导入使用 unplugin-icons 和 unplugin-auto-import 从 iconify 中自动导入任何图标集。 完整vite.config.js参考模板 https://download.csdn.net/download/ruancexiaoming/88928539 动态导入图标参考 https://blog.csdn.net/ruancexiaoming/article/details/136568219 导入…...
魔法之线:探索string类的神秘世界
🎉个人名片: 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生 🙈个人主页🎉:GOTXX 🐼个人WeChat:ILXOXVJE 🐼本文由GOTXX原创,首发CSDN&…...
使用gnvm下载nodejs和npm
目录 前言 一、下载gnvm 二、利用gnvm下载nodejs 三、下载对应版本的npm 四、gnvm常用的命令 总结 前言 由于之前下载的版本过低,需要升级版本。但在使用gnvm升级node版本时遇到了一系列的问题,索性就把nodejs全部删除,重新用gnvm在下…...
C语言——简易版扫雷
目录 前言 编辑 游戏规则 游戏结构的分析 游戏的设计 使用多文件的好处有以下几点: 游戏代码实现 框架(test.c) game函数(test.c) InitBoard初始化(game.c) Print打印棋盘(g…...
L3自动驾驶的“双保险”:冗余EPS关键技术解析
摘要: 本文主要介绍冗余EPS的发展路径和关键技术。 引言 在乘用车领域,电动助力转向系统(Electric Power Steering,EPS)相比传统的液压助力转向系统(Hydraulic Power Steering,HPS)具有结构简单、响应迅速、能耗低等优点,因此应用很广。随着智能驾驶的发展,作为底层…...
java.net.UnknownHostException
目录 报错信息 报错分析 UnknownHostException 分析 尝试解决 域名 报错可能 网络请求: 数据库连接: Socket通信: 总结: 报错信息 java.net.UnknownHostException Caused by: java.net.UnknownHostException:at java.…...
比派电器T6白色系高速吹风机,高品质保证下,追求极致性价比
广东比派电器科技有限公司于2020年成立于东莞市松山湖高新技术企业园区融易大厦,公司聚焦于小家电的研发,生产,销售。专注在小家电的PCBA研发,产品设计,成品生产。提供小家电产品一站式解决方案,致力于成为…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
