整体流程是仿照Github官方文档和这位博主的,具体细节根据个人习惯做了修改并补充了一些说明。

0. 环境配置

Windows10
Unity 2020.3.31f1c1
VS2019
Python3.6

1. 打开Hololens的研究者模式(非常重要)

如果不打开的话,程序是无法访问到眼镜传感器数据的

https://blog.csdn.net/scy261983626/article/details/108754517

2. 下载Github工程

HoloLens2-Unity-ResearchModeStreamer

下面的步骤都是基于官方文档来的:

3. 配置VS环境

Release+ARM64

  • 工程项目中Eigen库好像没有用到,可以注释掉
  • lib库里放了Opencv4.X的库,我们需要根据自己的Opencv替换

之后Build就好了,不要运行,因为输出是dll,输出位置在
Your Location\HoloLens2-Unity-ResearchModeStreamer\HL2RmStreamUnityPlugin\ARM64\Release\HL2RmStreamUnityPlugin\

4. 配置Unity环境

  • Platform先转换到UWP

新建文件夹和文件

  • 在ARM64文件夹中放上面的HL2RmStreamUnityPlugin.dll
  • 在Scripts文件夹中新建C#脚本文件,命名为:StreamerHL2.cs

其实也不需要新建这么多的,放在一起也行。之所以这么命名也是为了和Github上保持一致。

StreamerHL2.cs中的内容:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Runtime.InteropServices;public class StreamerHL2 : MonoBehaviour
{[DllImport("HL2RmStreamUnityPlugin", EntryPoint = "Initialize", CallingConvention = CallingConvention.StdCall)]public static extern void InitializeDll(); void Start(){InitializeDll();}void Update(){}}
  • 将StreamerHL2.cs文件拖到Main camera上实现挂载

  • 接着设置Unity 项目的兼容性,根据下图指引,勾选InternetClient, InternetClientServer, PrivateNetworkClientServer, WebCam, SpatialPerception5个位置

  • 编译unity工程,注意架构选择的是ARM64. 然后build到一个新文件夹
    ps. 不需要在unity中运行工程,因为我们添加的是ARM64的动态链接库,在PC端运行的话会报加载不了的错误。

5. 配置Unity的package文件中的兼容性

  • 打开编译好的Unity工程文件夹中的“Package.appxmanifest”文件,按照官方文档修改3处内容,如果嫌麻烦,可以直接我改完的代码:
    **注意:**里面的Project1是我自己取的名字,大家可以自己改。
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:uap2="http://schemas.microsoft.com/appx/manifest/uap/windows10/2" xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3" xmlns:uap4="http://schemas.microsoft.com/appx/manifest/uap/windows10/4" xmlns:iot="http://schemas.microsoft.com/appx/manifest/iot/windows10" xmlns:mobile="http://schemas.microsoft.com/appx/manifest/mobile/windows10" IgnorableNamespaces="uap uap2 uap3 uap4 mp mobile iot rescap" xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"><Identity Name="Template3D" Publisher="CN=DefaultCompany" Version="1.0.0.0" /><mp:PhoneIdentity PhoneProductId="edd907fa-2c4f-49b2-89a0-9fa371043c33" PhonePublisherId="00000000-0000-0000-0000-000000000000" /><Properties><DisplayName>Proj1</DisplayName><PublisherDisplayName>DefaultCompany</PublisherDisplayName><Logo>Assets\StoreLogo.png</Logo></Properties><Dependencies><TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.10240.0" MaxVersionTested="10.0.19041.0" /></Dependencies><Resources><Resource Language="x-generate" /></Resources><Applications><Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="Template3D.App"><uap:VisualElements DisplayName="Proj1" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="Template_3D" BackgroundColor="transparent"><uap:DefaultTile ShortName="Proj1" Wide310x150Logo="Assets\Wide310x150Logo.png" /><uap:SplashScreen Image="Assets\SplashScreen.png" BackgroundColor="#FFFFFF" /><uap:InitialRotationPreference><uap:Rotation Preference="landscape" /><uap:Rotation Preference="landscapeFlipped" /><uap:Rotation Preference="portrait" /><uap:Rotation Preference="portraitFlipped" /></uap:InitialRotationPreference></uap:VisualElements></Application></Applications><Capabilities><rescap:Capability Name="perceptionSensorsExperimental" /><Capability Name="internetClient" /><Capability Name="internetClientServer" /><Capability Name="privateNetworkClientServer" /><uap2:Capability Name="spatialPerception" /><DeviceCapability Name="webcam" /></Capabilities>
</Package>

