Medical Imaging Interaction Toolkit  2025.12.02
Medical Imaging Interaction Toolkit
QmitknnUNetToolGUI.h
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #ifndef QmitknnUNetToolGUI_h
14 #define QmitknnUNetToolGUI_h
15 
18 #include "QmitknnUNetGPU.h"
19 #include "QmitknnUNetWorker.h"
20 #include "mitkProcessExecutor.h"
21 #include "mitknnUnetTool.h"
22 #include "ui_QmitknnUNetToolGUIControls.h"
24 #include <QCache>
25 #include <QMessageBox>
26 #include <QSettings>
27 #include <QThread>
30 #include <boost/functional/hash.hpp>
31 #include <unordered_map>
32 
34 {
35 public:
36  mitk::MultiLabelSegmentation::ConstPointer m_SegCache;
37  static size_t GetUniqueHash(std::vector<mitk::ModelParams> &requestQ)
38  {
39  size_t hashCode = 0;
40  for (mitk::ModelParams &request : requestQ)
41  {
42  boost::hash_combine(hashCode, request.generateHash());
43  }
44  return hashCode;
45  }
46 };
47 
49 {
50  Q_OBJECT
51 
52 public:
54  itkFactorylessNewMacro(Self);
55  itkCloneMacro(Self);
56 
57  QCache<size_t, nnUNetCache> m_Cache;
58 
63  std::unordered_map<std::string, mitk::ProcessExecutor::Pointer> m_Processes;
64 
65 protected slots:
66 
72 
77  void OnDirectoryChanged(const QString&);
78 
83  void OnModelChanged(const QString&);
84 
89  void OnTaskChanged(const QString &);
90 
95  void OnTrainerChanged(const QString&);
96 
101  void OnCheckBoxChanged(int);
102 
109 
114  void SegmentationResultHandler(mitk::nnUNetTool *, bool forceRender = false);
115 
121 
126  void OnPythonPathChanged(const QString&);
127 
133 
139 
145 
150  void OnDownloadWorkerExit(bool, const QString);
151 
157 
158 signals:
163 
164 protected:
167 
168  void ConnectNewTool(mitk::SegWithPreviewTool* newTool) override;
169  void InitializeUI(QBoxLayout* mainLayout) override;
170  void EnableWidgets(bool enabled) override;
171 
172 private:
176  void SetComboBoxToNone(ctkCheckableComboBox*);
177 
182  void FillAvailableModelsInfoFromJSON(const QString&);
183 
188  void ExportAvailableModelsAsJSON(const QString&);
189 
194  void ClearAllModalities();
195 
200  void DisplayMultiModalInfoFromJSON(const QString&);
201 
206  void ClearAllModalLabels();
207 
215  void DumpJSONfromPickle(const QString&);
216 
222  QString FetchResultsFolderFromEnv();
223 
229  unsigned int FetchSelectedGPUFromUI();
230 
236  void SetGPUInfo();
237 
242  void AddToCache(size_t&, mitk::MultiLabelSegmentation::ConstPointer);
243 
248  void CheckAllInCheckableComboBox(ctkCheckableComboBox*);
249 
256  std::pair<QStringList, QStringList> ExtractTrainerPlannerFromString(QStringList);
261  void ProcessEnsembleModelsParams(mitk::nnUNetTool::Pointer);
262 
267  void ProcessModelParams(mitk::nnUNetTool::Pointer);
268 
272  void ShowEnsembleLayout(bool visible = true);
273 
277  void ShowErrorMessage(const std::string&, QMessageBox::Icon = QMessageBox::Critical);
278 
282  void WriteStatusMessage(const QString&);
283 
287  void WriteErrorMessage(const QString&);
288 
293  void AutoParsePythonPaths();
294 
298  bool IsModelExists(const QString&, const QString&, const QString&);
299 
305  void ClearAllComboBoxes();
306 
311  void DisableEverything();
312 
318  bool IsNNUNetInstalled(const QString&);
319 
325  mitk::ModelParams MapToRequest(
326  const QString&, const QString&, const QString&, const QString&, const std::vector<std::string>&);
327 
333  std::vector<std::string> FetchSelectedFoldsFromUI(ctkCheckableComboBox*);
334 
340  std::vector<mitk::Image::ConstPointer> FetchMultiModalImagesFromUI();
341 
346  void UpdateCacheCountOnUI();
347 
348  Ui_QmitknnUNetToolGUIControls m_Controls;
349  QmitkGPULoader m_GpuLoader;
350 
355  std::vector<QmitkSingleNodeSelectionWidget*> m_Modalities;
356  std::vector<QLabel*> m_ModalLabels;
357 
358  std::vector<std::unique_ptr<QmitknnUNetTaskParamsUITemplate>> m_EnsembleParams;
359 
360  mitk::NodePredicateBase::Pointer m_MultiModalPredicate;
361 
362  QString m_PythonPath;
363 
370  int m_UI_ROWS;
371 
376  std::shared_ptr<QmitknnUNetFolderParser> m_ParentFolder = nullptr;
377 
382  const QStringList m_VALID_MODELS = {"2d", "3d_lowres", "3d_fullres", "3d_cascade_fullres", "ensembles"};
383 
384  const QString m_CACHE_COUNT_BASE_LABEL = "Cached Items: ";
385 
386  const QString m_MITK_EXPORT_JSON_FILENAME = "mitk_export.json";
387 
388  const QString m_AVAILABLE_MODELS_JSON_FILENAME = "available_models.json";
389 
390  const QString m_PICKLE_FILENAME = "plans.pkl";
391 
395  QSettings m_Settings;
396 
397  bool m_IsResultsFolderValid = false;
398 
399  QThread* m_nnUNetThread;
400  nnUNetDownloadWorker* m_Worker;
401 
402  bool m_FirstPreviewComputation = true;
403  EnableConfirmSegBtnFunctionType m_SuperclassEnableConfirmSegBtnFnc;
404 };
405 #endif
#define MITKSEGMENTATIONUI_EXPORT
Class to load and save GPU information for further validation.
GUI for tools based on mitk::AutoMLSegmentationWithPreviewTool.
void OnCheckBoxChanged(int)
Qt slot.
void SegmentationResultHandler(mitk::nnUNetTool *, bool forceRender=false)
Qthread to capture successful nnUNet segmentation. Further, renders the LabelSet image.
void EnableWidgets(bool enabled) override
void Operate(QString, QString, mitk::ProcessExecutor::Pointer, mitk::ProcessExecutor::ArgumentListType)
signal for starting the segmentation which is caught by a worker thread.
void OnDownloadModel()
Qt slot.
void InitializeUI(QBoxLayout *mainLayout) override
std::unordered_map< std::string, mitk::ProcessExecutor::Pointer > m_Processes
The hash map stores all bifurcating processes' ID.
mitkClassMacro(QmitknnUNetToolGUI, QmitkMultiLabelSegWithPreviewToolGUIBase)
void OnRefreshPresssed()
Qt slot.
void OnPreviewRequested()
Qt slot.
void OnTrainerChanged(const QString &)
Qt slot.
void OnModelChanged(const QString &)
Qt slot.
QCache< size_t, nnUNetCache > m_Cache
void ConnectNewTool(mitk::SegWithPreviewTool *newTool) override
void OnDirectoryChanged(const QString &)
Qt slot.
void OnPythonPathChanged(const QString &)
Qt Slot.
void OnClearCachePressed()
Qt slot.
void SegmentationProcessFailed()
Qthread slot to capture failures from thread worker and shows error message.
void OnStopDownload()
Qt slot.
void OnTaskChanged(const QString &)
Qt slot.
void OnModalitiesNumberChanged(int)
Qt Slot.
void OnDownloadWorkerExit(bool, const QString)
Qt slot.
std::vector< std::string > ArgumentListType
Base class for any auto segmentation tool that provides a preview of the new segmentation.
nnUNet segmentation tool.
mitk::MultiLabelSegmentation::ConstPointer m_SegCache
static size_t GetUniqueHash(std::vector< mitk::ModelParams > &requestQ)
Class to execute some functions from the Segmentation Plugin in a separate thread.
nnUNet parameter request object holding all model parameters for input. Also holds output temporary d...