Est-il possible d’exécuter Kinect V2 dans un conteneur Docker?

J’étudie la possibilité d’exécuter un programme Visual Gesture C # Kinect (quelque chose comme le projet https://github.com/angelaHillier/ContinuousGestureBasics-WPF de Continuous Gesture Basics) dans un conteneur Docker for Windows.

  1. Est-ce même théoriquement possible (exécutez C # Kinect dans un conteneur Docker for Windows?)

  2. Si la réponse à 1 est oui, voici quelques détails supplémentaires:

J’utilise comme base l’image de Microsoft / dotnet-framework: 4.7 et mon fichier Dockerfile initial ressemble à ceci:

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

Construisez l’image:

 $ docker build -t kinect . 

Allumer le conteneur:

 $ docker run -dit --name kinectContainer kinect 

Attachez-vous à une session PowerShell autour du singe:

 $ docker exec -it kinectContainer powershell 

Lorsque j’essaie d’exécuter mon application gestuelle à partir du conteneur Docker, j’obtiens l’erreur suivante (qui est attendue depuis qu’aucun kit SDK Kinect n’a été installé dans le conteneur):

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

À ce stade, la grande question est de savoir comment installer le SDK Kinect v2 [KinectSDK-v2.0_1409-Setup.exe] ou le moteur d’exécution Kinect v2 [KinectRuntime-v2.0_1409-Setup.exe] dans le conteneur.

Les installateurs ont un CLUF et, selon certains experts de l’Université du Wisconsin , il existe une technique pour extraire les installateurs à l’aide du décompilateur dark.exe de Wix ( https://social.msdn.microsoft.com/Forums/en-US/a5b04520- e437-48e3-ba22-e2cdb46b4d62 / silent-install-instructions-d’installation? forum = kinectsdk )

ex.

 $ & 'C:\Program Files (x86)\WiX Toolset v3.11\bin\dark.exe' C:\installerwork\KinectRuntime-v2.0_1409-Setup.exe -xc:\installerwork\kinect_sdk_installersfiles 

Le problème auquel je me suis heurté lorsque je suis arrivé aux fichiers msi sous-jacents est qu’il n’y a aucune option pour les exécuter en mode silencieux à l’aide de msiexec.

J’ai compris que le programme d’installation à l’exécution (programme d’installation de Runtime (KinectRuntime-x64.msi) extrait du SDK Kinect v2) apportait au moins les modifications suivantes au système de fichiers:

Crée un dossier “Kinect” dans C: \ Windows \ System32 et ajoute 3 fichiers à System 32:

k4wcll.dll

kinect20.dll

microsoft._kinect.dll

Les trois derniers fichiers de System32 devraient être les versions 64 bits (le programme d’installation semble avoir les versions x86 et x64 de ces 3).

La réplication manuelle de ces modifications n’aboutit pas à un succès sur la machine hôte, encore moins dans le conteneur.

Il est actuellement difficile de savoir quels autres changements de registre / système se produisent avec le programme d’installation (et si cela nous amènerait ou non à dépasser la ligne de but dans le conteneur Docker)

Des idées sur la façon de procéder à partir d’ici?

En bref non. Docker sur Windows n’a pas la capacité de tunnel / carte matérielle. sous Linux, il le fait via l’option --device=

Comme @VonC a déclaré que vous deviez utiliser une machine virtuelle Windows, cela pourrait être Hyper-V ou vous pouvez utiliser Virtual Box, vous pouvez alors fournir le matériel Kinect via la méthode de tunnelisation (périphérique add / connect). pour votre conteneur soit cette VM ou pour accéder au matériel de la machine hôte avec Windows.

Une autre approche consisterait à essayer d’installer Kinetic sur un serveur virtuel Windows et à détecter les modifications exactes apscopes par ladite installation.

Voir par exemple ” Comment trouver les modifications apscopes par l’installateur d’un programme? ” Et un outil tel que ZSoft Uninstaller 2.5 .

Une fois que vous avez déterminé quels fichiers / registre / variables sont affectés par le processus d’installation, vous pouvez les répliquer dans un fichier Dockerfile.