iVS3D v2.0.9
Loading...
Searching...
No Matches
ModelManager.h
Go to the documentation of this file.
1#pragma once
2
10#include <memory>
11#include <optional>
12
13#include <QObject>
14#include <QHash>
15#include <QMetaType>
16#include <QString>
17#include <QStringList>
18#include <QVector>
19#include <QJsonObject>
20
21#include <tl/expected.hpp>
22
23#include <ModelConfig.h>
24
25namespace MCFG {
26
43class ModelManager : public QObject {
44 Q_OBJECT
45
46public:
50 enum class ModelState {
51 Ready = 0,
52 MissingConfig = 1,
53 MissingModel = 2,
54 InvalidConfig = 3,
55 Incompatible = 4
56 };
57
61 struct ModelEntry {
63 QString name;
65 QString jsonPath;
67 QString onnxPath;
69 ModelState state = ModelState::MissingConfig;
71 QString error;
73 std::shared_ptr<ModelConfig> config;
74 };
75
80 explicit ModelManager(QString modelDir = defaultModelDirectory());
81
84
89 static QString defaultModelDirectory();
90
99 void setNameFilter(const QString& pattern);
100
105 QString nameFilter() const noexcept;
106
110 void refresh();
111
113 const QVector<ModelEntry>& models() const noexcept;
114
119 QStringList availableModelNames() const;
120
126 ModelState modelState(const QString& name) const noexcept;
127
133 QString modelError(const QString& name) const noexcept;
134
140 std::optional<ModelEntry> activateModel(const QString& name);
141
146 std::optional<ModelEntry> activeModel() const noexcept;
147
149 const QString& activeModelName() const noexcept;
150
158 bool setClassSelected(const QString& modelName,
159 ModelConfig::ClassId id, bool selected);
160
166 void markModelIncompatible(const QString& name, const QString& reason);
167
173 QString modelToString(const QString& name) const noexcept;
174
180 QJsonObject modelToJson(const QString& name) const noexcept;
181
187 std::optional<ModelEntry> modelFromJson(const QJsonObject& obj) const noexcept;
188
189signals:
196 void modelActivated(const QString& modelName, ModelManager::ModelState state, const QString& error);
197
202 void classListUpdated(const QVector<ModelConfig::ClassInfo>& classes);
203
208 void modelsListUpdated(const QVector<ModelEntry>& models);
209
210public slots:
215 void onModelActivationRequested(const QString& modelName);
216
223 void onClassSelectionRequested(const QString& modelName, uint classId, bool selected);
224
229
235 void onApplyMeanStdRequested(const QString& modelName, bool apply);
236
242 void onNormalizeTo01Requested(const QString& modelName, bool normalize);
243
249 void onInputAlignmentRequested(const QString& modelName, uint alignment);
250
251private:
252 const ModelEntry* findEntry(const QString& name) const noexcept;
253
254 QString modelDir_;
255 QString nameFilter_; // Wildcard pattern for filtering models
256 QVector<ModelEntry> models_;
257 QHash<QString, int> indexByName_;
258
259 QString activeModelName_;
260};
261
262} // namespace MCFG
263
264// Register custom types for use in signals/slots
265Q_DECLARE_METATYPE(MCFG::ModelManager::ModelState)
266Q_DECLARE_METATYPE(MCFG::ModelManager::ModelEntry)
267Q_DECLARE_METATYPE(QVector<MCFG::ModelManager::ModelEntry>)
Model configuration container and JSON loader for neural-network metadata.
Stores one parsed model configuration and runtime class-selection state.
Definition ModelConfig.h:52
Manages model configurations in a directory and exposes UI-friendly state.
Definition ModelManager.h:43
void modelsListUpdated(const QVector< ModelEntry > &models)
Emitted when models list is refreshed.
QString modelError(const QString &name) const noexcept
Get error text of a model by name.
Definition ModelManager.cpp:66
bool setClassSelected(const QString &modelName, ModelConfig::ClassId id, bool selected)
Update selected state of one class of one model.
Definition ModelManager.cpp:190
std::optional< ModelEntry > modelFromJson(const QJsonObject &obj) const noexcept
Restore class-selection state from JSON for a known model.
Definition ModelManager.cpp:251
ModelState
High-level availability state of a model entry.
Definition ModelManager.h:50
void onInputAlignmentRequested(const QString &modelName, uint alignment)
Slot to handle input alignment changes from UI thread.
Definition ModelManager.cpp:305
const QVector< ModelEntry > & models() const noexcept
Get all discovered model entries (ready and invalid).
Definition ModelManager.cpp:33
QString nameFilter() const noexcept
Get the current name filter pattern.
Definition ModelManager.cpp:28
void setNameFilter(const QString &pattern)
Set a filename filter pattern (wildcard style) Only model configs matching this pattern will be loade...
Definition ModelManager.cpp:23
static QString defaultModelDirectory()
Get the platform-specific default model directory.
Definition ModelManager.cpp:18
void onModelActivationRequested(const QString &modelName)
Slot to handle model activation requests from UI thread.
Definition ModelManager.cpp:272
void onApplyMeanStdRequested(const QString &modelName, bool apply)
Slot to handle apply mean/std setting changes from UI thread.
Definition ModelManager.cpp:285
void markModelIncompatible(const QString &name, const QString &reason)
Mark a model as incompatible with runtime/model consumer.
Definition ModelManager.cpp:201
const QString & activeModelName() const noexcept
Get name of active model, or empty if none active.
Definition ModelManager.cpp:186
void classListUpdated(const QVector< ModelConfig::ClassInfo > &classes)
Emitted when class list is updated for the current model.
void onNormalizeTo01Requested(const QString &modelName, bool normalize)
Slot to handle normalize to [0,1] setting changes from UI thread.
Definition ModelManager.cpp:295
std::optional< ModelEntry > activeModel() const noexcept
Get currently active model entry.
Definition ModelManager.cpp:178
QString modelToString(const QString &name) const noexcept
Serialize model selection summary as user-friendly text.
Definition ModelManager.cpp:213
QJsonObject modelToJson(const QString &name) const noexcept
Serialize model class-selection state to JSON.
Definition ModelManager.cpp:232
void modelActivated(const QString &modelName, ModelManager::ModelState state, const QString &error)
Emitted when a model is activated and initial data is ready.
QStringList availableModelNames() const
Get sorted names of models currently in Ready state.
Definition ModelManager.cpp:37
void refresh()
Re-scan the model directory and rebuild model list/state.
Definition ModelManager.cpp:74
ModelState modelState(const QString &name) const noexcept
Get state of a model by name.
Definition ModelManager.cpp:58
std::optional< ModelEntry > activateModel(const QString &name)
Activate a model and emit activation/class-list signals.
Definition ModelManager.cpp:147
~ModelManager()
Destructor.
void onModelsRefreshRequested()
Slot to handle refresh requests from UI thread.
Definition ModelManager.cpp:280
void onClassSelectionRequested(const QString &modelName, uint classId, bool selected)
Slot to handle class selection requests from UI thread.
Definition ModelManager.cpp:276
Namespace containing model-configuration components used by iVS3D plugins.
Definition ModelConfig.h:35
Cached record for one discovered model.
Definition ModelManager.h:61
QString error
Definition ModelManager.h:71
ModelState state
Definition ModelManager.h:69
QString name
Definition ModelManager.h:63
QString jsonPath
Definition ModelManager.h:65
QString onnxPath
Definition ModelManager.h:67