Можно ли запустить Kinect V2 внутри контейнера Docker?

Я изучаю возможность запуска программы визуальных жестов C# Kinect (что-то вроде проекта Continuous Gesture Basics https://github.com/angelaHillier/ContinuousGestureBasics-WPF) Внутри Docker для контейнера Windows.

  1. возможно ли это даже теоретически (запустить C# Kinect в контейнере Docker для Windows?)

  2. если ответ на 1-Да, вот некоторые дополнительные подробности:

Я использую microsoft / dotnet-framework: 4.7 image в качестве основы, и мой первоначальный файл 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

когда я пытаюсь запустить приложение жестов из контейнера 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()

на данный момент, большой вопрос, Как установить Kinect V2 SDK [KinectSDK-v2.0_1409-настройка.exe] или во время выполнения и Kinect v2 для [KinectRuntime-В2.0_1409-установки.exe] в контейнере.

установщики имеют EULA и согласно какой-то умный Университет Висконсина, есть техника для извлечения установщиков с помощью wix's dark.исполняемый decompiler(https://social.msdn.microsoft.com/Forums/en-US/a5b04520-e437-48e3-ba22-e2cdb46b4d62/silent-install-installation-instructions?forum=kinectsdk)

ex.

$ & 'C:Program Files (x86)WiX Toolset v3.11bindark.exe' C:installerworkKinectRuntime-v2.0_1409-Setup.exe -x c:installerworkkinect_sdk_installersfiles

проблема, с которой я столкнулся, когда я добрался до базовых файлов msi, нет возможности запускать их молча, используя msiexec.

я выяснил, что установщик времени выполнения (установщик времени выполнения (KinectRuntime-x64.msi), извлеченный из Kinect V2 SDK), делает по крайней мере следующие изменения в файловой системе:

создает папку "Kinect" в C:WindowsSystem32 и добавляет 3 файла в систему 32:

k4wcll.dll файлы

kinect20.dll файлы

microsoft._kinect.dll файлы

последние три файла в System32 должны быть 64-разрядными версиями (установщик, похоже, имеет x86 и x64 версии этих 3)

репликация этих изменений вручную не приводит к успеху на главной машине, не говоря уже о контейнер.

в настоящее время неясно, какие другие изменения реестра / системы происходят с установщиком (и приведет ли это нас к линии цели в контейнере Docker)

есть идеи о том, как действовать отсюда?

2 ответов


короче нет. docker в windows не имеет возможности аппаратного туннеля / карты. в Linux это происходит через --device= опции

поскольку @VonC заявил, что вам нужно будет использовать виртуальную машину Windows, это может быть Hyper-V или вы можете использовать виртуальное поле, тогда вы можете предоставить оборудование Kinect с помощью метода туннелирования (добавить/подключить устройство), без этого для вашего контейнера не будет возможности получить доступ к оборудованию хост-машины с windows.


другим подходом было бы попытаться установить Kinetic в виртуальной машине Windows server и обнаружить точные изменения, вызванные указанной установкой.

см., например,"как я могу узнать, какие изменения делает установщик программы?" и такой инструмент, как ZSoft Специально Деинсталлятор 2.5.

после того, как вы точно определили, какие файлы/реестр/переменные влияют на процесс установки, вы можете реплицировать это в Dockerfile.