From f0eecc4ee2d7a340bf96571cf626bde27c91542c Mon Sep 17 00:00:00 2001 From: Stéphane Lenclud Date: Tue, 19 Mar 2019 21:25:32 +0100 Subject: Kinect support for Point Tracker (#914) Kinect tracker now provides IR camera for Point Tracker to use. Closes #914 --- tracker-kinect-face/camera_kinect_ir.h | 74 ++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 tracker-kinect-face/camera_kinect_ir.h (limited to 'tracker-kinect-face/camera_kinect_ir.h') diff --git a/tracker-kinect-face/camera_kinect_ir.h b/tracker-kinect-face/camera_kinect_ir.h new file mode 100644 index 00000000..f38c342a --- /dev/null +++ b/tracker-kinect-face/camera_kinect_ir.h @@ -0,0 +1,74 @@ +/* Copyright (c) 2019 Stéphane Lenclud + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + */ + +#pragma once + +#ifdef OTR_HAVE_OPENCV + +#include + +//#include "pt-api.hpp" +#include "compat/timer.hpp" +#include "video/camera.hpp" + + +#include + +#include +#include + +#include + +namespace Kinect { + + struct CamerasProvider : video::impl::camera_ + { + CamerasProvider(); + std::vector camera_names() const override; + std::unique_ptr make_camera(const QString& name) override; + bool can_show_dialog(const QString& camera_name) override; + bool show_dialog(const QString& camera_name) override; + }; + + +/// +/// Implement our camera interface using Kinect V2 SDK IR Sensor. +/// +struct CameraKinectIr final : video::impl::camera +{ + CameraKinectIr(); + virtual ~CameraKinectIr(); + + + [[nodiscard]] bool start(const info& args) override; + void stop() override; + bool is_open() override; + std::tuple get_frame() override; + [[nodiscard]] bool show_dialog() override; + +private: + bool get_frame_(cv::Mat& frame); + void WaitForFirstFrame(); + +private: + // Current Kinect + IKinectSensor* iKinectSensor = nullptr; + + // Infrared reader + IInfraredFrameReader* iInfraredFrameReader = nullptr; + + // Frame needs to stay alive while we access the data buffer + IInfraredFrame* iInfraredFrame = nullptr; + + video::frame iFrame; + cv::Mat iMatFrame; +}; + +} + + +#endif -- cgit v1.2.3