news 2026/6/10 10:03:47

Azure Kinect 从入门到入坟

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Azure Kinect 从入门到入坟

要开始折腾折腾 Azure Kinect 了,注意它和 Kinect 并不是一个东西。


左边这个是 Azure Kinect,右边那个是 Kinect,或者叫 Microsoft Kinect 或者 Kinect for Windows,它两既长得不一样,用法也不一样,所以不要弄混了。Azure Kinect 用起来要简单一些。

Azure Kinect 的官方文档网址是 aka.ms/kinectdocs,它会跳转到 https://learn.microsoft.com/zh-cn/previous-versions/azure/kinect-dk/,我们也可以直接访问这个网址。这个是机翻的中文文档,内容不多,按照文档一步步操作就行,没什么难度。唯一要吐槽的就是这个鸡翻,没错,就像是鸡翻译的。举几个例子。

这里 “正文” 其实是 body。然后还有

这里标题中的 “车身框架” 和 下面的 “主体框架” 实际上都是 body frame,后面的 “主体索引映射” 是 body index map。更离谱的是下面这个。

“尸体” ??body 愣是给干成了 “尸体”,你就说是不是从入门到入坟吧。

如果想看英文原文的话,可以把文档连接中的zh_cn替换成en-us就可以了。虽然官方文档的内容不算多,但也不是这一篇博客能完全涵盖的,这里只是告诉大家如何正确的开始,正所谓师傅领进门。

言归正传。

安装SDK

Azure Kinect 有两个 SDK:

  • 一个是传感器 SDK,用来获取传感器数据,从这里下载安装就行。

  • 另一个是骨架追踪的 SDK,用来获取身体骨架关节数据,从这里下载安装。下载的时候我们选择 msi 版本。

第一个 SDK 只能装在 C 盘,第二个可以自由选择安装路径。这两个 SDK 在安装目录的tools目录里下也提供了一些工具给我们,可以将tools目录添加到环境变量,方便使用。

比如传感器 SDK 提供的k4aviewer.exe可以查看摄像头和麦克风数据,k4arecorder.exe可以用来录制视频。骨架追踪 SDK 提供的k4abt_simple_3d_viewer.exe可以用来查看人体骨骼关节。我们可以用它们来验证设备是否正常工作。

需要注意的是 Azure Kinect 必须连接到 USB 3.0 接口,大多数电脑用蓝色标记,联想电脑在 USB 接口旁边有 SS 字样标记。

代码获取数据

官网的示例可以直接跑,我们先来创建一个c++控制台工程,我用的是 visual studio 2022。在解决方案管理器中右键项目名,点击管理 NuGet 程序包


打开包管理页面后,在搜索框中输入Microsoft.Azure.Kinect,然后依次点击前两个包,在右边详情页点击安装。因为我已经安装过来,所以显示的是卸载按钮。

  • Microsoft.Azure.Kinect.Sensor包用来获取传感器数据;
  • Microsoft.Azure.Kinect.BodyTracking包用来获取人体骨架关节,如果不做人体追踪,只安装第一个就行。

依赖包会安装到项目的packages目录下,还自动生成了packages.config文件。不得不说,c嘎嘎终于鸟枪换炮了,包管理还是香。当然,你也可以用以前的那种方式去依赖之前安装的 SDK,头文件和库文件都在安装目录的sdk目录下。

添加完依赖以后,就可以导入相关头文件开始编程了。

#include<k4a/k4a.h>#include<k4abt.h>

传感器相关的功能都在k4a下,人体追踪相关的功能都在k4abt下,bt就是BodyTracking 的缩写。

把构建您的第一个身体追踪应用程序的示例程序拷贝到cpp文件中。

