diff --git a/model_api/cpp/models/include/models/associative_embedding_decoder.h b/model_api/cpp/models/include/models/associative_embedding_decoder.h deleted file mode 100644 index 8cd9c072..00000000 --- a/model_api/cpp/models/include/models/associative_embedding_decoder.h +++ /dev/null @@ -1,94 +0,0 @@ -/* -// Copyright (C) 2021-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 - -struct Peak { - explicit Peak(const cv::Point2f& keypoint = cv::Point2f(-1, -1), const float score = 0.0f, const float tag = 0.0f) - : keypoint(keypoint), - score(score), - tag(tag) {} - - cv::Point2f keypoint; - float score; - float tag; -}; - -class Pose { -public: - explicit Pose(size_t numJoints) : peaks(numJoints) {} - - void add(size_t index, Peak peak) { - peaks[index] = peak; - sum += peak.score; - poseTag = poseTag * static_cast(validPointsNum) + peak.tag; - poseCenter = poseCenter * static_cast(validPointsNum) + peak.keypoint; - validPointsNum += 1; - poseTag = poseTag / static_cast(validPointsNum); - poseCenter = poseCenter / static_cast(validPointsNum); - } - - float getPoseTag() const { - return poseTag; - } - - float getMeanScore() const { - return sum / static_cast(size()); - } - - Peak& getPeak(size_t index) { - return peaks[index]; - } - - cv::Point2f& getPoseCenter() { - return poseCenter; - } - - size_t size() const { - return peaks.size(); - } - -private: - std::vector peaks; - cv::Point2f poseCenter = cv::Point2f(0.f, 0.f); - int validPointsNum = 0; - float poseTag = 0; - float sum = 0; -}; - -void findPeaks(const std::vector& nmsHeatMaps, - const std::vector& aembdsMaps, - std::vector>& allPeaks, - size_t jointId, - size_t maxNumPeople, - float detectionThreshold); - -std::vector matchByTag(std::vector>& allPeaks, - size_t maxNumPeople, - size_t numJoints, - float tagThreshold); - -void adjustAndRefine(std::vector& allPoses, - const std::vector& heatMaps, - const std::vector& aembdsMaps, - int poseId, - float delta); diff --git a/model_api/cpp/models/include/models/deblurring_model.h b/model_api/cpp/models/include/models/deblurring_model.h deleted file mode 100644 index a2f3cb70..00000000 --- a/model_api/cpp/models/include/models/deblurring_model.h +++ /dev/null @@ -1,52 +0,0 @@ -/* -// Copyright (C) 2021-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 writingb 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/image_model.h" - -namespace ov { -class InferRequest; -class Model; -} // namespace ov -struct InferenceResult; -struct InputData; -struct InternalModelData; -struct ResultBase; - -class DeblurringModel : public ImageModel { -public: - /// Constructor - /// @param modelFile name of model to load - /// @param inputImgSize size of image to set model input shape - /// @param layout - model input layout - DeblurringModel(const std::string& modelFile, const cv::Size& inputImgSize, const std::string& layout = ""); - - std::shared_ptr preprocess(const InputData& inputData, InferenceInput& input) override; - std::unique_ptr postprocess(InferenceResult& infResult) override; - -protected: - void prepareInputsOutputs(std::shared_ptr& model) override; - void changeInputSize(std::shared_ptr& model); - - static const size_t stride = 32; -}; diff --git a/model_api/cpp/models/include/models/detection_model_centernet.h b/model_api/cpp/models/include/models/detection_model_centernet.h deleted file mode 100644 index 1cf4d415..00000000 --- a/model_api/cpp/models/include/models/detection_model_centernet.h +++ /dev/null @@ -1,46 +0,0 @@ -/* -// 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 "models/detection_model.h" - -namespace ov { -class InferRequest; -class Model; -} // namespace ov -struct InferenceResult; -struct InputData; -struct InternalModelData; -struct ResultBase; - -class ModelCenterNet : public DetectionModel { -public: - ModelCenterNet(std::shared_ptr& model, const ov::AnyMap& configuration); - ModelCenterNet(std::shared_ptr& adapter); - - std::shared_ptr preprocess(const InputData& inputData, InferenceInput& input) override; - std::unique_ptr postprocess(InferenceResult& infResult) override; - - static std::string ModelType; - -protected: - void initDefaultParameters(const ov::AnyMap& configuration); - void prepareInputsOutputs(std::shared_ptr& model) override; - void updateModelInfo() override; -}; diff --git a/model_api/cpp/models/include/models/detection_model_faceboxes.h b/model_api/cpp/models/include/models/detection_model_faceboxes.h deleted file mode 100644 index d5ad8af5..00000000 --- a/model_api/cpp/models/include/models/detection_model_faceboxes.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -// 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 - -#include - -#include "models/detection_model_ext.h" - -namespace ov { -class Model; -} // namespace ov -struct InferenceResult; -struct ResultBase; - -class ModelFaceBoxes : public DetectionModelExt { -public: - static const int INIT_VECTOR_SIZE = 200; - - ModelFaceBoxes(std::shared_ptr& model, const ov::AnyMap& configuration); - ModelFaceBoxes(std::shared_ptr& adapter); - using DetectionModelExt::DetectionModelExt; - - std::unique_ptr postprocess(InferenceResult& infResult) override; - static std::string ModelType; - -protected: - size_t maxProposalsCount = 0; - const std::vector variance = {0.1f, 0.2f}; - const std::vector steps = {32, 64, 128}; - const std::vector> minSizes = {{32, 64, 128}, {256}, {512}}; - std::vector anchors; - void prepareInputsOutputs(std::shared_ptr& model) override; - void priorBoxes(const std::vector>& featureMaps); - void initDefaultParameters(const ov::AnyMap& configuration); - void updateModelInfo() override; -}; diff --git a/model_api/cpp/models/include/models/detection_model_retinaface.h b/model_api/cpp/models/include/models/detection_model_retinaface.h deleted file mode 100644 index e505db43..00000000 --- a/model_api/cpp/models/include/models/detection_model_retinaface.h +++ /dev/null @@ -1,70 +0,0 @@ -/* -// 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 - -#include "models/detection_model_ext.h" - -namespace ov { -class Model; -} // namespace ov -struct InferenceResult; -struct ResultBase; - -class ModelRetinaFace : public DetectionModelExt { -public: - static const int LANDMARKS_NUM = 5; - static const int INIT_VECTOR_SIZE = 200; - - ModelRetinaFace(std::shared_ptr& model, const ov::AnyMap& configuration); - ModelRetinaFace(std::shared_ptr& adapter); - using DetectionModelExt::DetectionModelExt; - - std::unique_ptr postprocess(InferenceResult& infResult) override; - static std::string ModelType; - -protected: - struct AnchorCfgLine { - int stride; - std::vector scales; - int baseSize; - std::vector ratios; - }; - - bool shouldDetectMasks = false; - bool shouldDetectLandmarks = false; - const float maskThreshold = 0.8f; - float landmarkStd = 1.0f; - - enum OutputType { OUT_BOXES, OUT_SCORES, OUT_LANDMARKS, OUT_MASKSCORES, OUT_MAX }; - - std::vector separateoutputNames[OUT_MAX]; - const std::vector anchorCfg = { - {32, {32, 16}, 16, {1}}, {16, {8, 4}, 16, {1}}, {8, {2, 1}, 16, {1}}}; - std::map> anchorsFpn; - std::vector> anchors; - - void generateAnchorsFpn(); - void prepareInputsOutputs(std::shared_ptr& model) override; - void initDefaultParameters(const ov::AnyMap& configuration); - void updateModelInfo() override; -}; diff --git a/model_api/cpp/models/include/models/detection_model_retinaface_pt.h b/model_api/cpp/models/include/models/detection_model_retinaface_pt.h deleted file mode 100644 index c32729c8..00000000 --- a/model_api/cpp/models/include/models/detection_model_retinaface_pt.h +++ /dev/null @@ -1,75 +0,0 @@ -/* -// Copyright (C) 2021-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 -#include - -#include "models/detection_model_ext.h" - -namespace ov { -class Model; -class Tensor; -} // namespace ov -struct InferenceResult; -struct ResultBase; - -class ModelRetinaFacePT : public DetectionModelExt { -public: - struct Box { - float cX; - float cY; - float width; - float height; - }; - - ModelRetinaFacePT(std::shared_ptr& model, const ov::AnyMap& configuration); - ModelRetinaFacePT(std::shared_ptr& adapter); - using DetectionModelExt::DetectionModelExt; - - std::unique_ptr postprocess(InferenceResult& infResult) override; - static std::string ModelType; - -protected: - size_t landmarksNum = 0; - float variance[2] = {0.1f, 0.2f}; - - enum OutputType { OUT_BOXES, OUT_SCORES, OUT_LANDMARKS, OUT_MAX }; - - std::vector priors; - - std::vector filterByScore(const ov::Tensor& scoresTensor, const float confidence_threshold); - std::vector getFilteredScores(const ov::Tensor& scoresTensor, const std::vector& indicies); - std::vector getFilteredLandmarks(const ov::Tensor& landmarksTensor, - const std::vector& indicies, - int imgWidth, - int imgHeight); - std::vector generatePriorData(); - std::vector getFilteredProposals(const ov::Tensor& boxesTensor, - const std::vector& indicies, - int imgWidth, - int imgHeight); - - void prepareInputsOutputs(std::shared_ptr& model) override; - void initDefaultParameters(const ov::AnyMap& configuration); - void updateModelInfo() override; -}; diff --git a/model_api/cpp/models/include/models/hpe_model_associative_embedding.h b/model_api/cpp/models/include/models/hpe_model_associative_embedding.h deleted file mode 100644 index 3993d00b..00000000 --- a/model_api/cpp/models/include/models/hpe_model_associative_embedding.h +++ /dev/null @@ -1,89 +0,0 @@ -/* -// Copyright (C) 2021-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 - -#include "models/image_model.h" - -namespace ov { -class InferRequest; -class Model; -class Shape; -} // namespace ov -struct HumanPose; -struct InferenceResult; -struct InputData; -struct InternalModelData; -struct ResultBase; - -class HpeAssociativeEmbedding : public ImageModel { -public: - /// Constructor - /// @param modelFile name of model to load - /// @param aspectRatio - the ratio of input width to its height. - /// @param targetSize - the length of a short image side used for model reshaping. - /// @param confidence_threshold - threshold to eliminate low-confidence poses. - /// Any pose with confidence lower than this threshold will be ignored. - /// @param layout - model input layout - HpeAssociativeEmbedding(const std::string& modelFile, - double aspectRatio, - int targetSize, - float confidence_threshold, - const std::string& layout = "", - float delta = 0.0, - const std::string& resize_type = "fit_to_window"); - - std::unique_ptr postprocess(InferenceResult& infResult) override; - - std::shared_ptr preprocess(const InputData& inputData, InferenceInput& input) override; - -protected: - void prepareInputsOutputs(std::shared_ptr& model) override; - - cv::Size inputLayerSize; - double aspectRatio; - int targetSize; - float confidence_threshold; - float delta; - - std::string embeddingsTensorName; - std::string heatmapsTensorName; - std::string nmsHeatmapsTensorName; - - static const int numJoints = 17; - static const int stride = 32; - static const int maxNumPeople = 30; - static const cv::Vec3f meanPixel; - static const float detectionThreshold; - static const float tagThreshold; - - void changeInputSize(std::shared_ptr& model); - - std::string findTensorByName(const std::string& tensorName, const std::vector& outputNames); - - std::vector split(float* data, const ov::Shape& shape); - - std::vector extractPoses(std::vector& heatMaps, - const std::vector& aembdsMaps, - const std::vector& nmsHeatMaps) const; -}; diff --git a/model_api/cpp/models/include/models/hpe_model_openpose.h b/model_api/cpp/models/include/models/hpe_model_openpose.h deleted file mode 100644 index e65d5ed2..00000000 --- a/model_api/cpp/models/include/models/hpe_model_openpose.h +++ /dev/null @@ -1,78 +0,0 @@ -/* -// 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 - -#include "models/image_model.h" - -namespace ov { -class InferRequest; -class Model; -} // namespace ov -struct HumanPose; -struct InferenceResult; -struct InputData; -struct InternalModelData; -struct ResultBase; - -class HPEOpenPose : public ImageModel { -public: - /// Constructor - /// @param modelFile name of model to load - /// @param aspectRatio - the ratio of input width to its height. - /// @param targetSize - the height used for model reshaping. - /// @param confidence_threshold - threshold to eliminate low-confidence keypoints. - /// @param layout - model input layout - HPEOpenPose(const std::string& modelFile, - double aspectRatio, - int targetSize, - float confidence_threshold, - const std::string& layout = ""); - - std::unique_ptr postprocess(InferenceResult& infResult) override; - - std::shared_ptr preprocess(const InputData& inputData, InferenceInput& input) override; - - static const size_t keypointsNumber = 18; - -protected: - void prepareInputsOutputs(std::shared_ptr& model) override; - - static const int minJointsNumber = 3; - static const int stride = 8; - static const int upsampleRatio = 4; - static const cv::Vec3f meanPixel; - static const float minPeaksDistance; - static const float midPointsScoreThreshold; - static const float foundMidPointsRatioThreshold; - static const float minSubsetScore; - cv::Size inputLayerSize; - double aspectRatio; - int targetSize; - float confidence_threshold; - - std::vector extractPoses(const std::vector& heatMaps, const std::vector& pafs) const; - void resizeFeatureMaps(std::vector& featureMaps) const; - - void changeInputSize(std::shared_ptr& model); -}; diff --git a/model_api/cpp/models/include/models/jpeg_restoration_model.h b/model_api/cpp/models/include/models/jpeg_restoration_model.h deleted file mode 100644 index 65949e49..00000000 --- a/model_api/cpp/models/include/models/jpeg_restoration_model.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -// Copyright (C) 2021-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 writingb 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 "models/image_model.h" - -namespace ov { -class InferRequest; -class Model; -} // namespace ov -struct InferenceResult; -struct InputData; -struct InternalModelData; -struct ResultBase; -class JPEGRestorationModel : public ImageModel { -public: - /// Constructor - /// @param modelFile name of model to load - /// @param inputImgSize size of image to set model input shape - /// @param jpegCompression flag allows to perform compression before the inference - /// @param layout - model input layout - JPEGRestorationModel(const std::string& modelFile, - const cv::Size& inputImgSize, - bool jpegCompression, - const std::string& layout = ""); - - std::shared_ptr preprocess(const InputData& inputData, InferenceInput& input) override; - std::unique_ptr postprocess(InferenceResult& infResult) override; - -protected: - void prepareInputsOutputs(std::shared_ptr& model) override; - void changeInputSize(std::shared_ptr& model); - - static const size_t stride = 8; - bool jpegCompression = false; -}; diff --git a/model_api/cpp/models/include/models/openpose_decoder.h b/model_api/cpp/models/include/models/openpose_decoder.h deleted file mode 100644 index 479de910..00000000 --- a/model_api/cpp/models/include/models/openpose_decoder.h +++ /dev/null @@ -1,62 +0,0 @@ -/* -// 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 - -struct HumanPose; - -struct Peak { - Peak(const int id = -1, const cv::Point2f& pos = cv::Point2f(), const float score = 0.0f); - - int id; - cv::Point2f pos; - float score; -}; - -struct HumanPoseByPeaksIndices { - explicit HumanPoseByPeaksIndices(const int keypointsNumber); - - std::vector peaksIndices; - int nJoints; - float score; -}; - -struct TwoJointsConnection { - TwoJointsConnection(const int firstJointIdx, const int secondJointIdx, const float score); - - int firstJointIdx; - int secondJointIdx; - float score; -}; - -void findPeaks(const std::vector& heatMaps, - const float minPeaksDistance, - std::vector>& allPeaks, - int heatMapId, - float confidence_threshold); - -std::vector groupPeaksToPoses(const std::vector>& allPeaks, - const std::vector& pafs, - const size_t keypointsNumber, - const float midPointsScoreThreshold, - const float foundMidPointsRatioThreshold, - const int minJointsNumber, - const float minSubsetScore); diff --git a/model_api/cpp/models/include/models/style_transfer_model.h b/model_api/cpp/models/include/models/style_transfer_model.h deleted file mode 100644 index 01da2286..00000000 --- a/model_api/cpp/models/include/models/style_transfer_model.h +++ /dev/null @@ -1,43 +0,0 @@ -/* -// Copyright (C) 2021-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 writingb 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 "models/image_model.h" - -namespace ov { -class InferRequest; -class Model; -} // namespace ov -struct InferenceResult; -struct InputData; -struct InternalModelData; -struct ResultBase; - -class StyleTransferModel : public ImageModel { -public: - /// Constructor - /// @param modelFile name of model to load - /// @param layout - model input layout - StyleTransferModel(const std::string& modelFile, const std::string& layout = ""); - - std::unique_ptr postprocess(InferenceResult& infResult) override; - -protected: - void prepareInputsOutputs(std::shared_ptr& model) override; -}; diff --git a/model_api/cpp/models/include/models/super_resolution_model.h b/model_api/cpp/models/include/models/super_resolution_model.h deleted file mode 100644 index a9354161..00000000 --- a/model_api/cpp/models/include/models/super_resolution_model.h +++ /dev/null @@ -1,49 +0,0 @@ -/* -// Copyright (C) 2021-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 writingb 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 "models/image_model.h" - -namespace ov { -class InferRequest; -class Model; -} // namespace ov -struct InferenceResult; -struct InputData; -struct InternalModelData; -struct ResultBase; - -class SuperResolutionModel : public ImageModel { -public: - /// Constructor - /// @param modelFile name of model to load - /// @param layout - model input layout - SuperResolutionModel(const std::string& modelFile, - const cv::Size& inputImgSize, - const std::string& layout = ""); - - std::shared_ptr preprocess(const InputData& inputData, InferenceInput& input) override; - std::unique_ptr postprocess(InferenceResult& infResult) override; - -protected: - void changeInputSize(std::shared_ptr& model, int coeff); - void prepareInputsOutputs(std::shared_ptr& model) override; -};