From e853254c00263077c3a389a328834f6c3f13c1a1 Mon Sep 17 00:00:00 2001 From: Alek-ban Date: Mon, 8 Jun 2026 07:33:46 +0300 Subject: [PATCH] feat: calibration models logic mistaces --- .../SampleCalibrationViewModel.cs | 86 +++++-------------- .../SeparatorCalibrationViewModel.cs | 85 +++++------------- 2 files changed, 41 insertions(+), 130 deletions(-) diff --git a/GSS2/ViewModels/AmineContent/SampleCalibrationViewModel.cs b/GSS2/ViewModels/AmineContent/SampleCalibrationViewModel.cs index be0ab01..6fbb1ac 100644 --- a/GSS2/ViewModels/AmineContent/SampleCalibrationViewModel.cs +++ b/GSS2/ViewModels/AmineContent/SampleCalibrationViewModel.cs @@ -223,28 +223,24 @@ public partial class SampleCalibrationViewModel : ViewModelBase // Если это новая запись if (SelectedRecord is null) { - // Если это новая запись, то копируем её + // Копируем её var newRecord = CopyRecord(EditingRecord); // Для каждого вектора for (int i = 0; i < newRecord.VectorRecords.Count(); i++) { var vector = newRecord.VectorRecords[i]; - // Если вектор есть в базе данных, то пропускаем его - if (_context.Entry(vector).State is not EntityState.Detached) - continue; - // Если вектора нет в базе данных, то добавляем его в базу + // Добавляем вектор в базу var attachedRecord = _context.VectorRecords.Add(vector); - // Удаляем отвязанное от базы данных изображение из записи + // Удаляем отвязанный от базы данных вектор из записи newRecord.VectorRecords.RemoveAt(i); - // Добавляем привязанное изображение к записи + // Добавляем привязанный к базе данных вектор в запись newRecord.VectorRecords.Insert(i, attachedRecord.Entity); } - // Если записи нет в базе данных - if (_context.Entry(newRecord).State is EntityState.Detached) + { - // То добавляем её в базу + // То добавляем запись в базу var attachedRecord = _context.SampleRecords.Add(newRecord); // Заменяем текущую запись на привязанную к базе данных newRecord = attachedRecord.Entity; @@ -273,64 +269,22 @@ public partial class SampleCalibrationViewModel : ViewModelBase SelectedRecord.MixtureActualRate = EditingRecord.MixtureActualRate; SelectedRecord.MeasuredContent = EditingRecord.MeasuredContent; SelectedRecord.Image = EditingRecord.Image; + SelectedRecord.VectorRecords = EditingRecord.VectorRecords; - // Удаляем старые векторы в записи + // Для каждого вектора в выбранной записи + for (int i = 0; i < SelectedRecord.VectorRecords.Count(); i++) { - // Находим векторы которые нужно удалить - - // те которые есть в выбранной записи, но нет в редактируемой - var vectorsToRemove = SelectedRecord.VectorRecords - .Where(e => EditingRecord.VectorRecords.All(i => i.Id != e.Id)) - .ToList(); + var vector = SelectedRecord.VectorRecords[i]; + // Если вектор есть в базе данных, то пропускаем его + if (_context.Entry(vector).State is not EntityState.Detached) + continue; - // Удаляем старые векторы - foreach (var image in vectorsToRemove) - SelectedRecord.VectorRecords.Remove(image); - - // Для каждого вектора в редактируемой записи - foreach (var editedImage in EditingRecord.VectorRecords) - { - // Находим изображение в выбранной записи (оно будет привязано к базе данных) - var existing = SelectedRecord.VectorRecords - .FirstOrDefault(i => i.Id == editedImage.Id); - - // Если вектор не найден - // Копируем вектор в выбранную запись - if (existing is null) - SelectedRecord.VectorRecords.Add(CopyRecord(editedImage)); - // Если вектор найден - // Изменяем данные вектора на данные вектора из редактируемой записи - else - existing.Values = editedImage.Values; - } - - // Для каждого вектора в выбранной записи - for (int i = 0; i < SelectedRecord.VectorRecords.Count(); i++) - { - var vector = SelectedRecord.VectorRecords[i]; - // Если вектор есть в базе данных, то пропускаем его - if (_context.Entry(vector).State is not EntityState.Detached) - continue; - - // Если изображения нет в базе данных, то добавляем его в базу - var attachedRecord = _context.VectorRecords.Add(vector); - // Удаляем отвязанное от базы данных изображение из записи - SelectedRecord.VectorRecords.RemoveAt(i); - // Добавляем привязанное изображение к записи - SelectedRecord.VectorRecords.Insert(i, attachedRecord.Entity); - } - } - - // Если записи нет в базе данных - if (_context.Entry(SelectedRecord).State is EntityState.Detached) - { - // То добавляем её в базу - var attachedRecord = _context.SampleRecords.Add(SelectedRecord); - // Находим текущую запись в списке - var index = Records.IndexOf(SelectedRecord); - // Заменяем её в списке на привязанную к базе данных - Records[index] = attachedRecord.Entity; - // Заменяем выбранную запись на привязанную - SelectedRecord = attachedRecord.Entity; + // Если вектора нет в базе данных, то добавляем его в базу + var attachedRecord = _context.VectorRecords.Add(vector); + // Удаляем отвязанный от базы данных вектор из записи + SelectedRecord.VectorRecords.RemoveAt(i); + // Добавляем привязанный вектор к записи + SelectedRecord.VectorRecords.Insert(i, attachedRecord.Entity); } // Сохраняем изменения в базе данных @@ -433,6 +387,8 @@ public partial class SampleCalibrationViewModel : ViewModelBase { // Распаковываем результат var (avgImage, roi, features) = result.Value; + _logger.LogInformation($"Длинна вектора признаков: {features.Count()}"); + // Обрабатываем среднее изображение avgImage = new OpenCvSharp.Mat(avgImage, roi); OpenCvSharp.Cv2.Resize( diff --git a/GSS2/ViewModels/AmineContent/SeparatorCalibrationViewModel.cs b/GSS2/ViewModels/AmineContent/SeparatorCalibrationViewModel.cs index 8fee2a3..38e7c97 100644 --- a/GSS2/ViewModels/AmineContent/SeparatorCalibrationViewModel.cs +++ b/GSS2/ViewModels/AmineContent/SeparatorCalibrationViewModel.cs @@ -206,28 +206,24 @@ public partial class SeparatorCalibrationViewModel : ViewModelBase // Если это новая запись if (SelectedRecord is null) { - // Если это новая запись, то копируем её + // Копируем её var newRecord = CopyRecord(EditingRecord); // Для каждого вектора for (int i = 0; i < newRecord.VectorRecords.Count(); i++) { var vector = newRecord.VectorRecords[i]; - // Если вектор есть в базе данных, то пропускаем его - if (_context.Entry(vector).State is not EntityState.Detached) - continue; - // Если вектора нет в базе данных, то добавляем его в базу + // Добавляем вектор в базу var attachedRecord = _context.VectorRecords.Add(vector); - // Удаляем отвязанное от базы данных изображение из записи + // Удаляем отвязанный от базы данных вектор из записи newRecord.VectorRecords.RemoveAt(i); - // Добавляем привязанное изображение к записи + // Добавляем привязанный к базе данных вектор в запись newRecord.VectorRecords.Insert(i, attachedRecord.Entity); } - // Если записи нет в базе данных - if (_context.Entry(newRecord).State is EntityState.Detached) + { - // То добавляем её в базу + // То добавляем запись в базу var attachedRecord = _context.SeparatorRecords.Add(newRecord); // Заменяем текущую запись на привязанную к базе данных newRecord = attachedRecord.Entity; @@ -247,64 +243,22 @@ public partial class SeparatorCalibrationViewModel : ViewModelBase SelectedRecord.Type = EditingRecord.Type; SelectedRecord.Batch = EditingRecord.Batch; SelectedRecord.Image = EditingRecord.Image; + SelectedRecord.VectorRecords = EditingRecord.VectorRecords; - // Удаляем старые векторы в записи + // Для каждого вектора в выбранной записи + for (int i = 0; i < SelectedRecord.VectorRecords.Count(); i++) { - // Находим векторы которые нужно удалить - - // те которые есть в выбранной записи, но нет в редактируемой - var vectorsToRemove = SelectedRecord.VectorRecords - .Where(e => EditingRecord.VectorRecords.All(i => i.Id != e.Id)) - .ToList(); + var vector = SelectedRecord.VectorRecords[i]; + // Если вектор есть в базе данных, то пропускаем его + if (_context.Entry(vector).State is not EntityState.Detached) + continue; - // Удаляем старые векторы - foreach (var image in vectorsToRemove) - SelectedRecord.VectorRecords.Remove(image); - - // Для каждого вектора в редактируемой записи - foreach (var editedImage in EditingRecord.VectorRecords) - { - // Находим изображение в выбранной записи (оно будет привязано к базе данных) - var existing = SelectedRecord.VectorRecords - .FirstOrDefault(i => i.Id == editedImage.Id); - - // Если вектор не найден - // Копируем вектор в выбранную запись - if (existing is null) - SelectedRecord.VectorRecords.Add(CopyRecord(editedImage)); - // Если вектор найден - // Изменяем данные вектора на данные вектора из редактируемой записи - else - existing.Values = editedImage.Values; - } - - // Для каждого вектора в выбранной записи - for (int i = 0; i < SelectedRecord.VectorRecords.Count(); i++) - { - var vector = SelectedRecord.VectorRecords[i]; - // Если вектор есть в базе данных, то пропускаем его - if (_context.Entry(vector).State is not EntityState.Detached) - continue; - - // Если изображения нет в базе данных, то добавляем его в базу - var attachedRecord = _context.VectorRecords.Add(vector); - // Удаляем отвязанное от базы данных изображение из записи - SelectedRecord.VectorRecords.RemoveAt(i); - // Добавляем привязанное изображение к записи - SelectedRecord.VectorRecords.Insert(i, attachedRecord.Entity); - } - } - - // Если записи нет в базе данных - if (_context.Entry(SelectedRecord).State is EntityState.Detached) - { - // То добавляем её в базу - var attachedRecord = _context.SeparatorRecords.Add(SelectedRecord); - // Находим текущую запись в списке - var index = Records.IndexOf(SelectedRecord); - // Заменяем её в списке на привязанную к базе данных - Records[index] = attachedRecord.Entity; - // Заменяем выбранную запись на привязанную - SelectedRecord = attachedRecord.Entity; + // Если вектора нет в базе данных, то добавляем его в базу + var attachedRecord = _context.VectorRecords.Add(vector); + // Удаляем отвязанный от базы данных вектор из записи + SelectedRecord.VectorRecords.RemoveAt(i); + // Добавляем привязанный вектор к записи + SelectedRecord.VectorRecords.Insert(i, attachedRecord.Entity); } // Сохраняем изменения в базе данных @@ -407,6 +361,7 @@ public partial class SeparatorCalibrationViewModel : ViewModelBase { // Распаковываем результат var (avgImage, roi, features) = result.Value; + _logger.LogInformation($"Длинна вектора признаков: {features.Count()}"); // Обрабатываем среднее изображение avgImage = new OpenCvSharp.Mat(avgImage, roi); OpenCvSharp.Cv2.Resize(