{
  "paper_id": "7911159e4f2968e72aa46dabd3467d8d",
  "paper_title": "HoloLens 2 Sensor Streaming",
  "paper_authors": [
    "Juan Carlos Dibene",
    "Enrique Dunn"
  ],
  "publication_date": "",
  "publication_venue": "unknown",
  "abstract": "本文提出一种 HoloLens 2 服务器应用，可通过 TCP 实时流式传输设备数据。服务器可传输四个灰度相机、深度传感器、IMU、前置 RGB 相机、麦克风、头部跟踪、眼动跟踪和手部跟踪数据。每个发送的数据帧均带有时间戳，并可选携带设备在三维空间中的瞬时位姿。服务器允许下载相机内参等设备标定数据，可作为插件集成到 Unity 项目中，并支持基础上行能力。为以全帧率实现实时视频流，系统利用 HoloLens 2 的视频编码能力。本文还提供用于接收和解码数据的 Python 库，其中包含便于将数据传递给其他库的工具。源代码、Python 示例和预编译二进制文件可在 <https://github.com/jdibenes/hl2ss> 获取。\n",
  "keywords": [
    "HoloLens 2",
    "传感器流",
    "TCP",
    "实时传输",
    "Research Mode",
    "Python",
    "Unity",
    "计算机视觉"
  ],
  "paper_institutions": [
    "Stevens Institute of Technology"
  ],
  "output_language": "zh",
  "provider": "doubao",
  "model": "doubao-seed-2.1-pro",
  "prompt_template": "simple",
  "extracted_at": "2026-10-20T04:19:12.376329Z",
  "template_tag": "simple",
  "summary": "### 摘要\n\n论文解决 HoloLens 2 多传感器数据难以实时在线访问的问题：Windows Device Portal 仅支持前置 RGB 相机和麦克风，Research Mode 虽开放灰度相机、深度和 IMU，但随附工具主要面向离线录制与下载。作者提出运行于设备端的 C++ UWP 服务器和跨 Windows、Linux、OS X 的 Python 客户端，通过 TCP/Wi-Fi 同时提供四路 RM VLC、长抛深度、加速度计、陀螺仪、磁力计、PV 视频、麦克风、头部、眼动、手部跟踪及标定数据。其核心机制是统一数据帧：`帧 = 时间戳(u64) + 载荷长度(u32) + 载荷 + 可选设备位姿(4×4 float)`；时间戳采用同一 QPC 域、单位为百纳秒，可用于跨流对齐，位姿矩阵末元素为 1 或 0 表示该帧跟踪是否有效。系统在真实 HoloLens 2 和外部客户端上实施而非使用离线数据集，因为该设置能直接验证全传感器采集、Wi-Fi 传输、硬件编码和解码的端到端实时性；VLC 与 PV 使用 H.264/HEVC，音频使用 AAC，深度将无效像素置零并用 NEON 交错深度与 AB 后做无损 PNG，模式 2 可下载 uv2xy、外参、比例和 PV 内参。实测 1080p 30 FPS PV 视频延迟约 270 ms，所有流平均总带宽约 19 Mbit/s，单路 VLC 默认约 1 Mbit/s、PV 默认约 5 Mbit/s，这些结果支持利用设备硬件编码降低带宽并保持全帧率的关键设计。Python 库以 PyAV、OpenCV 解码并输出 NumPy 数组，多进程扩展用 Source、Interconnect、Sink、Control 和环形缓冲解决阻塞接收与多流同步；Unity 插件支持全部流并通过 3816 端口实现用户自定义 IPC 和远程 AR 场景。该系统适用于实时三维重建、TSDF 融合、点云处理、图像分割、远程实验和增强现实交互，但约束包括每流仅允许一个客户端、音视频编码均有损、不支持 RM Depth AHaT、磁力计无标定外参、麦克风与 Spatial Input 仅支持模式 0、PV 标定下载需关闭自动对焦，以及环形缓冲容量有限。未来工作将增加 Spatial Mapping、Scene Understanding 和 Voice Input 流。\n\n### 关键要点\n\n- 设备端服务器是 C++ UWP 应用，灰度相机、深度和 IMU 通过 Research Mode API 获取，PV 视频通过 MediaCapture 获取，麦克风通过 WASAPI 获取，头部、眼动和手部数据分别通过 SpatialPointerPose 和 SpatialInteractionManager 等接口获取。\n- 四路 RM VLC 均为 640×480、30 FPS 的灰度视频，使用 H.264 或 HEVC 编码，TCP 端口分别为 3800 至 3803。\n- RM Depth Long-throw 输出 320×288 的 16 位深度图和 16 位主动亮度图，帧率为 1 至 5 FPS，二者被交错并编码为单个 32 位 PNG，系统不支持 RM Depth AHaT。\n- RM IMU 分为加速度计、陀螺仪和磁力计三条流，每帧分别批量承载 93、315 和 11 个样本，样本包含传感器时间戳、数据帧时间戳和 X、Y、Z 三轴测量值。\n- PV 相机支持 1920×1080、30 FPS，并可配置分辨率、帧率、曝光、对焦和白平衡；麦克风为双声道、48000 Hz，使用 AAC ADTS 编码。\n- Spatial Input 载荷包含头部位姿、注视射线和两只手的跟踪数据，valid 字段的前四个比特分别标记这些数据是否有效，每只手包含 26 个关节，关节姿态由四元数方向、位置、半径和精度组成。\n- 音视频压缩通过 Microsoft Media Foundation 实现，视频提供 H.264 Baseline、Main、High 和 H.265 Main 四种配置，音频提供四种 AAC 码率预设，且所有音视频编码都是有损编码。\n- 表格给出的平均总带宽约为 19 Mbit/s，其中深度约 6.5 Mbit/s、PV 默认约 5 Mbit/s、单路 VLC 默认约 1 Mbit/s，音视频码率可由客户端配置。\n- 数据通过 TCP 以小端格式传输，矩阵采用行优先顺序；每条流运行在独立线程上，但每条流同时只允许一个客户端连接，数据帧由简单有限状态机解包。\n- 流支持三种模式：模式 0 连续传输设备数据，模式 1 连续传输数据并附带每帧位姿，模式 2 单次传输标定数据后自动关闭；磁力计不支持模式 2，麦克风和 Spatial Input 仅支持模式 0。\n- Python 库使用 PyAV 解码 H.264 和 AAC、OpenCV 解码 PNG，解码结果以 NumPy 数组返回，并提供去畸变、RGBD 对齐、跨流关联、坐标变换和文件读写工具；多进程扩展通过 Source、Interconnect、Sink 和 Control 支持多流采集与时间近邻查询。\n- Unity 插件可集成全部数据流，并在 TCP 3816 端口提供消息无关的 IPC 接口，示例支持远程创建图元、文本、纹理及修改变换和颜色；Spatial Input 需从 UI 线程初始化，PV 显示标记功能在插件中不受支持。"
}