はじめに
Azure KinectにはAzure-Kinect-Sensor-SDKが、Femto BoltにはOrbbecSDKまたはOrbbecSDK-K4A-Wrapperがあります。
しかし、これらはいずれもC/C++で使う必要があります。
これを利用すれば、Azure KinectやFemto BoltをC#で使えます。
Microsoftの公式Azure Kinect向けパッケージにはMicrosoft.Azure.Kinect.Sensor、Microsoft.Azure.Kinect.BodyTrackingがあります。
OrbbecにはOrbbecSDK_CSharpやOrbbecUnitySDKがありますが、NuGetパッケージはありません。
いずれにせよ、統一的な公式C#インターフェースはないようです。
k4a.netの使い方
まずはNuGetパッケージを追加します。
そしてソリューションファイルのAny CPU
の部分をx64
に置き換えます
あとはAzure Kinectのドキュメントを見たり、リポジトリのK4AdotNet.Samples.*
を見たり、入力補完に頼ったりすればいけます。
RGBカメラを開始して終了する例
using K4AdotNet.Sensor;
var deviceCount = Device.InstalledCount;
Console.WriteLine($"Device Count: {deviceCount}");
if (deviceCount == 0)
{
throw new Exception("Not found: Kinect Device");
}
using (var device = Device.Open())
{
Console.WriteLine($"Serial Number: {device.SerialNumber}");
var deviceConfig = new DeviceConfiguration
{
CameraFps = FrameRate.Thirty,
ColorFormat = ImageFormat.ColorBgra32,
ColorResolution = ColorResolution.R720p,
DepthMode = DepthMode.Off
};
device.StartCameras(deviceConfig);
Console.WriteLine("Camera started and stopping...");
device.StopCameras();
}
Body Trackingで人数を数える例
using K4AdotNet.Sensor;
using K4AdotNet.BodyTracking;
var deviceCount = Device.InstalledCount;
Console.WriteLine($"Device Count: {deviceCount}");
if (deviceCount == 0)
{
throw new Exception("Not found: Kinect Device");
}
using (var device = Device.Open())
{
Console.WriteLine($"Serial Number: {device.SerialNumber}");
var deviceConfig = new DeviceConfiguration
{
CameraFps = FrameRate.Thirty,
DepthMode = DepthMode.NarrowViewUnbinned,
ColorResolution = ColorResolution.Off
};
device.StartCameras(deviceConfig);
device.GetCalibration(deviceConfig.DepthMode, deviceConfig.ColorResolution, out var calibration);
var trackerConfig = TrackerConfiguration.Default;
using (var tracker = new Tracker(calibration, trackerConfig))
{
using (var capture = device.GetCapture())
{
tracker.EnqueueCapture(capture);
}
using (var bodyFrame = tracker.PopResult())
{
Console.WriteLine($"Timestamp: {bodyFrame.DeviceTimestamp}");
Console.WriteLine($"Body Count: {bodyFrame.BodyCount}");
}
tracker.Shutdown();
}
device.StopCameras();
}
device.GetCalibration
はdevice.StartCameras
の前でも呼び出せるはずです