Vic*_*tor 8 c# windows wix kinect docker
我探索运行的C#Kinect的手势可视化的可行性方案(像连续姿势基础项目https://github.com/angelaHillier/ContinuousGestureBasics-WPF)一内部泊坞的Windows容器.
这在理论上是否可行(在Docker for Windows容器中运行C#Kinect?)
如果1的答案是肯定的,这里有一些额外的细节:
我正在使用microsoft/dotnet-framework:4.7图像作为基础,我的初始Dockerfile如下所示:
FROM microsoft/dotnet-framework:4.7
ADD . /home/gesture
WORKDIR /home/gesture
Run Code Online (Sandbox Code Playgroud)
构建图像:
$ docker build -t kinect .
Run Code Online (Sandbox Code Playgroud)
打开容器:
$ docker run -dit --name kinectContainer kinect
Run Code Online (Sandbox Code Playgroud)
附加到PowerShell会话以围绕:
$ docker exec -it kinectContainer powershell
Run Code Online (Sandbox Code Playgroud)
当我尝试从Docker容器运行我的手势应用程序时,我收到以下错误(由于容器中没有安装Kinect SDK,因此预计会出现这种情况):
Unhandled Exception: System.BadImageFormatException: Could not load file or assembly 'Microsoft.Kinect, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependenc
ies. Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058) ---> System.BadImageFormatExcep
tion: Cannot load a reference assembly for execution. erable program. Check the spelling of the name, or if a path was included, verify that the path
--- End of inner exception stack trace ---
at GestureDetector.GestureDetectorApp..ctor()
Run Code Online (Sandbox Code Playgroud)
此时,最大的问题是如何在容器中安装Kinect v2 SDK [KinectSDK-v2.0_1409-Setup.exe]或Kinect v2运行时[KinectRuntime-v2.0_1409-Setup.exe].
安装人员有一个EULA,据一些聪明的威斯康星大学人士说,有一种技术可以使用Wix的dark.exe反编译器来解压安装程序(https://social.msdn.microsoft.com/Forums/en-US/a5b04520- e437-48e3-ba22-e2cdb46b4d62/silent-install-installation-instructions?forum = kinectsdk)
恩.
$ & 'C:\Program Files (x86)\WiX Toolset v3.11\bin\dark.exe' C:\installerwork\KinectRuntime-v2.0_1409-Setup.exe -x c:\installerwork\kinect_sdk_installersfiles
Run Code Online (Sandbox Code Playgroud)
我到达底层msi文件时遇到的问题是没有选项可以使用msiexec以静默方式运行它们.
我已经发现运行时安装程序(从Kinect v2 SDK中提取的运行时安装程序(KinectRuntime-x64.msi))至少在文件系统中进行了以下更改:
在C:\ Windows\System32中创建一个文件夹"Kinect",并将3个文件添加到System 32:
k4wcll.dll
kinect20.dll
microsoft._kinect.dll
System32中的最后三个文件应该是64位版本(安装程序似乎有这些3的x86和x64版本)
手动复制这些更改并不会导致主机成功,更不用说在容器中了.
目前还不清楚安装程序发生了哪些其他注册表/系统更改(以及是否会让我们超过Docker容器中的目标行)
关于如何从这里开始的任何想法?
简而言之,没有。Windows 上的 docker 不具备硬件隧道/映射的能力。--device=在 Linux 上,它通过选项执行
正如@VonC所说,您将需要使用Windows VM,这可能是Hyper-V,或者您可以使用Virtual Box,然后您可以通过隧道方法(添加/连接设备)提供Kinect硬件,没有这个就没有办法您的容器是否是虚拟机,是否可以使用 Windows 访问主机的硬件。
| 归档时间: |
|
| 查看次数: |
459 次 |
| 最近记录: |