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) if (SelectedRecord is null)
{ {
// Если это новая запись, то копируем её // Копируем её
var newRecord = CopyRecord(EditingRecord); var newRecord = CopyRecord(EditingRecord);
// Для каждого вектора // Для каждого вектора
for (int i = 0; i < newRecord.VectorRecords.Count(); i++) for (int i = 0; i < newRecord.VectorRecords.Count(); i++)
{ {
var vector = newRecord.VectorRecords[i]; var vector = newRecord.VectorRecords[i];
// Если вектор есть в базе данных, то пропускаем его
if (_context.Entry(vector).State is not EntityState.Detached)
continue;
// Если вектора нет в базе данных, то добавляем его в базу // Добавляем вектор в базу
var attachedRecord = _context.VectorRecords.Add(vector); var attachedRecord = _context.VectorRecords.Add(vector);
// Удаляем отвязанное от базы данных изображение из записи // Удаляем отвязанный от базы данных вектор из записи
newRecord.VectorRecords.RemoveAt(i); newRecord.VectorRecords.RemoveAt(i);
// Добавляем привязанное изображение к записи // Добавляем привязанный к базе данных вектор в запись
newRecord.VectorRecords.Insert(i, attachedRecord.Entity); newRecord.VectorRecords.Insert(i, attachedRecord.Entity);
} }
// Если записи нет в базе данных
if (_context.Entry(newRecord).State is EntityState.Detached)
{ {
// То добавляем её в базу // То добавляем запись в базу
var attachedRecord = _context.SampleRecords.Add(newRecord); var attachedRecord = _context.SampleRecords.Add(newRecord);
// Заменяем текущую запись на привязанную к базе данных // Заменяем текущую запись на привязанную к базе данных
newRecord = attachedRecord.Entity; newRecord = attachedRecord.Entity;
@@ -273,64 +269,22 @@ public partial class SampleCalibrationViewModel : ViewModelBase
SelectedRecord.MixtureActualRate = EditingRecord.MixtureActualRate; SelectedRecord.MixtureActualRate = EditingRecord.MixtureActualRate;
SelectedRecord.MeasuredContent = EditingRecord.MeasuredContent; SelectedRecord.MeasuredContent = EditingRecord.MeasuredContent;
SelectedRecord.Image = EditingRecord.Image; SelectedRecord.Image = EditingRecord.Image;
SelectedRecord.VectorRecords = EditingRecord.VectorRecords;
// Удаляем старые векторы в записи // Для каждого вектора в выбранной записи
for (int i = 0; i < SelectedRecord.VectorRecords.Count(); i++)
{ {
// Находим векторы которые нужно удалить - var vector = SelectedRecord.VectorRecords[i];
// те которые есть в выбранной записи, но нет в редактируемой // Если вектор есть в базе данных, то пропускаем его
var vectorsToRemove = SelectedRecord.VectorRecords if (_context.Entry(vector).State is not EntityState.Detached)
.Where(e => EditingRecord.VectorRecords.All(i => i.Id != e.Id)) continue;
.ToList();
// Удаляем старые векторы // Если вектора нет в базе данных, то добавляем его в базу
foreach (var image in vectorsToRemove) var attachedRecord = _context.VectorRecords.Add(vector);
SelectedRecord.VectorRecords.Remove(image); // Удаляем отвязанный от базы данных вектор из записи
SelectedRecord.VectorRecords.RemoveAt(i);
// Для каждого вектора в редактируемой записи // Добавляем привязанный вектор к записи
foreach (var editedImage in EditingRecord.VectorRecords) SelectedRecord.VectorRecords.Insert(i, attachedRecord.Entity);
{
// Находим изображение в выбранной записи (оно будет привязано к базе данных)
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;
} }
// Сохраняем изменения в базе данных // Сохраняем изменения в базе данных
@@ -433,6 +387,8 @@ public partial class SampleCalibrationViewModel : ViewModelBase
{ {
// Распаковываем результат // Распаковываем результат
var (avgImage, roi, features) = result.Value; var (avgImage, roi, features) = result.Value;
_logger.LogInformation($"Длинна вектора признаков: {features.Count()}");
// Обрабатываем среднее изображение // Обрабатываем среднее изображение
avgImage = new OpenCvSharp.Mat(avgImage, roi); avgImage = new OpenCvSharp.Mat(avgImage, roi);
OpenCvSharp.Cv2.Resize( OpenCvSharp.Cv2.Resize(
@@ -206,28 +206,24 @@ public partial class SeparatorCalibrationViewModel : ViewModelBase
// Если это новая запись // Если это новая запись
if (SelectedRecord is null) if (SelectedRecord is null)
{ {
// Если это новая запись, то копируем её // Копируем её
var newRecord = CopyRecord(EditingRecord); var newRecord = CopyRecord(EditingRecord);
// Для каждого вектора // Для каждого вектора
for (int i = 0; i < newRecord.VectorRecords.Count(); i++) for (int i = 0; i < newRecord.VectorRecords.Count(); i++)
{ {
var vector = newRecord.VectorRecords[i]; var vector = newRecord.VectorRecords[i];
// Если вектор есть в базе данных, то пропускаем его
if (_context.Entry(vector).State is not EntityState.Detached)
continue;
// Если вектора нет в базе данных, то добавляем его в базу // Добавляем вектор в базу
var attachedRecord = _context.VectorRecords.Add(vector); var attachedRecord = _context.VectorRecords.Add(vector);
// Удаляем отвязанное от базы данных изображение из записи // Удаляем отвязанный от базы данных вектор из записи
newRecord.VectorRecords.RemoveAt(i); newRecord.VectorRecords.RemoveAt(i);
// Добавляем привязанное изображение к записи // Добавляем привязанный к базе данных вектор в запись
newRecord.VectorRecords.Insert(i, attachedRecord.Entity); newRecord.VectorRecords.Insert(i, attachedRecord.Entity);
} }
// Если записи нет в базе данных
if (_context.Entry(newRecord).State is EntityState.Detached)
{ {
// То добавляем её в базу // То добавляем запись в базу
var attachedRecord = _context.SeparatorRecords.Add(newRecord); var attachedRecord = _context.SeparatorRecords.Add(newRecord);
// Заменяем текущую запись на привязанную к базе данных // Заменяем текущую запись на привязанную к базе данных
newRecord = attachedRecord.Entity; newRecord = attachedRecord.Entity;
@@ -247,64 +243,22 @@ public partial class SeparatorCalibrationViewModel : ViewModelBase
SelectedRecord.Type = EditingRecord.Type; SelectedRecord.Type = EditingRecord.Type;
SelectedRecord.Batch = EditingRecord.Batch; SelectedRecord.Batch = EditingRecord.Batch;
SelectedRecord.Image = EditingRecord.Image; SelectedRecord.Image = EditingRecord.Image;
SelectedRecord.VectorRecords = EditingRecord.VectorRecords;
// Удаляем старые векторы в записи // Для каждого вектора в выбранной записи
for (int i = 0; i < SelectedRecord.VectorRecords.Count(); i++)
{ {
// Находим векторы которые нужно удалить - var vector = SelectedRecord.VectorRecords[i];
// те которые есть в выбранной записи, но нет в редактируемой // Если вектор есть в базе данных, то пропускаем его
var vectorsToRemove = SelectedRecord.VectorRecords if (_context.Entry(vector).State is not EntityState.Detached)
.Where(e => EditingRecord.VectorRecords.All(i => i.Id != e.Id)) continue;
.ToList();
// Удаляем старые векторы // Если вектора нет в базе данных, то добавляем его в базу
foreach (var image in vectorsToRemove) var attachedRecord = _context.VectorRecords.Add(vector);
SelectedRecord.VectorRecords.Remove(image); // Удаляем отвязанный от базы данных вектор из записи
SelectedRecord.VectorRecords.RemoveAt(i);
// Для каждого вектора в редактируемой записи // Добавляем привязанный вектор к записи
foreach (var editedImage in EditingRecord.VectorRecords) SelectedRecord.VectorRecords.Insert(i, attachedRecord.Entity);
{
// Находим изображение в выбранной записи (оно будет привязано к базе данных)
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;
} }
// Сохраняем изменения в базе данных // Сохраняем изменения в базе данных
@@ -407,6 +361,7 @@ public partial class SeparatorCalibrationViewModel : ViewModelBase
{ {
// Распаковываем результат // Распаковываем результат
var (avgImage, roi, features) = result.Value; var (avgImage, roi, features) = result.Value;
_logger.LogInformation($"Длинна вектора признаков: {features.Count()}");
// Обрабатываем среднее изображение // Обрабатываем среднее изображение
avgImage = new OpenCvSharp.Mat(avgImage, roi); avgImage = new OpenCvSharp.Mat(avgImage, roi);
OpenCvSharp.Cv2.Resize( OpenCvSharp.Cv2.Resize(