Skip to main content

Model.h File

Model: user-facing model pipeline builder. More...

Included Headers

#include "builder/NodeGroup.h" #include "nodes/io/Input.h" #include "pipeline/Run.h" #include "pipeline/TensorSpec.h" #include <array> #include <cstdint> #include <memory> #include <optional> #include <string> #include <unordered_map> #include <vector>

Namespaces Index

namespacesimaai
namespaceneat
namespaceinternal

Classes Index

classModel
structPreprocConfig
structInferenceTerminalPolicy
structOptions
structSessionOptions
classRunner

Description

Model: user-facing model pipeline builder.

File Listing

The file content with the documentation metadata removed is:

1
6#pragma once
7
8#include "builder/NodeGroup.h"
9#include "nodes/io/Input.h"
10#include "pipeline/Run.h"
12
13#include <array>
14#include <cstdint>
15#include <memory>
16#include <optional>
17#include <string>
18#include <unordered_map>
19#include <vector>
20
21#if defined(SIMA_WITH_OPENCV)
22#include <opencv2/core/mat.hpp>
23#endif
24
25namespace simaai::neat {
26
27namespace internal {
28struct ModelAccess;
29} // namespace internal
30
32
33class Model {
34public:
35 struct PreprocConfig {
36 std::optional<int> input_width;
37 std::optional<int> input_height;
38 std::optional<int> output_width;
39 std::optional<int> output_height;
40 std::optional<int> scaled_width;
41 std::optional<int> scaled_height;
42 std::optional<std::string> input_img_type;
43 std::optional<std::string> output_img_type;
44 std::optional<bool> normalize;
45 std::optional<bool> aspect_ratio;
46 std::optional<std::array<float, 3>> channel_mean;
47 std::optional<std::array<float, 3>> channel_stddev;
48 std::optional<std::string> scaling_type;
49 std::optional<std::string> padding_type;
50 };
51
53 bool mla_only = false;
54 std::optional<std::size_t> last_stage_index;
55 std::optional<std::string> last_stage_name;
56 std::optional<std::string> last_plugin_id;
57 std::optional<std::string> last_processor;
58 };
59
60 struct Options {
61 // Input format & dims
62 std::string media_type = "video/x-raw";
63 std::string format = "RGB";
64
65 // Dynamic input limits for appsrc validation + pool sizing.
66 // If <= 0, defaults are applied (HD + depth 3).
70
71 // Preproc (canonical path)
73
74 // Postproc / detection
75 std::string decode_type;
76 float score_threshold = 0.0f;
77 float nms_iou_threshold = 0.0f;
78 int top_k = 0;
81
82 // Naming / wiring
83 std::string upstream_name = "decoder";
84 std::string name_suffix;
85
87 };
88
90 bool include_appsrc = true;
91 bool include_appsink = true;
92 std::string upstream_name;
93 std::string name_suffix;
94 std::string buffer_name;
95 };
96
98
99 explicit Model(const std::string& mpk_path);
100 explicit Model(const std::string& mpk_path, const Options& opt);
101
102 Model(Model&&) noexcept;
103 Model& operator=(Model&&) noexcept;
105
106 // Stage composition
107 simaai::neat::NodeGroup preprocess() const;
108 simaai::neat::NodeGroup inference() const;
109 simaai::neat::NodeGroup postprocess() const;
110 simaai::neat::NodeGroup session() const;
111 simaai::neat::NodeGroup session(SessionOptions opt) const;
112
113 // Introspection
116 std::unordered_map<std::string, std::string> metadata() const;
117
118 // Optional: for graph/advanced usage
119 NodeGroup fragment(Stage stage) const;
120 std::string backend_fragment(Stage stage) const;
121
122 simaai::neat::InputOptions input_appsrc_options(bool tensor_mode) const;
123 std::string find_config_path_by_plugin(const std::string& plugin_id) const;
124 std::string find_config_path_by_processor(const std::string& processor) const;
125 std::string infer_output_name() const;
126
127 class Runner {
128 public:
129 Runner() = default;
131
132 explicit operator bool() const noexcept;
133#if defined(SIMA_WITH_OPENCV)
134 bool push(const cv::Mat& input);
135#endif
136 bool push(const simaai::neat::Tensor& input);
137 bool push(const simaai::neat::Sample& input);
138 std::optional<simaai::neat::Sample> pull(int timeout_ms = -1);
139#if defined(SIMA_WITH_OPENCV)
140 simaai::neat::Sample run(const cv::Mat& input, int timeout_ms = -1);
141#endif
142 simaai::neat::Sample run(const simaai::neat::Tensor& input, int timeout_ms = -1);
143 simaai::neat::Sample run(const simaai::neat::Sample& input, int timeout_ms = -1);
144 int warmup(const simaai::neat::Tensor& input, int warm = -1, int timeout_ms = -1);
145 void close();
146
147 private:
148 simaai::neat::Run run_{};
149 };
150
151private:
152 static const SessionOptions& default_session_options();
153 static const simaai::neat::RunOptions& default_run_options();
154
155public:
159 const SessionOptions& opt = default_session_options(),
160 const simaai::neat::RunOptions& run_opt = default_run_options());
162 const SessionOptions& opt = default_session_options(),
163 const simaai::neat::RunOptions& run_opt = default_run_options());
164#if defined(SIMA_WITH_OPENCV)
165 Runner build(const cv::Mat& input, const SessionOptions& opt = default_session_options(),
166 const simaai::neat::RunOptions& run_opt = default_run_options());
167#endif
168
169 // Execution
170 simaai::neat::Sample run(const simaai::neat::Tensor& input, int timeout_ms = -1);
171 simaai::neat::Sample run(const std::vector<Tensor>& inputs, int timeout_ms = -1);
172 simaai::neat::Sample run(const simaai::neat::Sample& input, int timeout_ms = -1);
173#if defined(SIMA_WITH_OPENCV)
174 simaai::neat::Sample run(const cv::Mat& input, int timeout_ms = -1);
175#endif
176
177private:
178 friend struct internal::ModelAccess;
179 struct Impl;
180 std::unique_ptr<Impl> impl_;
181};
182
183} // namespace simaai::neat

Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.9.1.