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

【多媒体交互】Unity Kinect实现UI控件的点击

在Unity中,通过Kinect实现UI控件的点击功能,主要涉及手部追踪、坐标映射和手势检测三个核心环节。

实现步骤

初始化Kinect与关节追踪

  • 使用KinectManager获取用户ID和手部关节点(如JointType.HandLeft)的坐标。
long userId = _manager.GetPrimaryUserID();
int jointIndex = (int)KinectInterop.JointType.HandLeft;
Vector3 leftHandPos = _manager.GetJointKinectPosition(userId, jointIndex);

坐标转换:从Kinect到UI空间

  • 将手部关节点的世界坐标转换为屏幕坐标,再通过RectTransformUtility转换为UI本地坐标。
Vector3 leftHandScreenPos = Camera.main.WorldToScreenPoint(leftHandPos);
RectTransformUtility.ScreenPointToLocalPointInRectangle((RectTransform)canvas.transform, leftHandScreenPos, null, out leftHandUguiPos
);

检测手部是否位于UI控件内

  • 使用RectTransformUtility.RectangleContainsScreenPoint判断手部是否在目标按钮的矩形区域内。
if (RectTransformUtility.RectangleContainsScreenPoint(btnImage.rectTransform, leftHandScreenPos))

手势触发点击事件

  • 通过KinectInterop.HandState检测握拳动作(HandState.Closed),触发按钮事件。
KinectInterop.HandState leftHandState = _manager.GetLeftHandState(userId);
if (leftHandState == KinectInterop.HandState.Closed) {// 触发点击事件,例如调用btnImage.GetComponent<Button>().onClick.Invoke();
}

完整代码

using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;public class KinectUIController : MonoBehaviour
{// 必需组件引用[Header("Kinect References")]public KinectManager _kinectManager;public Camera _uiCamera; // 建议使用正交投影的专用UI相机[Header("UI Settings")]public Canvas _targetCanvas;public RectTransform _handCursor; // 可选的手部光标反馈// 手部状态参数private long _primaryUserId;private Vector3 _handScreenPos;private bool _isHandClosed;void Update(){if (_kinectManager == null || !_kinectManager.IsInitialized()){Debug.LogWarning("KinectManager未初始化");return;}// 1. 获取主用户ID_primaryUserId = _kinectManager.GetPrimaryUserID();if (_primaryUserId == 0) return;// 2. 获取手部坐标和状态TrackHand(KinectInterop.JointType.HandLeft);// TrackHand(KinectInterop.JointType.HandRight); // 如果需要支持右手}void TrackHand(KinectInterop.JointType handType){// 获取手部骨骼坐标(Kinect原生坐标系)Vector3 handPos = _kinectManager.GetJointKinectPosition(_primaryUserId, (int)handType);// 转换为屏幕坐标_handScreenPos = _uiCamera.WorldToScreenPoint(handPos);// 更新手部光标位置(可选视觉反馈)if (_handCursor != null){Vector2 localPos;RectTransformUtility.ScreenPointToLocalPointInRectangle(_targetCanvas.GetComponent<RectTransform>(),_handScreenPos,_uiCamera,out localPos);_handCursor.anchoredPosition = localPos;}// 3. 检测手部状态KinectInterop.HandState handState = (handType == KinectInterop.JointType.HandLeft) ?_kinectManager.GetLeftHandState(_primaryUserId) :_kinectManager.GetRightHandState(_primaryUserId);// 4. UI交互检测CheckUIInteraction(handState);}void CheckUIInteraction(KinectInterop.HandState handState){// 手势状态变化检测bool isClosing = (handState == KinectInterop.HandState.Closed);bool stateChanged = (isClosing != _isHandClosed);_isHandClosed = isClosing;// 当手部握拳时执行点击检测if (isClosing && stateChanged){// 获取所有按钮进行检测(实际项目建议使用对象池)Button[] buttons = _targetCanvas.GetComponentsInChildren<Button>();foreach (Button btn in buttons){if (IsPointerOverUIElement(btn.GetComponent<RectTransform>())){// 触发点击事件btn.onClick.Invoke();Debug.Log($"点击按钮: {btn.name}");}}}}bool IsPointerOverUIElement(RectTransform rectTransform){return RectTransformUtility.RectangleContainsScreenPoint(rectTransform,_handScreenPos,_uiCamera);}// 调试用Gizmos显示手部位置void OnDrawGizmos(){if (Application.isPlaying && _kinectManager != null){Gizmos.color = Color.green;Gizmos.DrawSphere(_uiCamera.ScreenToWorldPoint(_handScreenPos), 0.1f);}}
}

