mirror of
https://github.com/azaion/annotations.git
synced 2026-04-22 12:56:30 +00:00
fix ai detection bugs #2
This commit is contained in:
@@ -206,32 +206,34 @@ public partial class MainWindow
|
||||
DgAnnotations.MouseDoubleClick += (sender, args) =>
|
||||
{
|
||||
var dgRow = ItemsControl.ContainerFromElement((DataGrid)sender, (args.OriginalSource as DependencyObject)!) as DataGridRow;
|
||||
var res = (AnnotationResult)dgRow!.Item;
|
||||
_mediaPlayer.SetPause(true);
|
||||
Editor.RemoveAllAnns();
|
||||
_mediaPlayer.Time = (long)res.Time.TotalMilliseconds;
|
||||
ShowTimeAnnotations(res.Time, showImage: true);
|
||||
OpenAnnotationResult((AnnotationResult)dgRow!.Item);
|
||||
};
|
||||
|
||||
DgAnnotations.KeyUp += (sender, args) =>
|
||||
{
|
||||
if (args.Key != Key.Delete)
|
||||
return;
|
||||
|
||||
var result = MessageBox.Show("Чи дійсно видалити аннотації?","Підтвердження видалення", MessageBoxButton.OKCancel, MessageBoxImage.Question);
|
||||
if (result != MessageBoxResult.OK)
|
||||
return;
|
||||
|
||||
var res = DgAnnotations.SelectedItems.Cast<AnnotationResult>().ToList();
|
||||
foreach (var annotationResult in res)
|
||||
switch (args.Key)
|
||||
{
|
||||
var imgName = Path.GetFileNameWithoutExtension(annotationResult.Image);
|
||||
var thumbnailPath = Path.Combine(_config.ThumbnailsDirectory, $"{imgName}{Config.THUMBNAIL_PREFIX}.jpg");
|
||||
File.Delete(annotationResult.Image);
|
||||
File.Delete(Path.Combine(_config.LabelsDirectory, $"{imgName}.txt"));
|
||||
File.Delete(thumbnailPath);
|
||||
_formState.AnnotationResults.Remove(annotationResult);
|
||||
Annotations.Remove(Annotations.Query(annotationResult.Time));
|
||||
case Key.Up:
|
||||
case Key.Down: //cursor is already moved by system behaviour
|
||||
OpenAnnotationResult((AnnotationResult)DgAnnotations.SelectedItem);
|
||||
break;
|
||||
case Key.Delete:
|
||||
var result = MessageBox.Show("Чи дійсно видалити аннотації?","Підтвердження видалення", MessageBoxButton.OKCancel, MessageBoxImage.Question);
|
||||
if (result != MessageBoxResult.OK)
|
||||
return;
|
||||
|
||||
var res = DgAnnotations.SelectedItems.Cast<AnnotationResult>().ToList();
|
||||
foreach (var annotationResult in res)
|
||||
{
|
||||
var imgName = Path.GetFileNameWithoutExtension(annotationResult.Image);
|
||||
var thumbnailPath = Path.Combine(_config.ThumbnailsDirectory, $"{imgName}{Config.THUMBNAIL_PREFIX}.jpg");
|
||||
File.Delete(annotationResult.Image);
|
||||
File.Delete(Path.Combine(_config.LabelsDirectory, $"{imgName}.txt"));
|
||||
File.Delete(thumbnailPath);
|
||||
_formState.AnnotationResults.Remove(annotationResult);
|
||||
Annotations.Remove(Annotations.Query(annotationResult.Time));
|
||||
}
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -240,6 +242,21 @@ public partial class MainWindow
|
||||
DgAnnotations.ItemsSource = _formState.AnnotationResults;
|
||||
}
|
||||
|
||||
public void OpenAnnotationResult(AnnotationResult res)
|
||||
{
|
||||
_mediaPlayer.SetPause(true);
|
||||
Editor.RemoveAllAnns();
|
||||
_mediaPlayer.Time = (long)res.Time.TotalMilliseconds;
|
||||
|
||||
Dispatcher.Invoke(() =>
|
||||
{
|
||||
VideoSlider.Value = _mediaPlayer.Position * VideoSlider.Maximum;
|
||||
StatusClock.Text = $"{TimeSpan.FromMilliseconds(_mediaPlayer.Time):mm\\:ss} / {_formState.CurrentVideoLength:mm\\:ss}";
|
||||
Editor.ClearExpiredAnnotations(res.Time);
|
||||
});
|
||||
|
||||
AddAnnotationsToCanvas(res.Time, res.Detections, showImage: true);
|
||||
}
|
||||
private async Task SaveUserSettings()
|
||||
{
|
||||
if (_suspendLayout)
|
||||
@@ -256,7 +273,7 @@ public partial class MainWindow
|
||||
}, TimeSpan.FromSeconds(5));
|
||||
}
|
||||
|
||||
private void ShowTimeAnnotations(TimeSpan time, bool showImage = false)
|
||||
private void ShowTimeAnnotations(TimeSpan time)
|
||||
{
|
||||
Dispatcher.Invoke(() =>
|
||||
{
|
||||
@@ -266,7 +283,7 @@ public partial class MainWindow
|
||||
});
|
||||
|
||||
var annotations = Annotations.Query(time).SelectMany(x => x).Select(x => new Detection(x));
|
||||
AddAnnotationsToCanvas(time, annotations, showImage);
|
||||
AddAnnotationsToCanvas(time, annotations);
|
||||
}
|
||||
|
||||
private void AddAnnotationsToCanvas(TimeSpan? time, IEnumerable<Detection> labels, bool showImage = false)
|
||||
@@ -316,11 +333,14 @@ public partial class MainWindow
|
||||
}
|
||||
|
||||
public async Task AddAnnotations(TimeSpan? time, List<YoloLabel> annotations, CancellationToken ct = default)
|
||||
=> await AddAnnotations(time, annotations.Select(x => new Detection(x)).ToList(), ct);
|
||||
|
||||
public async Task AddAnnotations(TimeSpan? time, List<Detection> annotations, CancellationToken ct = default)
|
||||
{
|
||||
var timeValue = time ?? TimeSpan.FromMinutes(0);
|
||||
var previousAnnotations = Annotations.Query(timeValue);
|
||||
Annotations.Remove(previousAnnotations);
|
||||
Annotations.Add(timeValue.Subtract(_thresholdBefore), timeValue.Add(_thresholdAfter), annotations);
|
||||
Annotations.Add(timeValue.Subtract(_thresholdBefore), timeValue.Add(_thresholdAfter), annotations.Cast<YoloLabel>().ToList());
|
||||
|
||||
var existingResult = _formState.AnnotationResults.FirstOrDefault(x => x.Time == time);
|
||||
if (existingResult != null)
|
||||
@@ -633,7 +653,7 @@ public partial class MainWindow
|
||||
Editor.Background = new ImageBrush { ImageSource = await imgPath.OpenImage() };
|
||||
Editor.RemoveAllAnns();
|
||||
AddAnnotationsToCanvas(time, detections, true);
|
||||
await AddAnnotations(timeframe.Time, detections.Cast<YoloLabel>().ToList(), token);
|
||||
await AddAnnotations(timeframe.Time, detections, token);
|
||||
|
||||
var log = string.Join(Environment.NewLine, detections.Select(det =>
|
||||
$"{_config.AnnotationClassesDict[det.ClassNumber].Name}: " +
|
||||
|
||||
Reference in New Issue
Block a user