6. 将Unity工程部署到Hololens中

请移步到我之前的博文:Hololens 2 + Unity环境配置的第8条

7. Python获取视频流

打开Github工程中的hololens2_simpleclient.py文件,根据自己的ip修改HOST

之后就传输成功啦!!!如果部署成功的话,眼镜第一次打开你Unity的app时应该会弹出 是否允许访问相机之类的提醒,点击是,眼镜就会出现一个界面,里面是你Unity的场景,不用管它。然后再运行Python程序,电脑上就会出现两个窗口了,眼镜里是没有变化的。

注意:要把电脑上的防火墙关了。
如果出现[winerror 10060]的问题,基本上就是没打开研究者模式,返回第一条检查一下。自己就是卡在这里卡了2天, 我一开始打开的方式不对

延迟问题:
Hololens传感器的采样频率远大于普通wifi传输的频率。这就导致Hololens的缓存区一直存放着大量图像数据,表现出来就是PC端这边滞后特点。
Hololens的深度传感器在短流模式下的采样频率大约在30Hz-45Hz之间,Wifi连接只能达到<5Hz。
滞后的时间大约为T*37/n,其中T为程序运行时长,n为你自己PC的Socket接收频率
即程序运行的时间越长,滞后性越长。

8. 解决实时视频流传输

https://blog.csdn.net/scy261983626/article/details/116381193

修改HL2RmStreamUnityPlugin.sln工程
降低HL往PC端发送数据的频率,即并不是把每一帧采集的图像数据都传输到PC端。

  • HL2RmStreamUnityPlugin.cpp文件中:
  1. co_await m_pVideoFrameProcessor->InitializeAsync(m_pVideoFrameStreamer);-> co_await m_pVideoFrameProcessor->InitializeAsync(m_pVideoFrameStreamer, 2000000);
  2. auto processor = std::make_shared<ResearchModeFrameProcessor>( m_pAHATSensor, camConsentGiven, &camAccessCheck, 0, m_pAHATStreamer);-> auto processor = std::make_shared<ResearchModeFrameProcessor>( m_pAHATSensor, camConsentGiven, &camAccessCheck, 2000000, m_pAHATStreamer);

(这里的 2000000是200ms的意思,程序里面采用CPU时间单位,即百纳秒,1ms = 10^4百纳秒)

  • ResearchModeFrameStreamer.cpp文件中:

    因为眼镜数据输出的顺序和python的numpy转换的顺序刚好是反的,所以原工程接收到数据是有问题的。