使用说明

场景配置

  • 将脚本挂载到空物体(如KinectUIController)

  • 拖拽KinectManager实例到_kinectManager字段

  • 设置UI相机(建议新建正交相机专门用于UI渲染)

// 在Inspector面板建议设置:
_uiCamera.orthographic = true;
_uiCamera.transform.position = new Vector3(0, 0, -10);
_uiCamera.nearClipPlane = 0.1f;
_uiCamera.farClipPlane = 20f;
  • 指定目标Canvas(需要设置为Screen Space - Camera模式)
  • 添加手部光标预制体(如圆形Sprite)到_handCursor字段,增强交互反馈
  • 在按钮上添加悬停效果(通过EventTrigger组件实现)

关键注意事项

  • 坐标获取方法
    必须使用GetJointKinectPosition()而非GetJointPosition(),前者直接返回Kinect坐标系的数据,避免因骨骼平滑处理导致的误差。
  • 动态UI处理
    若需检测多个UI控件,可遍历所有按钮的RectTransform,或通过GameObject.Find动态获取UI元素。

优化

  • 使用协程优化检测频率
void Start()
{StartCoroutine(CheckButtonsCoroutine());
}IEnumerator CheckButtonsCoroutine()
{while (true){// 每0.1秒检测一次,降低性能消耗yield return new WaitForSeconds(0.1f);CheckUIInteraction();}
}
  • 多手势支持扩展
// 添加其他手势检测(如手掌张开)
if (handState == KinectInterop.HandState.Open)
{// 实现悬停效果
}// 滑动手势检测
Vector3 handVelocity = _kinectManager.GetJointVelocity(_primaryUserId, (int)handType);
if (handVelocity.magnitude > 0.5f)
{// 处理滑动操作
}

相关文章:

【多媒体交互】Unity Kinect实现UI控件的点击

在Unity中&#xff0c;通过Kinect实现UI控件的点击功能&#xff0c;主要涉及手部追踪、坐标映射和手势检测三个核心环节。 实现步骤 初始化Kinect与关节追踪 使用KinectManager获取用户ID和手部关节点&#xff08;如JointType.HandLeft&#xff09;的坐标。 long userId _…...

QinQ项展 VLAN 空间

随着以太网技术在网络中的大量部署&#xff0c;利用 VLAN 对用户进行隔离和标识受到很大限制。因为 IEEE802.1Q 中定义的 VLAN Tag 域只有 12 个比特&#xff0c;仅能表示 4096 个 VLAN&#xff0c;无法满足城域以太网中标识大量用户的需求&#xff0c;于是 QinQ 技术应运而生。…...

OBS虚拟背景深度解析:无需绿幕也能打造专业教学视频(附插件对比)

想要录制教学视频却苦于背景杂乱&#xff1f;本文将手把手教你用OBS实现专业级虚拟背景效果&#xff0c;无需绿幕也能轻松营造沉浸式教学场景。文末附6个提升画面质感的免费背景资源&#xff01; 一、虚拟背景的核心价值&#xff1a;从「教师宿舍」到「虚拟讲堂」的蜕变 我们调…...

26考研——图(6)

408答疑 文章目录 一、图的基本概念二、图的存储三、图的遍历四、图的应用五、图的代码实操六、参考资料鲍鱼科技课件26王道考研书 七、总结图的存储结构邻接矩阵邻接表 图的遍历图的相关概念完全图和连通图图的连通性 关键路径学习建议 一、图的基本概念 文章链接: link 二、…...

Redis常用数据类型深度解析:从理论到最佳实践

Redis常用数据类型深度解析&#xff1a;从理论到最佳实践 一、引言二、Redis数据类型全景图三、核心数据类型详解**1. String&#xff08;字符串&#xff09;****2. Hash&#xff08;哈希表&#xff09;****3. List&#xff08;列表&#xff09;****4. Set&#xff08;集合&…...

DeepSeek-V3 模型更新,加量不加价

DeepSeek V3-0324 是 DeepSeek V3 系列的重要升级版本&#xff0c;虽然被官方称为「小版本迭代」&#xff0c;但其在技术能力、开源策略和用户体验上均有显著提升。以下是主要新特性功能和核心变化&#xff1a; 推理能力 基准测试性能显著提升&#xff1a; MMLU-Pro&#xff1…...

Vue项目的 Sass 全局基础样式格式化方案,包含常见元素的样式重置

步骤 1&#xff1a;创建全局样式文件 在项目中创建文件&#xff1a;src/assets/scss/global.scss 内容如下&#xff1a; // 全局盒模型设定&#xff08;边框计入宽高&#xff09; *, *::before, *::after {box-sizing: border-box;margin: 0;padding: 0; }// 基础元素样式重置…...

【Spring篇】Spring的生命周期

一、Bean 生命周期的核心阶段 1. 实例化&#xff08;Instantiation&#xff09; • 触发时机&#xff1a;容器启动时&#xff08;单例 Bean&#xff09;或请求时&#xff08;原型 Bean&#xff09;。 • 实现方式&#xff1a; 通过反射&#xff08;Class.newInstance() 或构造…...

Qt中通过QLabel实时显示图像

Qt中的QLabel控件用于显示文本或图像&#xff0c;不提供用户交互功能。以下测试代码用于从内置摄像头获取图像并实时显示&#xff1a; Widgets_Test.h&#xff1a; class Widgets_Test : public QMainWindow {Q_OBJECTpublic:Widgets_Test(QWidget *parent nullptr);~Widgets…...

[数据结构]1.时间复杂度和空间复杂度

这里写目录标题 1. 算法复杂度2. 时间复杂度2.1 执行次数2.2 大O渐进表示法2.3 常见时间复杂度计算eg1eg2eg3eg4eg5eg6eg7eg8eg9 3. 空间复杂度eg1eg2eg3eg4 4. 常见复杂度对比5. 复杂度练习eg1 1. 算法复杂度 衡量一个算法的好坏&#xff0c;一般是从时间空间两个维度来衡量&…...

【每日算法】Day 6-1:哈希表从入门到实战——高频算法题(C++实现)

摘要 &#xff1a;掌握高频数据结构&#xff01;今日深入解析哈希表的核心原理与设计实现&#xff0c;结合冲突解决策略与大厂高频真题&#xff0c;彻底掌握O(1)时间复杂度的数据访问技术。 一、哈希表核心思想 哈希表&#xff08;Hash Table&#xff09; 是一种基于键值对的…...

物联网平台架构介绍

物联网是连接物理设备、传感器、软件等的网络系统&#xff0c;使设备能够自动收集、交换和处理数据&#xff0c;实现智能化识别、定位、跟踪、监控和管理。随着物联网技术的飞速发展&#xff0c;物联网平台架构的设计变得至关重要&#xff0c;它决定了物联网系统的性能、可扩展…...

TCP/IP三次握手的过程,为什么要3次?

一&#xff1a;过程 第一次&#xff08;SYN&#xff09;&#xff1a; 客户端发送一个带有SYN标志的TCP报文段给服务器&#xff0c;设置SYN1&#xff0c;并携带初始序列号Seqx&#xff08;随机值&#xff09;&#xff0c;进入SYN_SENT状态。等待服务器相应。 第二次&#xff08…...

开源模型应用落地-语音转文本-whisper模型-AIGC应用探索(四)

一、前言 语音转文本技术具有重要价值。它能提高信息记录和处理的效率,使人们可以快速将语音内容转换为可编辑、可存储的文本形式,方便后续查阅和分析。在教育领域,可帮助学生更好地记录课堂重点;在办公场景中,能简化会议记录工作。同时,该技术也为残障人士提供了便利,让…...

Qt开发:QInputDialog的使用

文章目录 一、QInputDialog的介绍二、 QInputDialog的基本用法三、使用 QInputDialog的实例四、QInputDialog的信号与槽 一、QInputDialog的介绍 QInputDialog 是 Qt 提供的一个对话框类&#xff0c;用于获取用户输入的文本、整数或浮点数。它提供了简单易用的静态方法和可定制…...

【系统架构设计师】软件质量管理

目录 1. 说明2. 软件质量保证2.1 说明2.2 质量保证的主要目标2.3 目标2.4 主要作用2.5 主要任务 3. 软件质量保证3.1 说明3.2 ISO 90003.3 CMM 4. 例题4.1 例题1 1. 说明 1.软件质量就是软件与明确地和隐含地定义的需求相一致的程度&#xff0c;更具体地说&#xff0c;软件质量…...

医院挂号预约小程序|基于微信小程序的医院挂号预约系统设计与实现(源码+数据库+文档)

医院挂号预约小程序 目录 基于微信小程序的医院挂号预约系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、小程序用户端 2、系统服务端 &#xff08;1&#xff09; 用户管理 &#xff08;2&#xff09;医院管理 &#xff08;3&#xff09;医生管理 &#xf…...

UE4-UE5虚幻引擎,前置学习一--Console日志输出经常崩溃,有什么好的解决办法

有些差异 这么牛逼的引擎&#xff0c;居然有这种入门级别的问题&#xff0c;一触发清理&#xff0c;大概率(80%)会崩溃 无论虚幻5还是UE4都有这个问题&#xff0c;挺烦人的 实在忍不了了&#xff0c;这次&#xff0c;今天 就想问问有什么好的处理方法么&#xff1f;&#x…...

javaSE.多维数组

1 final 引用类型 final int[] arr 继承Object 的引用类型&#xff0c;不能改变引用的对象 存的其实是引用 数组类型数组&#xff0c;其实存的是引用 int [][] arr new int[][] { {1,2,3}, {4,5,6} };int [] a arr[0]; int [] b arr[1];...

Linux输入系统应用编程

什么是输入系统 Linux 输入系统是处理用户输入设备(如键盘、鼠标、触摸屏、游戏手柄等)的软件架构。在应用编程层面&#xff0c;它提供了与这些输入设备交互的接口。 主要组成部分 输入设备驱动层&#xff1a;直接与硬件交互的驱动程序 输入核心层&#xff1a;内核中的输入子…...

leetcode11.盛水最多的容器

双指针问题&#xff0c;指向前后边界&#xff0c;每次只移动高度较小的那个 class Solution { public:int maxArea(vector<int>& height) {int leftIndex0,rightIndexheight.size()-1;int result0;while(leftIndex<rightIndex){resultmax(result,(rightIndex-lef…...

ngx_http_index_loc_conf_t

定义在 src\http\modules\ngx_http_index_module.c typedef struct {ngx_array_t *indices; /* array of ngx_http_index_t */size_t max_index_len; } ngx_http_index_loc_conf_t; ngx_http_index_loc_conf_t 是 Nginx 中用于管理 index 指…...

[C++面试] 你了解视图吗?

一、入门 1、什么是 C 视图&#xff08;View&#xff09;&#xff1f;请简要说明其概念和用途 它提供了对序列&#xff08;如数组、容器等&#xff09;的非拥有性、只读或可写的访问。&#xff08;就像是个透明的放大镜&#xff0c;它能让你去看一组数据&#xff0c;但它自己…...

NetMizer-日志管理系统-远程命令执行漏洞挖掘

漏洞描述&#xff1a;NetMizer 日志管理系统 cmd.php中存在远程命令执行漏洞&#xff0c;攻击者通过传入 cmd参数即可命令执行 1.fofa搜素语句 title"NetMizer 日志管理系统" 2.漏洞验证 网站页面 验证POC /data/manage/cmd.php?cmdid...

UDP通信实现

一、Socket简介&#xff08;套接字) TCP/IP 五层网络模型的应用层编程接口称为Socket API, Socket( 套接字 ) &#xff0c;它是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。 一个套接字就是网络上进程通信的一端&#xff0c;提供了应用层进程利用网络协议交换…...

Browserlist 使用指南:应对浏览器兼容性问题的解决方案

前言 在前端开发中&#xff0c;我们经常需要处理各种不同的浏览器兼容性问题。每个浏览器的版本众多&#xff0c;处理这些问题可能会让人感到头疼。幸运的是&#xff0c;有一个名为 Browserlist 的工具可以大大简化这项工作。本文将介绍 Browserlist 的作用和使用方法&#xf…...

[蓝桥杯 2023 省 A] 异或和之和

题目来自洛谷网站&#xff1a; 暴力思路&#xff1a; 先进性预处理&#xff0c;找到每个点位置的前缀异或和&#xff0c;在枚举区间。 暴力代码&#xff1a; #include<bits/stdc.h> #define int long long using namespace std; const int N 1e520;int n; int arr[N…...

ABC391题解

A 算法标签: 模拟 #include <iostream> #include <algorithm> #include <cstring> #include <map>using namespace std;const int N 8; map<string, string> mp;int main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);mp.insert({…...

React - LineChart组件编写(用于查看每日流水图表)

一、简单版本 LineChart.tsx // src/component/LineChart/LineChart.tsx import React, {useEffect,useRef,useImperativeHandle,forwardRef,useMemo,useCallback, } from react; import * as echarts from echarts/core; import type { ComposeOption } from echarts/core; …...

什么情况下需要使用二级指针

当你需要一个函数修改另一个函数中的指针变量时&#xff08;改变指针变量的指向&#xff09;&#xff0c;你必须传递该指针的地址&#xff0c;也就是"指向指针的指针"。这是C语言中实现"引用传递"效果的标准方式。 函数A中声明了一个结构体指针变量mys&am…...

动态规划(8.下降路径最小和(medium))

题目链接&#xff1a;931. 下降路径最小和 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; 关于这⼀类题&#xff0c;由于我们做过类似的&#xff0c;因此「状态表示」以及「状态转移」是比较容易分析出来的。 比较难的地方可能就是对于「边界条件」的处理。 1. 状…...

自动插入分号机制

&#x1f4dc; JS 自动分号插入(ASI)机制详解 自动分号插入(Automatic Semicolon Insertion)是 JavaScript 中一个独特而重要的特性&#xff0c;它影响着代码的解析和执行方式。 &#x1f31f; 核心概念速览 ASI 引擎自动补充分号 当 JavaScript 解析器遇到特定语法情况时&a…...

C语言贪吃蛇实现

When the night gets dark,remember that the Sun is also a star. 当夜幕降临时&#xff0c;请记住太阳也是一颗星星。 ————《去月球海滩篇》 目录 文章目录 一、《贪吃蛇》游戏介绍 二、WIN32部分接口简单介绍 2.1 控制台窗口大小设置 2.2 命令行窗口的名称的变更 2…...

基于数据挖掘的网络入侵检测关键技术研究

标题:基于数据挖掘的网络入侵检测关键技术研究 内容:1.摘要 随着互联网的迅速发展&#xff0c;网络安全问题日益严峻&#xff0c;网络入侵行为对个人、企业和国家的信息安全构成了巨大威胁。本文的目的是研究基于数据挖掘的网络入侵检测关键技术&#xff0c;以提高网络入侵检测…...

git上传大文件到远程仓库中

git 上传大文件报错 上传大文件文件到远程仓库上面&#xff0c;出现错误&#xff08;gitee-100M,github-50M&#xff09; remote: error: File: f422c55c723a183a1944cbec840c0171042c8251 135 MB, exceeds 100.00 MB. 意思是单个文件超过100M导致上传失败。 安装LFS curl…...

计算机网络基础之三种交换技术及其性能分析

一. 交换技术基础 1. 三种交换技术 电路交换&#xff1a;用于电话网络报文交换&#xff1a;用于电报网络分组交换&#xff1a;用于现代计算机网络 2. 人类历史上的通信网络 #mermaid-svg-AeGvrkUbCkicFOIo {font-family:"trebuchet ms",verdana,arial,sans-serif;…...

ANYmal Parkour: Learning Agile Navigation for Quadrupedal Robots

ANYmal Parkour: Learning Agile Navigation for Quadrupedal Robots 研究动机解决方案技术路线感知模块运动模块导航模块补充 实验结果 ANYmal Parkour: Learning Agile Navigation for Quadrupedal Robots 研究动机 行走控制器不能依赖于稳定和周期性的步态&#xff0c;而必…...

【AI学习笔记】AI造神时代的潘式理论与智能进化

背景前摇&#xff1a; 周会分享选题&#xff0c;决定选择这篇华为蓝军部长潘少钦先生所著的文章&#xff0c;原题目为《AI如此强大&#xff0c;我是否要改行&#xff1f;》。选择这篇文章的理由是&#xff0c;其不仅有充实扎实的AI基础知识作为铺垫&#xff0c;更具有独特鲜明…...

CVE-2021-45232未授权接口练习笔记

CVE-2021-45232 是 Apache APISIX Dashboard 中的一个严重权限漏洞&#xff0c;类似于攻击者无需密码即可拿到整个网关系统的“万能钥匙”。攻击者利用此漏洞&#xff0c;可直接操控网关流量转发规则&#xff0c;甚至远程执行代码&#xff0c;引发服务器沦陷。 默认账户密码导致…...

远场分量(平面波角谱)与倏逝波

远场分量&#xff08;平面波角谱&#xff09;与倏逝波的详细解释 在光学和电磁学中&#xff0c;远场分量&#xff08;平面波角谱&#xff09;和倏逝波是描述光场传播特性的两个核心概念&#xff0c;尤其在衍射理论、近场光学和超分辨成像中至关重要。以下是它们的物理意义、数…...

修改Flutter工程中Android项目minSdkVersion配置

Flutter项目开发过程中&#xff0c;根据模板自动生成.android项目&#xff0c;其中app>build.gradle中minSdkVersion的值是19&#xff0c;但是依赖了一个三方库&#xff0c;它的Android sdk 最小版本只支持到21&#xff0c;运行报错如下&#xff1a; 我们可以手动修改.andro…...

后端返回了 xlsx 文件流,前端怎么下载处理

当后端返回一个 .xlsx 文件流时&#xff0c;前端可以通过 JavaScript 处理这个文件流并触发浏览器下载。 实现步骤 发送请求获取文件流&#xff1a; 使用 fetch 或 axios 等工具向后端发送请求&#xff0c;确保响应类型设置为 blob&#xff08;二进制数据流&#xff09;。 创建…...

js中async+await+promise的用法及常见问题总结

文章目录 概况asyncawaitPromise总结常见问题 概况 在ts/js中&#xff0c;async 和 await 是用于简化异步操作的关键字&#xff0c;一般与Promise联用&#xff08;不理解Promise可以看一下这篇《JS中Promise用法&#xff08;简要说明&#xff09;》&#xff09;。它们的核心作…...

单纯形法之大M法

1. 问题背景与标准化 在求解某些线性规划问题时&#xff0c;往往难以直接找到初始的基本可行解。特别是当约束中存在等式或 “≥” 类型的不等式时&#xff0c;我们需要引入人工变量来构造一个初始可行解。 考虑如下标准形式问题&#xff08;假设为最大化问题&#xff09;&am…...

一个数组分为两个sum相等的数组

vector&#xff0c;问是否可以拆成两部分&#xff0c;使其两部分的总和相同&#xff0c;用代码写一下 #include <iostream> #include <vector>using namespace std;bool canPartition(vector<int>& nums) {int sum 0;for (int num : nums) {sum num;…...

Socket如何实现客户端和服务器间的通信

使用Socket实现客户端和服务器间的通信 Socket是一种网络编程接口&#xff0c;广泛用于实现客户端和服务器之间的通信。在网络应用程序中&#xff0c;Socket提供了一种简单而强大的机制来建立和管理网络连接。本文将详细介绍如何使用Python的Socket模块来实现基本的客户端和服…...

崖山数据库(YashanDB)部署全流程详解

文章目录 引言 第1部分&#xff1a;环境准备 服务器要求 初始环境调整 第2部分&#xff1a;yasboot工具介绍 yasboot核心功能 yasboot进程架构 第3部分&#xff1a;YashanDB安装步骤 创建安装用户 目录规划 命令行安装流程 步骤1&#xff1a;生成配置文件 步骤2&a…...

07_JavaScript函数作用域_递归

目录 一、作用域&#xff08;重点&#xff09; 二、变量的使用规则 &#xff08;重点&#xff09; 2.1 访问规则 2.2 赋值规则 三、递归函数 &#xff08;难点&#xff09; 了解 四、对象 4.1 对象的创建 一、作用域&#xff08;重点&#xff09; 什么是作用域 ? 作用…...

基于大模型预测的初治菌阳肺结核诊疗方案研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的 二、初治菌阳肺结核概述 2.1 疾病定义与病理机制 2.2 流行病学特征 2.3 传统诊疗方法与局限性 三、大模型在初治菌阳肺结核预测中的应用原理 3.1 大模型技术简介 3.2 数据收集与预处理 3.3 模型构建与训练 3.4 模型…...

C# Modbus TCP/IP学习记录

Modbus协议中&#xff0c;角色分为主站&#xff08;Mater&#xff09;、从站&#xff08;Slave&#xff09;&#xff1b;数据类型分为线圈&#xff08;Coil&#xff09;、离散输入&#xff08;Input&#xff09;、保持寄存器&#xff08;HoldingRegister&#xff09;、输入寄存…...