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?
Đâ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?)
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?
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ế. –
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ể –