나는 Docker for Windows container.Docker 컨테이너에서 Kinect V2를 실행할 수 있습니까?
의 내부에 C# 키 넥트 비주얼 제스처 프로그램 (something like Continuous Gesture Basics project https://github.com/angelaHillier/ContinuousGestureBasics-WPF)를 실행의 가능성을 탐구하고있어이도 이론적으로 가능 (A 도커 Windows 용 용기에 C# 키 넥트를 실행?)가
나는 마이크로 소프트/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)
이러한 변경 내용을 수동으로 복제해도 호스트 컴퓨터에서 성공하지 못하는 것은 아닙니다 컨테이너.
그것은 다른 레지스트리/시스템 변경 설치 프로그램과 함께 발생하는 것을 현재 불분명하다 (그리고는 부두 노동자 컨테이너에 골 라인을 통해 우리를 얻을 것입니다 여부) 여기에서 진행하는 방법에 대한
어떤 아이디어?
Kinect SDK를 사용하여 부트 스트 래퍼를 번들의 패키지 된 일부로 만들거나이 소프트웨어가 작동하도록 Kinect SDK v2 번들을 설치해야한다는 시작 조건 만 있습니다. 이것은 아마도 SDK 설치가 사용자 자신의 설치 내에서 수행하는 것을 복제하려는 것보다 안전하고 신뢰할 수 있습니다. 당신이 원하는 것은 가능해야하지만 많은 단점이있는 것 같습니다. –
이 방법이 가능할 지 모르겠지만 도미노가 여전히 가상화 상태이므로 Kinect 하드웨어를 VM에 연결하려면 하드웨어 터널을 제공하는 VM을 사용해야합니다. 도커가 특정 하드웨어 액세스가있는 컨테이너를 시작할 수있는 방법을 제공하는지 확신 할 수 없지만 동일한 작업을 수행해야한다고 가정합니다. –