fixed GUI tool

This commit is contained in:
Simon Gruber
2023-10-18 21:22:58 +02:00
parent 4c4ed48e38
commit db6e403c01
4 changed files with 28 additions and 28 deletions
+9 -4
View File
@@ -36,16 +36,21 @@ namespace Common
/// <summary> /// <summary>
/// Configuration of the <see cref="ImageProcessor"/> /// Configuration of the <see cref="ImageProcessor"/>
/// </summary> /// </summary>
public ScreenshotProcessorConfiguration ImageProcessorConfiguration { get; set; } = new(); public ScreenshotProcessorConfiguration ImageProcessorConfiguration { get; }
public ITesseractConfiguration TesseractConfiguration { get; set; } = public ITesseractConfiguration TesseractConfiguration { get; }
new TesseractScreenshotConfiguration();
/// <summary> /// <summary>
/// Constructor /// Constructor
/// </summary> /// </summary>
public ScreenshotScanner() public ScreenshotScanner(
ScreenshotProcessorConfiguration imageProcessorConfig,
ITesseractConfiguration tesseractConfig
)
{ {
ImageProcessorConfiguration = imageProcessorConfig;
TesseractConfiguration = tesseractConfig;
_processor = MakeProcessor(); _processor = MakeProcessor();
} }
+11 -2
View File
@@ -2,7 +2,9 @@
using GUI.Model; using GUI.Model;
using ImageMagick; using ImageMagick;
using Microsoft.Win32; using Microsoft.Win32;
using Ocr.Tesseract.Configuration;
using Ocr.Tesseract.Models; using Ocr.Tesseract.Models;
using Ocr.Tesseract.Screenshots.Configuration;
using Process.Interface; using Process.Interface;
using Serilog; using Serilog;
using System; using System;
@@ -20,9 +22,16 @@ namespace GUI.ViewModels;
internal class ImageViewModel : ScreenshotScanner, INotifyPropertyChanged internal class ImageViewModel : ScreenshotScanner, INotifyPropertyChanged
{ {
public ImageViewModel() private static ITesseractConfiguration CreateTesseractConfiguration() =>
new TesseractScreenshotConfiguration()
{
DataPath = "tessdata",
Languages = new[] { "eng", "deu" }
};
public ImageViewModel() : base(new(), CreateTesseractConfiguration())
{ {
// Scanner.ImageOperationSettings.PropertyChanged += (sender, args) => Task.Run(UpdateImage); ImageProcessorConfiguration.PropertyChanged += (sender, args) => Task.Run(UpdateImage);
OpenFileCommand = new Command(OpenFile); OpenFileCommand = new Command(OpenFile);
SaveEditedImageCommand = new Command(SaveEditedImage); SaveEditedImageCommand = new Command(SaveEditedImage);
+8 -3
View File
@@ -12,6 +12,8 @@ namespace GUI.Views
/// </summary> /// </summary>
public partial class ImageView : Window public partial class ImageView : Window
{ {
private ImageViewModel ViewModel => (ImageViewModel)DataContext;
public ImageView() public ImageView()
{ {
DataContext = new ImageViewModel(); DataContext = new ImageViewModel();
@@ -26,18 +28,21 @@ namespace GUI.Views
private void SldThreshold1_OnDragCompleted(object sender, DragCompletedEventArgs args) private void SldThreshold1_OnDragCompleted(object sender, DragCompletedEventArgs args)
{ {
((ImageViewModel)DataContext).ImageProcessorConfiguration.ThresholdWidth = (int)Math.Round(((Slider)sender).Value); var vm = ViewModel;
vm.ImageProcessorConfiguration.ThresholdWidth = (int)Math.Round(((Slider)sender).Value);
} }
private void SldThreshold2_OnDragCompleted(object sender, DragCompletedEventArgs args) private void SldThreshold2_OnDragCompleted(object sender, DragCompletedEventArgs args)
{ {
((ImageViewModel)DataContext).ImageProcessorConfiguration.ThresholdHeight = (int)Math.Round(((Slider)sender).Value); var vm = ViewModel;
vm.ImageProcessorConfiguration.ThresholdHeight = (int)Math.Round(((Slider)sender).Value);
} }
private void SldBorder_OnDragCompleted(object sender, DragCompletedEventArgs e) private void SldBorder_OnDragCompleted(object sender, DragCompletedEventArgs e)
{ {
((ImageViewModel)DataContext).ImageProcessorConfiguration.Border = (int)Math.Round(((Slider)sender).Value); var vm = ViewModel;
vm.ImageProcessorConfiguration.Border = (int)Math.Round(((Slider)sender).Value);
} }
} }
} }
@@ -50,25 +50,6 @@ public class ScreenshotProcessor : ImageProcessor
yield return tImage; yield return tImage;
yield return tImage.CloneImage().NegateColors(); yield return tImage.CloneImage().NegateColors();
// todo filter large connected components
// var resized = fluent .CloneObject() .Resize( 0.25f, FilterType.Point,
// PixelInterpolateMethod.Integer ); yield return resized.ToImage();
//
// var hlines = resized .GetHLines() .Select(c => new MagickGeometry(c.Item1, c.Item2, c.Item1 +
// 3, c.Item2 + 3)) .ToArray(); Log.Information($"Matched {hlines.Length} geometries");
//
// var rgbImage = resized.CloneObject().ToRgb(); rgbImage.Fill(MagickColors.Red, hlines); yield
// return rgbImage.ToImage();
// if (Settings.FilterConnectedComponents) { var colorImage = fluent .CloneObject()
// .GetConnectedComponents( _connectedComponentsSettings, out var components ) .ToRgb();
//
// var pixels = colorImage.GetPixels(); colorImage.Fill( MagickColors.Red, components .Where(c
// => c.IsFilled(pixels)) .Select(c => c.ToGeometry()) );
// yield return colorImage.ToImage();
} }
#region Overrides of Processor<MagickImage,IMagickImageValueProcessorSettings> #region Overrides of Processor<MagickImage,IMagickImageValueProcessorSettings>