feat: calibration models logic mistaces

This commit is contained in:
2026-06-08 07:33:46 +03:00
parent 68147c4b3e
commit e853254c00
2 changed files with 41 additions and 130 deletions
@@ -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,35 +269,7 @@ public partial class SampleCalibrationViewModel : ViewModelBase
SelectedRecord.MixtureActualRate = EditingRecord.MixtureActualRate;
SelectedRecord.MeasuredContent = EditingRecord.MeasuredContent;
SelectedRecord.Image = EditingRecord.Image;
// Удаляем старые векторы в записи
{
// Находим векторы которые нужно удалить -
// те которые есть в выбранной записи, но нет в редактируемой
var vectorsToRemove = SelectedRecord.VectorRecords
.Where(e => EditingRecord.VectorRecords.All(i => i.Id != e.Id))
.ToList();
// Удаляем старые векторы
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;
}
SelectedRecord.VectorRecords = EditingRecord.VectorRecords;
// Для каждого вектора в выбранной записи
for (int i = 0; i < SelectedRecord.VectorRecords.Count(); i++)
@@ -311,27 +279,13 @@ public partial class SampleCalibrationViewModel : ViewModelBase
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;
}
// Сохраняем изменения в базе данных
_context.SaveChanges();
@@ -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(
@@ -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,35 +243,7 @@ public partial class SeparatorCalibrationViewModel : ViewModelBase
SelectedRecord.Type = EditingRecord.Type;
SelectedRecord.Batch = EditingRecord.Batch;
SelectedRecord.Image = EditingRecord.Image;
// Удаляем старые векторы в записи
{
// Находим векторы которые нужно удалить -
// те которые есть в выбранной записи, но нет в редактируемой
var vectorsToRemove = SelectedRecord.VectorRecords
.Where(e => EditingRecord.VectorRecords.All(i => i.Id != e.Id))
.ToList();
// Удаляем старые векторы
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;
}
SelectedRecord.VectorRecords = EditingRecord.VectorRecords;
// Для каждого вектора в выбранной записи
for (int i = 0; i < SelectedRecord.VectorRecords.Count(); i++)
@@ -285,27 +253,13 @@ public partial class SeparatorCalibrationViewModel : ViewModelBase
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;
}
// Сохраняем изменения в базе данных
_context.SaveChanges();
@@ -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(