2017-12-13 136 views
8

tôi đang khám phá tính khả thi của chạy một Visual Gesture Chương trình C# Kinect (something like Continuous Gesture Basics project https://github.com/angelaHillier/ContinuousGestureBasics-WPF) bên trong một Docker for Windows container.Có thể chạy Kinect V2 bên trong thùng chứa Docker không?

  1. Đây có phải là thậm chí về mặt lý thuyết có thể (chạy C# Kinect trong một Docker cho Windows container?)

  2. Nếu câu trả lời cho 1 là có, dưới đây là một số chi tiết bổ sung:

Tôi đang sử dụng microsoft/dotnet-framework: 4.7 làm cơ sở và Dockerfile ban đầu của tôi trông giống như này:

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

xây dựng hình ảnh:

$ docker build -t kinect . 

Bật container:

$ docker run -dit --name kinectContainer kinect 

Đính kèm để một phiên PowerShell để râu ria xung quanh:

$ docker exec -it kinectContainer powershell 

Khi tôi cố gắng để chạy ứng dụng cử chỉ của tôi ation từ container Docker tôi nhận được lỗi sau (dự kiến ​​vì không có Kinect SDK đã được cài đặt trong các thùng chứa):

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

Tại thời điểm này, câu hỏi lớn đặt ra là làm thế nào để cài đặt Kinect v2 SDK [KinectSDK-v2.0_1409-Setup.exe] hay Kinect v2 runtime [KinectRuntime-v2.0_1409-Setup.exe] trong thùng đựng hàng.

Các cài đặt có một EULA và theo some clever University of Wisconsin folks, có một kỹ thuật để trích xuất các trình cài đặt sử dụng decompiler dark.exe Wix của (https://social.msdn.microsoft.com/Forums/en-US/a5b04520-e437-48e3-ba22-e2cdb46b4d62/silent-install-installation-instructions?forum=kinectsdk)

cũ.

$ & '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 

Sự cố tôi gặp phải khi tôi đến các tệp msi cơ bản không có tùy chọn để chạy chúng âm thầm bằng msiexec.

tôi đã tìm ra rằng trình cài đặt thời gian chạy (Runtime cài đặt (KinectRuntime-x64.msi) chiết xuất từ ​​v2 SDK Kinect) khiến ít nhất những thay đổi sau trong hệ thống tập tin:

Tạo một thư mục "Kinect" trong C: \ Windows \ System32 và thêm 3 file hệ thống 32:

k4wcll.dll

kinect20.dll

microsoft._kinect.dll

Ba tệp cuối cùng trong System32 phải là phiên bản 64 bit (trình cài đặt dường như có các phiên bản x86 và x64 của 3)

Nhân rộng những thay đổi đó bằng tay không dẫn đến thành công trên máy chủ. thùng chứa.

Đó là hiện chưa rõ những thay đổi registry/hệ thống khác đang xảy ra với trình cài đặt (và có hay không đó sẽ đưa chúng ta qua vạch khung trong các thùng chứa Docker)

Bất kỳ ý tưởng về cách thức tiến hành từ đây?

+0

Tôi chỉ tạo bootstrapper với Kinect SDK như một phần đóng gói của gói hoặc chỉ có điều kiện khởi chạy cho biết bạn cần cài đặt gói Kinect SDK v2 để phần mềm này hoạt động. Điều này có lẽ an toàn hơn và đáng tin cậy hơn là cố gắng sao chép những gì cài đặt SDK thực hiện trong cài đặt của riêng bạn. Những gì bạn muốn làm nên có thể nhưng dường như có một loạt các hạn chế. –

+0

Tôi không biết nếu điều này là có thể, nhưng với một máy ảo bạn sẽ cung cấp một đường hầm phần cứng, để đính kèm phần cứng Kinect cho máy ảo như docker vẫn là ảo hóa. Tôi giả sử bạn sẽ cần phải làm như vậy tuy nhiên tôi không chắc chắn nếu docker cung cấp một cách để bạn có thể bắt đầu một container với truy cập phần cứng cụ thể –

Trả lời

1

Tóm lại không. docker trên cửa sổ không có khả năng phần cứng đường hầm/bản đồ. trên Linux, thông qua tùy chọn --device=

Như @VonC đã tuyên bố bạn cần sử dụng máy ảo Windows có thể là Hyper-V hoặc bạn có thể sử dụng Hộp ảo thì bạn có thể cung cấp phần cứng Kinect thông qua phương pháp Tunneling (thêm/kết nối thiết bị), mà không có điều này sẽ không có cách nào cho container của bạn được VM hoặc không truy cập phần cứng của máy chủ với các cửa sổ.

Các vấn đề liên quan