forked from amkovkov/GranuSightSoftware2
feat: mock run mode
extract IImageCapturerService interface from ImageCapturerService add ImageCapturerMockService as implementation of IImageCapturerService add --mock flag in command line interface and implement its usage
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
|
||||
using OpenCvSharp;
|
||||
|
||||
namespace GSS2.Core.Analysis.AmineContent;
|
||||
|
||||
public interface IImageCapturerService
|
||||
{
|
||||
public Task CaptureImages(Action<(int i, double visible, double uv365, double uv254, Mat image)> callback, CancellationToken cancellationToken);
|
||||
public Task CaptureImages(Func<(int i, double visible, double uv365, double uv254, Mat image), Task> callback, CancellationToken cancellationToken);
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
using OpenCvSharp;
|
||||
|
||||
using GSS2.Core.Extensions;
|
||||
|
||||
namespace GSS2.Core.Analysis.AmineContent;
|
||||
|
||||
public class ImageCapturerMockService : IImageCapturerService
|
||||
{
|
||||
// Список интенсивностей освещения для каждого кадра
|
||||
public static readonly ReadOnlyCollection<(double visible, double uv365, double uv254)> IlluminatorIntensities =
|
||||
[
|
||||
(0.02500, 0.0, 0.0),
|
||||
(0.01250, 0.0, 0.0),
|
||||
(0.00625, 0.0, 0.0),
|
||||
(0.00000, 1.0, 0.0),
|
||||
(0.00000, 0.0, 1.0),
|
||||
(0.00000, 1.0, 1.0),
|
||||
(0.01250, 1.0, 0.0),
|
||||
(0.01250, 0.0, 1.0),
|
||||
(0.01250, 1.0, 1.0),
|
||||
(0.00625, 1.0, 0.0),
|
||||
(0.00625, 0.0, 1.0),
|
||||
(0.00625, 1.0, 1.0)
|
||||
];
|
||||
|
||||
private readonly string _imagesDirectoryPath;
|
||||
private readonly ILogger<ImageCapturerMockService> _logger;
|
||||
|
||||
public ImageCapturerMockService(string imagesDirectoryPath, ILogger<ImageCapturerMockService> logger)
|
||||
{
|
||||
_imagesDirectoryPath = imagesDirectoryPath;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public async Task CaptureImages(Action<(int i, double visible, double uv365, double uv254, Mat image)> callback, CancellationToken cancellationToken) =>
|
||||
await CaptureImages(async (data) => callback(data), cancellationToken);
|
||||
|
||||
public async Task CaptureImages(Func<(int i, double visible, double uv365, double uv254, Mat image), Task> callback, CancellationToken cancellationToken)
|
||||
{
|
||||
foreach (var (i, (visible, uv365, uv254)) in IlluminatorIntensities.Enumerate())
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
_logger.LogInformation("Capturing images: {} / {} ({};{};{})", i + 1, IlluminatorIntensities.Count(), visible, uv365, uv254);
|
||||
|
||||
Mat? image = Cv2.ImRead(Path.Join(_imagesDirectoryPath, $"{visible}-{uv365}-{uv254}.png"));
|
||||
if (image is null)
|
||||
throw new Exception("Image capture failed");
|
||||
|
||||
await callback.Invoke((i, visible, uv365, uv254, image));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,7 @@ using OpenCvSharp;
|
||||
|
||||
namespace GSS2.Core.Analysis.AmineContent;
|
||||
|
||||
public class ImageCapturerService
|
||||
public class ImageCapturerService : IImageCapturerService
|
||||
{
|
||||
// Список интенсивностей освещения для каждого кадра
|
||||
public static readonly ReadOnlyCollection<(double visible, double uv365, double uv254)> IlluminatorIntensities =
|
||||
|
||||
Reference in New Issue
Block a user