主机端实时获取Hololens2的RGBD数据流相关推荐

  1. 三维网格精简算法java版_ISMAR 2020 | 商汤提出手机端实时单目三维重建系统

    导读:商汤研究院和浙江大学CAD&CG国家重点实验室合作研发了一个手机端实时单目三维重建系统Mobile3DRecon.与现有的基于RGBD的在线三维重建或离线生成表面网格的系统不同,该系统结 ...

  2. 商汤提出手机端实时单目三维重建系统,实现逼真AR效果和交互

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来源:商汤泰坦公开课 摘要 · 看点 商汤研究院和浙江大学 CAD&CG 国家重点实验室合作研 ...

  3. 最佳论文!商汤提出手机端实时单目三维重建系统 | ISMAR 2020

    摘要 · 看点 商汤研究院和浙江大学 CAD&CG 国家重点实验室合作研发了一个手机端实时单目三维重建系统 Mobile3DRecon.与现有的基于 RGBD 的在线三维重建或离线生成表面网格 ...

  4. yolov3在Linux主机端和jetson nano开发板上的部署,使用,以及tensorrt加速yolov3-tiny

    Linux 主机端上 darknet识别 图片识别:./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg 视频识别:./darknet ...

  5. python实时获取子进程输出_Python 从subprocess运行的子进程中实时获取输出的例子...

    有些时候,我们需要将某些程序放到子进程中去运行,以达到整合系统的目的.在Python中,一个非常好的选择就是使用subprocess模块,本模块为开辟子进程去执行子程序提供了统一的接口,更加便于学习和 ...

  6. OpenMV(三)--实时获取摄像头图片

    实时获取摄像头图片 引 前言 1. 构造函数 2. 源码分析 3. 脱机运行程序 引 OpenMV(一)–基础介绍与硬件架构 OpenMV(二)–IDE安装与固件下载 前言 利用OpenMV进行机器视 ...

  7. android pcm 音量_Android中实时获取音量分贝值详解

    基础知识 度量声音强度,大家最熟悉的单位就是分贝(decibel,缩写为dB).这是一个无纲量的相对单位,计算公式如下: 分子是测量值的声压,分母是参考值的声压(20微帕,人类所能听到的最小声压).因 ...

  8. php读音量大小,Android_Android中实时获取音量分贝值详解,基础知识 度量声音强度,大 - phpStudy...

    Android中实时获取音量分贝值详解 基础知识 度量声音强度,大家最熟悉的单位就是分贝(decibel,缩写为dB).这是一个无纲量的相对单位,计算公式如下: 分子是测量值的声压,分母是参考值的声压 ...

  9. VS中实时获取SVN的版本号并写入到AssemblyInfo.cs中(C#)

    原文: VS中实时获取SVN的版本号并写入到AssemblyInfo.cs中(C#) 在开发项目时,需要知道当前发布的到底是哪个版本,比较好的方式就是获取SVN的版本来作为项目的版本.项目版本一般由主 ...

最新文章

  1. cmd pc如何开多个微信_Win10下个人微信与企业微信多开
  2. Python学习-基础篇3-函数篇(2)
  3. Emscripten 单词_(第30期:英语教师备课资料) 英文标识记单词 有趣有用又高效...
  4. 深度学习NCHW和NHWC数据格式(由三维数据转换成一维数据的遍历方式)
  5. php如何测量坐标周围,php – 如何检查经度/纬度点是否在坐标范围内?
  6. 10分钟采集凡客最新的省、市、区、邮政编码和电话区号(附源码)
  7. 数据结构之串:基本概念
  8. 计算机图形学资源收集04
  9. 无向带权图的存储结构_每天5分钟用C#学习数据结构(27)图 Part 8
  10. 【学习笔记】bootstrap之CSS组件
  11. java 观察者模式_观察者模式(Observer Pattern)
  12. FileUtils常用方法 - commons-io常用工具类
  13. C语言有符号和无符号数
  14. 今天,霍金没有提AI威胁论,他的新目标是带领人类移民外星球(附霍金姚期智Pete演讲实录+PPT)
  15. html 设置div背景颜色,CSS设置网页背景颜色技术教程篇
  16. 双击桌面计算机删除,笔记本电脑点击图标自动删除怎么办
  17. 论文中出现的 cf. i.e. s.t. e.g. w.r.t. et al. etc等英文缩写是什么意思
  18. 双语不用教 下载地址!!!
  19. ​基于光通信的6G水下信道建模综述
  20. centos7设置基础软件仓库时出错

热门文章

  1. 【vue】vue-znly
  2. 中国互联网+户外广告行业商业模式创新与投资机会深度研究报告
  3. 2022-2028年中国六氟化硫行业市场研究及前瞻分析报告
  4. Go 学习笔记(5)— 算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、取地址和指针运算符
  5. mongodb权限管理
  6. 五连阳回调买入法_“4连阳+1阴”这种股票,吃透主升浪!挣得万贯家财
  7. java常用的集合对象_java常用实体类、集合类
  8. ++项目 cmake头文件路径_CMAKE入门实战
  9. w ndows7启动后没有图标,Windows7下双击桌面图标无法打开怎么解决?
  10. linux升级apache版本,Apache2.4版本的安装或升级常见错误