mirror of
https://github.com/azaion/annotations.git
synced 2026-04-22 06:46:30 +00:00
fix saving scale for datasetexplorer and annotation
This commit is contained in:
@@ -313,11 +313,13 @@ public class AnnotatorEventHandler(
|
||||
private async Task<List<Annotation>> SaveAnnotationInner(string imgPath, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var canvasDetections = mainWindow.Editor.CurrentDetections.Select(x => x.ToCanvasLabel()).ToList();
|
||||
|
||||
var source = (mainWindow.Editor.BackgroundImage.Source as BitmapSource)!;
|
||||
var mediaSize = new Size(source.PixelWidth, source.PixelHeight);
|
||||
var annotationsResult = new List<Annotation>();
|
||||
if (!File.Exists(imgPath))
|
||||
{
|
||||
var source = (mainWindow.Editor.BackgroundImage.Source as BitmapSource)!;
|
||||
if (new Size(source.PixelWidth, source.PixelHeight).FitSizeForAI())
|
||||
if (mediaSize.FitSizeForAI())
|
||||
await source.SaveImage(imgPath, cancellationToken);
|
||||
else
|
||||
{
|
||||
@@ -356,7 +358,7 @@ public class AnnotatorEventHandler(
|
||||
var timeImg = formState.BackgroundTime ?? TimeSpan.FromMilliseconds(mediaPlayer.Time);
|
||||
var annName = formState.MediaName.ToTimeName(timeImg);
|
||||
var currentDetections = canvasDetections.Select(x =>
|
||||
new Detection(annName, new YoloLabel(x, mainWindow.Editor.RenderSize)))
|
||||
new Detection(annName, new YoloLabel(x, mainWindow.Editor.RenderSize, mediaSize)))
|
||||
.ToList();
|
||||
var annotation = await annotationService.SaveAnnotation(formState.MediaName, annName, timeImg, currentDetections, token: cancellationToken);
|
||||
return [annotation];
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.IO;
|
||||
using System.Windows;
|
||||
using System.Windows.Media.Imaging;
|
||||
|
||||
namespace Azaion.Dataset;
|
||||
@@ -16,4 +17,8 @@ public static class BitmapExtensions
|
||||
image.Freeze();
|
||||
return image;
|
||||
}
|
||||
|
||||
public static Size Size(this BitmapImage image) =>
|
||||
new(image.PixelWidth, image.PixelHeight);
|
||||
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@ public partial class DatasetExplorer
|
||||
private readonly IConfigUpdater _configUpdater;
|
||||
|
||||
public bool ThumbnailLoading { get; set; }
|
||||
public string CurrentFilter { get; set; } = "";
|
||||
|
||||
public AnnotationThumbnail? CurrentAnnotation { get; set; }
|
||||
|
||||
@@ -201,7 +202,7 @@ public partial class DatasetExplorer
|
||||
SwitchTab(toEditor: true);
|
||||
|
||||
ExplorerEditor.RemoveAllAnns();
|
||||
ExplorerEditor.CreateDetections(ann, _appConfig.AnnotationConfig.DetectionClasses, new Size(image.PixelWidth, image.PixelHeight));
|
||||
ExplorerEditor.CreateDetections(ann, _appConfig.AnnotationConfig.DetectionClasses, image.Size());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@@ -261,7 +262,7 @@ public partial class DatasetExplorer
|
||||
SelectedAnnotationDict.Clear();
|
||||
var annThumbnails = _annotationsDict[ExplorerEditor.CurrentAnnClass.YoloId]
|
||||
.WhereIf(withDetectionsOnly, x => x.Value.Detections.Any())
|
||||
.WhereIf(TbSearch.Text.Length > 2, x => x.Key.ToLower().Contains(TbSearch.Text))
|
||||
.WhereIf(!string.IsNullOrEmpty(CurrentFilter), x => x.Key.Contains(CurrentFilter, StringComparison.CurrentCultureIgnoreCase))
|
||||
.Select(x => new AnnotationThumbnail(x.Value, _azaionApi.CurrentUser.Role.IsValidator()))
|
||||
.OrderBy(x => !x.IsSeed)
|
||||
.ThenByDescending(x =>x.Annotation.CreatedDate);
|
||||
@@ -300,6 +301,11 @@ public partial class DatasetExplorer
|
||||
private void TbSearch_OnTextChanged(object sender, TextChangedEventArgs e)
|
||||
{
|
||||
TbSearch.Foreground = TbSearch.Text.Length > 2 ? Brushes.Black : Brushes.Gray;
|
||||
ThrottleExt.Throttle(ReloadThumbnails, SearchActionId, TimeSpan.FromMilliseconds(400));;
|
||||
if (TbSearch.Text.Length > 2 || string.IsNullOrEmpty(TbSearch.Text))
|
||||
{
|
||||
CurrentFilter = TbSearch.Text;
|
||||
ThrottleExt.Throttle(ReloadThumbnails, SearchActionId, TimeSpan.FromMilliseconds(400));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media.Imaging;
|
||||
using Azaion.Common.Database;
|
||||
using Azaion.Common.DTO;
|
||||
using Azaion.Common.Events;
|
||||
@@ -66,8 +67,9 @@ public class DatasetExplorerEventHandler(
|
||||
|
||||
var a = datasetExplorer.CurrentAnnotation!.Annotation;
|
||||
|
||||
var mediaSize = ((BitmapImage)datasetExplorer.ExplorerEditor.BackgroundImage.Source).Size();
|
||||
var detections = datasetExplorer.ExplorerEditor.CurrentDetections
|
||||
.Select(x => new Detection(a.Name, x.ToYoloLabel(datasetExplorer.ExplorerEditor.RenderSize)))
|
||||
.Select(x => new Detection(a.Name, x.ToYoloLabel(datasetExplorer.ExplorerEditor.RenderSize, mediaSize)))
|
||||
.ToList();
|
||||
var index = datasetExplorer.ThumbnailsView.SelectedIndex;
|
||||
var annotation = await annotationService.SaveAnnotation(a.OriginalMediaName, a.Name, a.Time, detections, token: token);
|
||||
@@ -125,8 +127,9 @@ public class DatasetExplorerEventHandler(
|
||||
var selectedClass = datasetExplorer.LvClasses.CurrentClassNumber;
|
||||
|
||||
datasetExplorer.AddAnnotationToDict(annotation);
|
||||
if (annotation.Classes.Contains(selectedClass) || selectedClass == -1)
|
||||
{
|
||||
if (!annotation.Classes.Contains(selectedClass) && selectedClass != -1)
|
||||
return;
|
||||
|
||||
var index = 0;
|
||||
var annThumb = new AnnotationThumbnail(annotation, azaionApi.CurrentUser.Role.IsValidator());
|
||||
if (datasetExplorer.SelectedAnnotationDict.ContainsKey(annThumb.Annotation.Name))
|
||||
@@ -142,7 +145,6 @@ public class DatasetExplorerEventHandler(
|
||||
|
||||
datasetExplorer.SelectedAnnotations.Insert(index, annThumb);
|
||||
datasetExplorer.SelectedAnnotationDict.Add(annThumb.Annotation.Name, annThumb);
|
||||
}
|
||||
});
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user