/* // Copyright (C) 2020-2024 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. */ #pragma once #include #include #include #include #include "models/detection_model.h" namespace ov { class InferRequest; class Model; } // namespace ov struct InferenceResult; struct InputData; struct InternalModelData; struct ResultBase; class ModelSSD : public DetectionModel { public: ModelSSD(); /// Constructor /// @param modelFileName name of model to load /// @param confidenceThreshold - threshold to eliminate low-confidence detections. /// Any detected object with confidence lower than this threshold will be ignored. /// @param useAutoResize - if true, image will be resized by openvino. /// Otherwise, image will be preprocessed and resized using OpenCV routines. /// @param labels - array of labels for every class. If this array is empty or contains less elements /// than actual classes number, default "Label #N" will be shown for missing items. /// @param layout - model input layout ModelSSD(const std::string& modelFileName, float confidenceThreshold, bool useAutoResize, const std::vector& labels = std::vector(), const std::string& layout = ""); void Initialise(const std::string& modelFileName, float _confidenceThreshold, bool useAutoResize, const std::vector& _labels = std::vector(), const std::string& layout = "") { ImageModel::Initalise(modelFileName, useAutoResize, layout), confidenceThreshold = confidenceThreshold; labels = _labels; } std::shared_ptr preprocess(const InputData& inputData, ov::InferRequest& request) override; std::unique_ptr postprocess(InferenceResult& infResult) override; protected: std::unique_ptr postprocessSingleOutput(InferenceResult& infResult); std::unique_ptr postprocessMultipleOutputs(InferenceResult& infResult); void prepareInputsOutputs(std::shared_ptr& model) override; void prepareSingleOutput(std::shared_ptr& model); void prepareMultipleOutputs(std::shared_ptr& model); size_t objectSize = 0; size_t detectionsNumId = 0; };