Affdex SDK を使用して Kinect 感情認識に取り組んでいますが、「CameraDetector」は Kinect センサーをサポートできませんでした。ウェブカメラを使ってみたところ、SDK はウェブカメラでうまく動作することがわかりました。Frame クラスの「ピクセル」を Kinect ColorImageFrame に何度も割り当てましたが、エラーが発生しました。
KinectSensor _kinect;
Affdex.FrameDetector _detector = new Affdex.FrameDetector(30,30,1,FaceDetectorMode.LARGE_FACES);
private void startKinect()
{
if (KinectSensor.KinectSensors.Count > 0)
{
_kinect = KinectSensor.KinectSensors[0];
MessageBox.Show("Kinect current statues is: " + _kinect.Status);
_kinect.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);
_kinect.ColorFrameReady += new EventHandler<ColorImageFrameReadyEventArgs>(_kinect_ColorFrameReady);
_kinect.Start();
}
else
{
MessageBox.Show("No kinect device!");
}
}
private void startAffdex()
{
_detector.setClassifierPath("E:\\Program files\\Affectiva\\Affdex SDK\\data");
_detector.setImageListener(this);
_detector.setProcessStatusListener(this);
_detector.setDetectAllEmotions(true);
_detector.setDetectAllExpressions(true);
_detector.setDetectAllEmojis(true);
_detector.setDetectAllAppearances(true);
_detector.start();
}
void _kinect_ColorFrameReady(object sender,ColorImageFrameReadyEventArgs e)
{
using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
{
if (colorFrame == null)
{
return;
}
byte[] pixels = new byte[colorFrame.PixelDataLength];
colorFrame.CopyPixelDataTo(pixels);
Affdex.Frame _frame = new Affdex.Frame(colorFrame.Width,colorFrame.Height,pixels,Affdex.Frame.COLOR_FORMAT.BGR);
_detector.process(_frame);
int stride = colorFrame.Width*4;
///Show the color stream
colorStream.Source =
BitmapSource.Create(colorFrame.Width, colorFrame.Height,
96, 96, PixelFormats.Bgr32, null, pixels, stride);
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
startKinect();
startAffdex();
}
private void stopKinect()
{
if (_kinect != null)
{
if(_kinect.Status == KinectStatus.Connected)
{
_kinect.Stop();
}
}
}
private void Window_Closed(object sender, EventArgs e)
{
stopKinect();
_detector.stop();
}