2017-12-13 16 views
8

나는 Docker for Windows container.Docker 컨테이너에서 Kinect V2를 실행할 수 있습니까?

  1. 의 내부에 C# 키 넥트 비주얼 제스처 프로그램 (something like Continuous Gesture Basics project https://github.com/angelaHillier/ContinuousGestureBasics-WPF)를 실행의 가능성을 탐구하고있어이도 이론적으로 가능 (A 도커 Windows 용 용기에 C# 키 넥트를 실행?)가

  2. 나는 마이크로 소프트/DOTNET 프레임 워크를 사용하고

: 1에 대한 대답이 예라면, 여기에 몇 가지 추가 사항입니다 4.7 근거로 이미지 내 초기 Dockerfile의 모습 이 :

FROM microsoft/dotnet-framework:4.7 
ADD . /home/gesture 
WORKDIR /home/gesture 

빌드 이미지 : 컨테이너

$ docker build -t kinect . 

전원을 켭 :

$ docker run -dit --name kinectContainer kinect 

주위 원숭이에 PowerShell 세션에 연결 :

$ docker exec -it kinectContainer powershell 

내가하려고 할 때 제스처 응용 프로그램을 실행하는 방법 나는 (더 키 넥트 SDK가 컨테이너에 설치되지 이후 예상되는) 다음과 같은 오류 얻을 도커 컨테이너에서 ATION :이 시점에서

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() 

는 큰 문제는 Kinect v2 SDK [KinectSDK-v2.0_1409-Setup.exe] 또는에서 Kinect v2 runtime [KinectRuntime-v2.0_1409-Setup.exe] 설치하는 방법입니다 컨테이너.

있어서 설치는 EULA 있고 some clever University of Wisconsin folks에 따른 윅스의 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 

내가 기본 MSI 파일에 도착했을 때 우연히 문제는 MSIEXEC를 사용하여 자동으로 실행할 할 수있는 방법이 없습니다입니다.

나는 런타임 설치 (런타임 설치 넥트 v2로 SDK에서 추출 (KinectRuntime-x64.msi)를) 만드는 것을 알아 냈어요 적어도 파일 시스템에서 다음과 같이 변경 :

폴더 "키 넥트"을 작성합니다 C에서 : \ WINDOWS \ system32를 및 시스템 (32)에 3 개 개의 파일을 추가합니다

k4wcll.dll

kinect20.dll

microsoft._kinect.dll

,

System32의 마지막 세 파일은 64 비트 버전이어야합니다 (설치 프로그램이 x86 및 x64 버전을 사용하는 것으로 나타남 3)

이러한 변경 내용을 수동으로 복제해도 호스트 컴퓨터에서 성공하지 못하는 것은 아닙니다 컨테이너.

그것은 다른 레지스트리/시스템 변경 설치 프로그램과 함께 발생하는 것을 현재 불분명하다 (그리고는 부두 노동자 컨테이너에 골 라인을 통해 우리를 얻을 것입니다 여부) 여기에서 진행하는 방법에 대한

어떤 아이디어?

+0

Kinect SDK를 사용하여 부트 스트 래퍼를 번들의 패키지 된 일부로 만들거나이 소프트웨어가 작동하도록 Kinect SDK v2 번들을 설치해야한다는 시작 조건 만 있습니다. 이것은 아마도 SDK 설치가 사용자 자신의 설치 내에서 수행하는 것을 복제하려는 것보다 안전하고 신뢰할 수 있습니다. 당신이 원하는 것은 가능해야하지만 많은 단점이있는 것 같습니다. –

+0

이 방법이 가능할 지 모르겠지만 도미노가 여전히 가상화 상태이므로 Kinect 하드웨어를 VM에 연결하려면 하드웨어 터널을 제공하는 VM을 사용해야합니다. 도커가 특정 하드웨어 액세스가있는 컨테이너를 시작할 수있는 방법을 제공하는지 확신 할 수 없지만 동일한 작업을 수행해야한다고 가정합니다. –

답변

1

짧은 번호. Windows의 도커에는 하드웨어 터널/맵 기능이 없습니다. Linux의 경우 --device= 옵션을 사용합니다.

@VonC에 따르면 Windows VM을 사용해야 할 것으로 Hyper-V가 될 수도 있고 Virtual Box를 사용할 수도 있으므로 터널링 방법을 통해 Kinect 하드웨어를 제공 할 수 있습니다 (추가/연결 장치)이 없으면 컨테이너가 VM이 아니거나 Windows가있는 호스트 시스템의 하드웨어에 액세스 할 수 없게됩니다.