#include<stdio.h>#include<stdlib.h>#include<k4a/k4a.h>#include<k4abt.h>#defineVERIFY(result,error)\if(result!=K4A_RESULT_SUCCEEDED)\{\printf("%s \n - (File: %s, Function: %s, Line: %d)\n",error,__FILE__,__FUNCTION__,__LINE__);\exit(1);\}\intmain(){k4a_device_tdevice=NULL;VERIFY(k4a_device_open(0,&device),"Open K4A Device failed!");// Start camera. Make sure depth camera is enabled.k4a_device_configuration_tdeviceConfig=K4A_DEVICE_CONFIG_INIT_DISABLE_ALL;deviceConfig.depth_mode=K4A_DEPTH_MODE_NFOV_UNBINNED;deviceConfig.color_resolution=K4A_COLOR_RESOLUTION_OFF;VERIFY(k4a_device_start_cameras(device,&deviceConfig),"Start K4A cameras failed!");k4a_calibration_tsensor_calibration;VERIFY(k4a_device_get_calibration(device,deviceConfig.depth_mode,deviceConfig.color_resolution,&sensor_calibration),"Get depth camera calibration failed!");k4abt_tracker_ttracker=NULL;k4abt_tracker_configuration_ttracker_config=K4ABT_TRACKER_CONFIG_DEFAULT;VERIFY(k4abt_tracker_create(&sensor_calibration,tracker_config,&tracker),"Body tracker initialization failed!");intframe_count=0;do{k4a_capture_tsensor_capture;k4a_wait_result_tget_capture_result=k4a_device_get_capture(device,&sensor_capture,K4A_WAIT_INFINITE);if(get_capture_result==K4A_WAIT_RESULT_SUCCEEDED){frame_count++;k4a_wait_result_tqueue_capture_result=k4abt_tracker_enqueue_capture(tracker,sensor_capture,K4A_WAIT_INFINITE);k4a_capture_release(sensor_capture);// Remember to release the sensor capture once you finish using itif(queue_capture_result==K4A_WAIT_RESULT_TIMEOUT){// It should never hit timeout when K4A_WAIT_INFINITE is set.printf("Error! Add capture to tracker process queue timeout!\n");break;}elseif(queue_capture_result==K4A_WAIT_RESULT_FAILED){printf("Error! Add capture to tracker process queue failed!\n");break;}k4abt_frame_tbody_frame=NULL;k4a_wait_result_tpop_frame_result=k4abt_tracker_pop_result(tracker,&body_frame,K4A_WAIT_INFINITE);if(pop_frame_result==K4A_WAIT_RESULT_SUCCEEDED){// Successfully popped the body tracking result. Start your processingsize_tnum_bodies=k4abt_frame_get_num_bodies(body_frame);printf("%zu bodies are detected!\n",num_bodies);k4abt_frame_release(body_frame);// Remember to release the body frame once you finish using it}elseif(pop_frame_result==K4A_WAIT_RESULT_TIMEOUT){// It should never hit timeout when K4A_WAIT_INFINITE is set.printf("Error! Pop body frame result timeout!\n");break;}else{printf("Pop body frame result failed!\n");break;}}elseif(get_capture_result==K4A_WAIT_RESULT_TIMEOUT){// It should never hit time out when K4A_WAIT_INFINITE is set.printf("Error! Get depth frame time out!\n");break;}else{printf("Get depth capture returned error: %d\n",get_capture_result);break;}}while(frame_count<100);printf("Finished body tracking processing!\n");k4abt_tracker_shutdown(tracker);k4abt_tracker_destroy(tracker);k4a_device_stop_cameras(device);k4a_device_close(device);return0;}

把 Azure Kinect 插上电源,连接到电脑,然后点击运行按钮,大功告成。

需要更多功能可以查看相关 API 或者查看官方示例程序:

  • https://microsoft.github.io/Azure-Kinect-Body-Tracking/release/1.x.x/structk4abt__frame__t.html
  • https://github.com/microsoft/Azure-Kinect-Samples/tree/master

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 7:49:01

3分钟掌握Codex多模型切换:开发者效率提升终极指南

3分钟掌握Codex多模型切换&#xff1a;开发者效率提升终极指南 【免费下载链接】codex 为开发者打造的聊天驱动开发工具&#xff0c;能运行代码、操作文件并迭代。 项目地址: https://gitcode.com/GitHub_Trending/codex31/codex 还在为单一AI模型无法满足多样化开发需求…

作者头像 李华
网站建设 2026/6/5 9:38:49

应用——线程竞争资源模型

多线程并发编程笔记&#xff1a;线程竞争资源模型一、代码示例对比分析示例1&#xff1a;带线程ID的窗口竞争模型#include <stdio.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h> #include <time.h>int win 3; // 可用窗口…

作者头像 李华
网站建设 2026/6/6 7:28:33

【无人机】采用最基本的自由空间路损模型并且不考虑小尺度衰落(多径多普勒)固定翼无人机轨迹规划附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码获取及仿…

作者头像 李华
网站建设 2026/6/9 8:14:22

Agent学习——小米MiMo-V2-Flash使用方法

一、MiMo-V2-Flash的亮点 ①API 定价为输入 $0.1/M tokens&#xff0c;输出 $0.3/M tokens&#xff0c;且目前限时免费&#xff0c;推理成本仅为Claude 4.5 Sonnet的2.5%。 ②在多个Agent测评基准中保持全球开源模型Top 2&#xff0c;代码能力强。 ③使用场景多为智能通场景设计…

作者头像 李华
网站建设 2026/6/6 15:38:21

safe_sleep.sh: GitHub Actions Runner 中那个偶尔无限挂起的“小睡眠”脚本

在 GitHub Actions Runner 代码库里&#xff0c;有一个看似简单的 Bash 脚本——safe_sleep.sh&#xff0c;它负责让 Runner 在某些场景下“安全地睡眠”一段时间。但这个小脚本却因为一个 subtle 的逻辑缺陷&#xff0c;让许多开发者和 CI 系统管理员困扰不已&#xff0c;甚至…

作者头像 李华