深度学习篇---MediaPipe 及其人体姿态估计模型详解
文章目录
- 前言
- 一、MediaPipe 核心特点
- 跨平台支持
- 实时性能
- 模块化设计
- 预训练模型
- 二、MediaPipe 人体姿态估计模型
- 1. MediaPipe Pose (BlazePose)
- 模型特点
- 实时性能
- 两种变体
- Lite
- Heavy
- 关键点定义
- 技术细节
- 检测器
- 关键点预测器
- 支持3D姿态估计
- 2. MediaPipe Holistic
- 模型特点
- 更全面的检测
- 543个关键点
- 适用场景
- 三、模型性能比较
- 四、Python API 使用详解
- 代码示例
- 关键参数说明
- static_image_mode
- model_complexity
- smooth_landmarks
- enable_segmentation
- min_detection_confidence
- min_tracking_confidence
- 可视化关键点
- 五、实际应用技巧
- 性能优化
- 提高准确性
- 处理遮挡
- 3D 姿态利用
- 六、与其他姿态估计模型的比较
- 七、进阶应用示例
- 1. 计算关键点角度
- 2. 姿势分类
- 八、常见问题解决
- b检测不到人体
- 关键点抖动
- 性能问题
- 安装问题v3
前言
MediaPipe 是 Google 开发的一个开源跨平台框架,用于构建多模态(如视频、音频等)应用的机器学习管道。它特别适用于实时应用,提供了多种预训练模型,包括人脸检测、手势识别、人体姿态估计等。
一、MediaPipe 核心特点
跨平台支持
- 支持 Android、iOS、桌面平台(Windows、Linux、macOS)
- 支持多种编程语言(Python、C++、JavaScript 等)
- 可以在 CPU 上高效运行,不需要专用 GPU
实时性能
- 优化后的模型可以在移动设备上实时运行
- 典型的人体姿态估计模型在高端手机上能达到 30+ FPS
模块化设计
- 提供预构建的解决方案(Solutions)
- 也可以自定义 ML 管道(Graphs)
预训练模型
- 提供多种开箱即用的模型
- 模型针对移动设备进行了优化
二、MediaPipe 人体姿态估计模型
MediaPipe 提供了两种主要的人体姿态估计解决方案:
1. MediaPipe Pose (BlazePose)
模型特点
####高精度
高精度:识别 33 个关键点(包括面部、躯干和四肢)
实时性能
实时性能:在移动设备上也能实时运行
两种变体
两种变体:
Lite
Lite:轻量级版本,适合低端设备
Heavy
Heavy:高精度版本,适合性能较好的设备
关键点定义
模型检测的 33 个关键点包括:
0-9: 面部关键点
10: 右肩
11: 左肩
12: 右肘
13: 左肘
14: 右腕
15: 左腕
16-21: 右手关键点
22-27: 左手关键点
28: 右髋
29: 左髋
30: 右膝
31: 左膝
32: 右踝
33: 左踝
技术细节
使用了一种称为 BlazePose 的拓扑结构
采用两阶段检测方法:
检测器
检测器:定位人体边界框
关键点预测器
关键点预测器:在边界框内预测关键点
支持3D姿态估计
支持 3D 姿态估计(提供关键点的 z 坐标)
2. MediaPipe Holistic
模型特点
更全面的检测
更全面的检测:同时检测人体姿态、面部关键点和手部关键点
543个关键点
543 个关键点:
33 个人体姿态关键点
468 个面部关键点
21×2=42 个手部关键点(每只手 21 个)
适用场景
需要同时分析全身姿态、面部表情和手势的应用
舞蹈动作分析、全身交互系统等
三、模型性能比较
模型 关键点数 输入分辨率 推理时间(CPU) 适用场景
Pose Lite 33 256x256 ~5ms 移动设备实时应用
Pose Heavy 33 256x256 ~10ms 需要更高精度的应用
Holistic 543 256x256 ~15ms 需要全身分析的应用
四、Python API 使用详解
代码示例
import cv2
import mediapipe as mp# 初始化模型
mp_pose = mp.solutions.pose
pose = mp_pose.Pose(static_image_mode=False, # 视频流模式model_complexity=1, # 0: Lite, 1: Full, 2: Heavysmooth_landmarks=True, # 平滑关键点enable_segmentation=False, # 是否输出分割掩码min_detection_confidence=0.5,min_tracking_confidence=0.5
)# 处理图像
image = cv2.imread("image.jpg")
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
results = pose.process(image_rgb)# 获取关键点
if results.pose_landmarks:for landmark in results.pose_landmarks.landmark:print(f"x: {landmark.x}, y: {landmark.y}, z: {landmark.z}, visibility: {landmark.visibility}")
关键参数说明
static_image_mode
True:将输入视为静态图像,每帧都运行检测器
False:视频流模式,使用跟踪优化性能
model_complexity
0:Lite 版本
1:Full 版本(默认)
2:Heavy 版本
smooth_landmarks
启用时会对关键点进行时间平滑处理
enable_segmentation
启用时会输出人体分割掩码
min_detection_confidence
检测阶段的最小置信度阈值(0-1)
min_tracking_confidence
跟踪阶段的最小置信度阈值(0-1)
可视化关键点
mp_drawing = mp.solutions.drawing_utils# 绘制关键点和连接线
annotated_image = image.copy()
mp_drawing.draw_landmarks(annotated_image,results.pose_landmarks,mp_pose.POSE_CONNECTIONS,landmark_drawing_spec=mp_drawing.DrawingSpec(color=(255,0,0), thickness=2),connection_drawing_spec=mp_drawing.DrawingSpec(color=(0,255,0), thickness=2)
)cv2.imshow("Pose", annotated_image)
cv2.waitKey(0)
五、实际应用技巧
性能优化
对于视频流,使用 static_image_mode=False
根据需求选择合适的模型复杂度
降低输入分辨率可以提高速度
提高准确性
使用 Heavy 模型
确保人物在图像中足够大
适当调整置信度阈值
处理遮挡
利用 visibility 属性判断关键点是否可见
使用平滑处理减少抖动
3D 姿态利用
z 坐标表示深度(相对于髋部的相对深度)
可用于判断身体部位的相对位置
六、与其他姿态估计模型的比较
特性 MediaPipe Pose OpenPose MoveNet PoseNet
关键点数 33 25/18 17 17
3D 支持 是 否 否 否
移动端优化 优秀 一般 优秀 良好
实时性能 优秀 一般 优秀 良好
安装复杂度 低 高 中 中
语言支持 多语言 主要C++ Python/TF Python/TF
七、进阶应用示例
1. 计算关键点角度
def calculate_angle(a, b, c):"""计算三个关键点之间的角度"""a = np.array([a.x, a.y])b = np.array([b.x, b.y])c = np.array([c.x, c.y])ba = a - bbc = c - bcosine_angle = np.dot(ba, bc) / (np.linalg.norm(ba) * np.linalg.norm(bc))angle = np.arccos(cosine_angle)return np.degrees(angle)# 计算肘部角度
if results.pose_landmarks:shoulder = results.pose_landmarks.landmark[mp_pose.PoseLandmark.LEFT_SHOULDER]elbow = results.pose_landmarks.landmark[mp_pose.PoseLandmark.LEFT_ELBOW]wrist = results.pose_landmarks.landmark[mp_pose.PoseLandmark.LEFT_WRIST]angle = calculate_angle(shoulder, elbow, wrist)print(f"Elbow angle: {angle:.2f} degrees")
2. 姿势分类
def classify_posture(landmarks):# 获取关键点left_shoulder = landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER]right_shoulder = landmarks[mp_pose.PoseLandmark.RIGHT_SHOULDER]left_hip = landmarks[mp_pose.PoseLandmark.LEFT_HIP]right_hip = landmarks[mp_pose.PoseLandmark.RIGHT_HIP]left_ear = landmarks[mp_pose.PoseLandmark.LEFT_EAR]# 计算脊柱角度spine_angle = calculate_angle(np.array([left_shoulder.x, left_shoulder.y-0.1]), # 肩膀上方的点np.array([left_shoulder.x, left_shoulder.y]),np.array([left_hip.x, left_hip.y]))# 分类逻辑if 160 < spine_angle < 200:return "Good posture"else:return "Bad posture (slouching)"
八、常见问题解决
b检测不到人体
- 检查置信度阈值是否设置过高
- 确保人物在图像中足够大
- 尝试使用静态图像模式
关键点抖动
- 启用 smooth_landmarks=True
- 增加 min_tracking_confidence
- 在应用层添加额外的平滑滤波
性能问题
- 降低模型复杂度
- 减小输入图像尺寸
- 对于视频流,确保使用 static_image_mode=False
安装问题v3
- 确保使用最新版本的 MediaPipe
- 检查 Python 版本兼容性
- 在干净的环境中安装
MediaPipe 的人体姿态估计模型为开发者提供了强大且易用的工具,特别适合需要实时性能的应用场景。通过合理配置参数和适当的后处理,可以在各种应用中实现准确的人体姿态分析。
相关文章:
深度学习篇---MediaPipe 及其人体姿态估计模型详解
文章目录 前言一、MediaPipe 核心特点跨平台支持实时性能模块化设计预训练模型 二、MediaPipe 人体姿态估计模型1. MediaPipe Pose (BlazePose)模型特点实时性能两种变体LiteHeavy 关键点定义技术细节检测器关键点预测器支持3D姿态估计 2. MediaPipe Holistic模型特点更全面的检…...
Embedding 的数学特性与可视化解析
一、向量空间的可视化解码 1.1 GloVe 词向量实例 取词向量维度 d 50 d50 d50 的 GloVe 嵌入示例: king_vec [[0.50451, 0.68607, -0.59517, -0.022801, 0.60046, -0.13498, -0.08813, 0.47377, -0.61798, -0.31012, -0.076666, 1.493, -0.034189, -0.98173, 0…...
“睿思 BI” 系统介绍
“睿思 BI” 商业智能系统是由成都睿思商智科技有限公司自主研发的企业数据分析系统,以下是对该系统的详细介绍: 功能模块 : • 数据集成与准备 :支持数据导入、数据填报、数据 ETL 等功能,可抽取企业在经营过程中产生…...
[ctfshow web入门] web69
信息收集 使用cinclude("php://filter/convert.base64-encode/resourceindex.php");读取的index.php if(isset($_POST[c])){$c $_POST[c];eval($c); }else{highlight_file(__FILE__); }解题 查目录 百度了一下有哪些打印函数,var_export能用 var_exp…...
AI赋能研究工作:我的深度学习助手使用体验(DeepResearch)
在过去一年多的时间里,AI工具在国内经历了数次大规模普及与质量波动。作为一名研究工作者,我一直在寻找稳定高效的AI解决方案来辅助日常工作。今天想分享一个让我受益良多的平台——GPTYOU.com 为什么它值得一试? 和市面上众多同类产品相比…...
Vue基础(8)_监视属性、深度监视、监视的简写形式
监视属性(watch): 1.当被监视的属性变化时,回调函数(handler)自动调用,进行相关操作。 2.监视的属性必须存在,才能进行监视!! 3.监视的两种写法: (1).new Vue时传入watch配置 (2).通过vm.$watc…...
STM32硬件I2C驱动OLED屏幕
本文基于STM32硬件I2C驱动SSD1306 OLED屏幕,提供完整的代码实现及关键注意事项,适用于128x32或128x64分辨率屏幕。代码通过模块化设计,支持显示字符、数字、汉字及位图,并优化了显存刷新机制。 零、完整代码 完整代码: 1&#x…...
2021-11-16 C++歌手去掉2最高2最低均分
缘由大学一年级c编程题目-编程语言-CSDN问答 void 歌手去掉2最高2最低均分() {//缘由https://ask.csdn.net/questions/7551893?spm1005.2025.3001.5141int n 0, h 0, j 0, qd[6]{0}, fs[50]{0};scanf_s("%d", &n); j n; qd[2] qd[3] INT_MAX; qd[0] qd[…...
Vue插槽(Slots)详解
文章目录 1. 插槽简介1.1 什么是插槽?1.2 为什么需要插槽?1.3 插槽的基本语法 2. 默认插槽2.1 什么是默认插槽?2.2 默认插槽语法2.3 插槽默认内容2.4 默认插槽实例:创建一个卡片组件2.5 Vue 3中的默认插槽2.6 默认插槽的应用场景 …...
[虚幻官方教程学习笔记]深入理解实时渲染(An In-Depth Look at Real-Time Rendering)
原英文教程地址深入理解实时渲染(An In-Depth Look at Real-Time Rendering) 文章目录 1.Intro to An In-Depth Look at Real-Time RenderingCPU VS GPUDeferred VS Forward 2. Before Rendering and OcclusionCulling计算的步骤使用console command:fre…...
【bibtex4word】在Word中高效转换bib参考文献,Texlive环境安装bibtex4word插件
前言 现已退出科研界,本人水货一个。希望帮到有缘人 本篇关于如何将latex环境中的参考文献bib文件转化为word,和一些踩坑记录。 可以看下面的资料进行配置,后面的文字是这些资料的补充说明。 参考文章:https://blog.csdn.net/g…...
torch.nn 下的常用深度学习函数
1. 层(Layers) 这些函数用于定义神经网络中的各种层,是构建模型的基础模块。 torch.nn.Linear 用途:全连接层(也称为线性层)。用于将输入数据从一个维度映射到另一个维度,常用于神经网络的隐藏…...
(2025)图文解锁RAG从原理到实操
什么是RAG RAG(检索增强生成)是一种将语言模型与可搜索知识库结合的方法,主要包含以下关键步骤: 数据预处理 加载:从不同格式(PDF、Markdown等)中提取文本分块:将长文本分割成短序列(通常100-500个标记),作为检索单元…...
PXE_Kickstart_无人值守自动化安装系统
文章目录 1. PXE2. 配置服务参数2.1 tftp服务配置2.2 dhcp服务配置2.3 http服务配置 3. 配置PXE环境3.1 网络引导文件pxelinux.03.2 挂载镜像文件3.3 创建配置文件default3.4 复制镜像文件和驱动文件3.5 修改default文件3.6 配置ks.cfg文件 4. PXE客户端4.1 创建虚拟机…...
Redis经典面试题
本篇文章简单介绍一些 Redis 常见的面试题。 Redis 是什么? Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&…...
Vite Proxy配置详解:从入门到实战应用
Vite Proxy配置详解:从入门到实战应用 一、什么是Proxy代理? Proxy(代理)是开发中常用的解决跨域问题的方案。Vite内置了基于http-proxy的代理功能,可以轻松配置API请求转发。 二、基础配置 在vite.config.js中配置…...
用AI写简历是否可行?
让AI批量写简历然后投简历是绝对不行的!!! 为什么不行,按照 "招聘经理" 工作经历举例: ai提示词:请帮我写一份招聘经理的工作经历内容: 招聘经理 | XXX科技有限公司 | 2020年…...
投影显示技术全解析:主流方案对比与雷克赛恩 CyberPro1 的核心优势
目录 一、主流投影显示技术深度解析 (一)LCD 投影技术 (二)DP 投影技术 (三)3LCD 技术 (四)FSHD 技术 FSHD 技术优势 二、雷克赛恩 CyberPro1 核心优势对比分析 (…...
Skyvern:用 AI+视觉驱动浏览器自动化
Skyvern:用 AI视觉驱动浏览器自动化 一、前言二、项目概览2.1 Skyvern 项目简介2.2 代码结构与模块划分 三、环境搭建与快速上手3.1 环境准备3.1.1 系统与依赖3.1.2 克隆项目3.1.3 安装 Python 依赖3.1.4 配置环境变量3.1.5 启动服务 3.2 验证安装 四、核心功能与实…...
101alpha第九
alpha ((rank(ts_arg_max((vwap - close), 3)) * rank(ts_delta(volume, 3))) 今天我们来学下这个 这个是两个rank操作符相加,然后和另外一个操作符相乘,我们来看实现了什么 vwap - close:这部分先计算成交量加权平均价(vwap&am…...
蓝牙身份证阅读器使用Uniapp调用二次开发demo
<template> <view class"content"> <view class"search" :loading"searchingstatus" click"searchbluetooth"> {{searchingstatus?"搜索中":"搜索蓝牙阅读器"}} </view> …...
好用的shell终端工具
FinalShell SSH工具,服务器管理 FinalShell SSH工具,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux,版本4.5.12,更新日期2024.10.30 - FinalShell官网...
OSPF不规则区域划分
1、建立一条虚链路 vlink 可以被视为是⻣⼲区域的⼀段延伸。 这⼀条虚拟的链路,只能够跨域⼀个⾮⻣⼲区域。 [r2-ospf-1-area-0.0.0.1]vlink-peer 3.3.3.3 [r3-ospf-1-area-0.0.0.1]vlink-peer 2.2.2.2 在没有建立虚链路之前,r1是不能ping r4的。vlink建⽴的邻居关…...
复习javascript
1.修改元素内的内容 <div>zsgh</div> <script> const box1document.querySelector("div") box1.innerText"ppp" box1.innerHtml<h1>修改</h1> </script> 2.随机点名练习 <!DOCTYPE html> <html lang…...
海盗王64位服务端+32位客户端3.0版本
经过多天的尝试,终于把海盗王3.0的服务端改成了64位的,包括AccountServer GroupServer GameServer GateServer。 客户端则保留了32位。 服务端改成64位的好处是GameServer可以只启动一个就开全部地图,大概6G内存左右,直接将跳…...
【从零实现JsonRpc框架#2】Muduo库介绍
1.基本概念 Muduo 由陈硕大佬开发,是一个基于非阻塞IO和事件驱动的C高并发TCP网络编程库。它是一款基于主从Reactor模型的网络库,其使用的线程模型是 one loop per thread。 1.1 主从 Reactor 模型 主 Reactor(MainReactor,通常…...
如何创建伪服务器,伪接口
创建伪接口一般是用于模拟真实接口的行为,以便在开发和测试过程中进行使用,以下是一些常见的创建伪接口的方法: 使用 Web 框架搭建: Python 和 Flask:Flask 是一个轻量级的 Python Web 框架。示例代码如下:…...
NX949NX952美光科技闪存NX961NX964
NX949NX952美光科技闪存NX961NX964 在半导体存储领域,美光科技始终扮演着技术引领者的角色。其NX系列闪存产品线凭借卓越的性能与创新设计,成为数据中心、人工智能、高端消费电子等场景的核心组件。本文将围绕NX949、NX952、NX961及NX964四款代表性产品…...
vue配置代理解决前端跨域的问题
文章目录 一、概述二、报错现象三、通过配置代理来解决修改request.js中的baseURL为/api在vite.config.js中增加代理配置 四、参考资料 一、概述 跨域是指由于浏览器的同源策略限制,向不同源(不同协议、不同域名、不同端口)发送ajax请求会失败 二、报错现象 三、…...
深入解析Vue3中ref与reactive的区别及源码实现
深入解析Vue3中ref与reactive的区别及源码实现 前言 Vue3带来了全新的响应式系统,其中ref和reactive是最常用的两个API。本文将从基础使用、核心区别到源码实现,由浅入深地分析这两个API。 一、基础使用 1. ref import { ref } from vueconst count…...
Java Bean容器详解:核心功能与最佳使用实践
在Java企业级开发中,Bean容器是框架的核心组件之一,它通过管理对象(Bean)的生命周期、依赖关系等,显著提升了代码的可维护性和扩展性。主流的框架如Spring、Jakarta EE(原Java EE)均提供了成熟的…...
Xilinx Kintex-7 XC7K325T-2FFG676I 赛灵思 FPGA
XC7K325T-2FFG676I 属于 Kintex-7 FPGA ,低功耗与合理成本的应用市场,可提供比前代产品两倍的性价比提升和卓越的系统集成能力。该器件于 28 nm 工艺节点制造,速度等级为 -2,适合对时序要求严格但预算有限的系统设计。 产品架构与…...
AI实战笔记(1)AI 的 6 大核心方向 + 学习阶段路径
一、机器学习(ML) 目标:用数据“训练”模型,完成分类、回归、聚类等任务。 学习阶段: (1)基础数学:线性代数、概率统计、微积分(适度) (2…...
Ceph集群故障处理 - PG不一致修复
Ceph集群故障处理 - PG不一致修复 目录故障现象故障分析故障定位修复过程磁盘状态检查OSD存储结构检查修复分析故障总结问题原因修复方法后续建议经验教训最佳实践 参考资料 # ceph -v ceph version 14.2.22目录 故障现象故障分析故障定位修复过程磁盘状态检查OSD存储结构检查…...
【前端】每日一道面试题3:如何实现一个基于CSS Grid的12列自适应布局?
要实现一个基于CSS Grid的12列自适应布局,关键在于利用网格系统的灵活性和响应式设计能力。以下是具体实现步骤及核心代码示例: 一、基础网格容器定义 创建网格容器 使用display: grid将父元素定义为网格容器: .container {display: grid;gr…...
leetcode 349. Intersection of Two Arrays
题目描述 题目限制0 < nums1[i], nums2[i] < 1000,所以可以开辟一个1001个元素的数组来做哈希表。 class Solution { public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {vector<int> table(1001,0…...
机器学习 day01
文章目录 前言一、机器学习的基本概念二、数据集的加载1.玩具数据集2.联网数据集3.本地数据集 三、数据集的划分四、特征提取1.稀疏矩阵与稠密矩阵2.字典列表特征提取3.文本特征提取 前言 目前我开始学习机器学习部分的相关知识,通过今天的学习,我掌握了…...
C++STL——priority_queue
优先队列 前言优先队列仿函数头文件 前言 本篇主要讲解优先队列及其底层实现。 优先队列 优先队列的本质就是个堆,其与queue一样,都是容器适配器,不过优先队列是默认为vector实现的。priority_queue的接口优先队列默认为大根堆。 仿函数 …...
DS18B20温度传感器
1.基本信息 测温范围为一55~ 125℃;3.3/5V的供电电压;-10~85内精度较高; 典型的温度转换时间为 750ms(12 位分辨率); 输出最小分辨率:0.0625; 采用单总线数据格式&am…...
《Python星球日记》 第50天:深度学习概述与环境搭建
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、什么是深度学习?它与传统机器学习的区别1. 深度学习的定义2. 深…...
BUUCTF——Cookie is so stable
BUUCTF——Cookie is so stable 进入靶场 页面有点熟悉 跟之前做过的靶场有点像 先简单看一看靶场信息 有几个功能点 flag.php 随便输了个admin 根据题目提示 应该与cookie有关 抓包看看 构造payload Cookie: PHPSESSIDef0623af2c1a6d2012d57f3529427d52; user{{7*7}}有…...
Java 基础面试题
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
bcm5482 phy 场景总结
1,BCM5482是一款双端口10/100/1000BASE-T以太网PHY芯片,支持多种速率和双工模式。其配置主要通过MDIO(Management Data Input/Output)接口进行,MDIO接口用于访问PHY芯片内部的寄存器,从而配置网络速率、双工模式以及其他相关参数。 a,具体以下面两种场景举例 2. 寄存器和…...
小程序多线程实战
在小程序开发中,由于微信小程序的运行环境限制,原生并不支持传统意义上的多线程编程,但可以通过以下两种核心方案实现类似多线程的并发处理效果,尤其在处理复杂计算、避免主线程阻塞时非常关键: 一、官方方案ÿ…...
PPT图表怎么制作?说5款自己使用过的PPT图表制作工具
PPT图表怎么制作?准备一份吸引人的PPT演示文稿时,图表往往能起到画龙点睛的作用。但是,对于很多人来说,制作既美观又专业的图表却不是一件容易的事情。今天,我们就来聊聊如何利用一些优秀的工具制作PPT图表。 1、亿图图…...
渠道销售简历模板范文
模板信息 简历范文名称:渠道销售简历模板范文,所属行业:其他 | 职位,模板编号:KRZ3J3 专业的个人简历模板,逻辑清晰,排版简洁美观,让你的个人简历显得更专业,找到好工作…...
数据库实验10
设计性实验 1.实验要求 1.编写函数FsumXXX,1~n(参数)求和; GO CREATE FUNCTION Fsum065 (n INT) RETURNS INT AS BEGIN DECLARE sum INT 0 WHILE n > 0 BEGIN SET sum sum n SET n n - 1 END RETURN sum END …...
C#异步Task,await,async和Unity同步协程
标题 TaskawaitasyncUnity协程 Task Task是声明异步任务的必要关键字,也可以使用Task<>泛型来定义Task的返回值。 await await是用于等待一个Task结束,否则让出该线程控制权,让步给其他线程,直到该Task结束才往下运行。 …...
【ML-Agents】ML-Agents示例项目导入unity报错解决
最近在跑ML-Agents的示例代码,无奈往unity中导入项目后,就出现报错。本文简要描述了各个报错的解决方法。 文章目录 一、error CS0234: The type or namespace name InputSystem does not exist in the namespace UnityEngine (are you missing an assem…...
【Web前端开发】HTML基础
Web前端开发是用来直接给用户呈现一个一个的网页,主要包含实现用户的结构(HTML)、样式(CSS)、交互(JavaScript)。然而一个软件通常是由后端和前端完成的。可以查阅文档:HTML 教程 (w…...