Skip to content

File illixr_output_calculator.h

File List > calculators > util > illixr_output_calculator.h

Go to the documentation of this file

#pragma once
#include <string>
#include "mediapipe/framework/calculator_base.h"
#include "mediapipe/framework/formats/rect.pb.h"
#include "mediapipe/calculators/util/illixr_data.pb.h"
#include "mediapipe/calculators/util/illixr_data.h"
#include "mediapipe/calculators/util/image_data.pb.h"
namespace mediapipe {

enum class input_image_type {
    IMAGE,
    UIMAGE,
    NONE
};

enum class palm_input_type {
    NORM_RECT,
    RECT,
    NORM_RECTS,
    RECTS,
    NONE
};

enum class hand_input_type {
    NORM_RECT,
    RECT,
    NORM_RECTS,
    RECTS,
    NONE
};

class ILLIXROutputCalculator : public CalculatorBase {
public:
    ILLIXROutputCalculator() = default;

    ~ILLIXROutputCalculator() override = default;

    ILLIXROutputCalculator(const ILLIXROutputCalculator&) = delete;
    ILLIXROutputCalculator& operator=(const ILLIXROutputCalculator&) = delete;
    static absl::Status GetContract(CalculatorContract* cc);
    absl::Status Open(CalculatorContext* cc) override;
    absl::Status Process(CalculatorContext* cc) override;

protected:
    ::mediapipe::ILLIXROutputCalculatorOptions options_;

private:
    // Indicates if image frame is available as input.
    bool image_frame_available_ = false;
    mediapipe::ImageData img_data_;

    input_image_type image_type = input_image_type::NONE;
    palm_input_type palm_input = palm_input_type::NONE;
    hand_input_type hand_input = hand_input_type::NONE;
};

template<class T>
::ILLIXR::data_format::rect* make_rect(const T in_rect, bool normalized) {
    return new ::ILLIXR::data_format::rect(in_rect.x_center(), in_rect.y_center(), in_rect.width(),
                                           in_rect.height(), in_rect.rotation(), (normalized) ? ::ILLIXR::data_format::units::PERCENT : ::ILLIXR::data_format::units::PIXEL);
}
} // mediapipe