/// <summary> /// sudo mono picamcv.con.exe -m=pantiltmultimode /// </summary> public MultimodePanTiltController( IPanTiltMechanism panTiltMech , CaptureConfig captureConfig , IScreen screen , IServerToCameraBus serverToCameraBus , params IOutputProcessor[] outputPipelines) : base(panTiltMech, captureConfig) { _screen = screen; _serverToCameraBus = serverToCameraBus; _outputPipelines = outputPipelines; _faceTrackingController = new FaceTrackingPanTiltController(panTiltMech, captureConfig); _camshiftTrackingController = new CamshiftPanTiltController(panTiltMech, captureConfig); _colourTrackingController = new ColourTrackingPanTiltController(panTiltMech, captureConfig); _thresholdSelector = new ThresholdSelector(); _thresholdSelector.ColourCheckTick += thresholdSelector_ColourCheckTick; _colourDetectorInput = new ColourDetectorInput(); _colourDetectorInput.SetCapturedImage = true; _colourDetectorInput.Settings.MomentArea = new RangeF(50, 10000); _faceTrackManager = new FaceTrackStateManager(screen); _colourTrackManager = new ColourTrackStateManager(screen); _autonomousManager = new AutonomousTrackStateManager(this, screen); screen.Clear(); SetMode(ProcessingMode.Autonomous); _autonomousManager.IsFaceFound = i => _faceTrackingController.Process(i).IsDetected; _autonomousManager.IsColourFullFrame = IsColourFullFrame; InitController(); }
private ColourDetectorOutput LocateColour() { var output = new ColourDetectorOutput(); const int captureBufferBurn = 2; // first image is stale, need to capture the second one Image <Bgr, byte> capturedImage = null; for (int i = 0; i < captureBufferBurn; i++) { capturedImage = GetCameraCapture(); //DoStep("Captured {0} image", i); } using (var capturedMat = capturedImage.Mat) { var colourDetectorInput = new ColourDetectorInput(); colourDetectorInput.Captured = capturedMat; colourDetectorInput.SetCapturedImage = false; colourDetectorInput.Settings = Settings; output = _colourDetector.Process(colourDetectorInput); } if (ColourCaptured != null) { output.CapturedImage = capturedImage; ColourCaptured(this, output); } return(output); }
/// <summary> /// sudo mono picamcv.con.exe -m=pantiltmultimode /// </summary> public MultimodePanTiltController( IPanTiltMechanism panTiltMech , CaptureConfig captureConfig , IScreen screen , IServerToCameraBus serverToCameraBus , params IOutputProcessor[] outputPipelines) : base(panTiltMech, captureConfig) { _screen = screen; _serverToCameraBus = serverToCameraBus; _outputPipelines = outputPipelines; _colourSettingsRepository = new ColourSettingsRepository(); _faceTrackingController = new FaceTrackingPanTiltController(panTiltMech, captureConfig); _camshiftTrackingController = new CamshiftPanTiltController(panTiltMech, captureConfig); _colourTrackingController = new ColourTrackingPanTiltController(panTiltMech, captureConfig); _thresholdSelector = new ThresholdSelector(); _thresholdSelector.ColourCheckTick += thresholdSelector_ColourCheckTick; _colourDetectorInput = new ColourDetectorInput(); _colourDetectorInput.SetCapturedImage = true; var repoSettings = _colourSettingsRepository.Read(); if (repoSettings != null) { _colourDetectorInput.Settings = repoSettings; } _faceTrackManager = new FaceTrackStateManager(screen); _colourTrackManager = new ColourTrackStateManager(screen); _staticManager = new StaticStateManager(screen); _autonomousManager = new AutonomousTrackStateManager(this, screen); SoundService = new SoundService(); screen.Clear(); ChangeMode(ProcessingMode.Autonomous); _autonomousManager.IsFaceFound = i => _faceTrackingController.Process(i).IsDetected; _autonomousManager.IsColourFullFrame = IsColourFullFrame; _faceTrackingController.ClassifierParams.MinSize = new Size(20, 20); _faceTrackingController.ClassifierParams.MaxSize = new Size(50, 50); screen.WriteLine(_faceTrackingController.ClassifierParams.ToString()); InitController(); ServoSettleTimeChanged += (s, e) => { _faceTrackingController.ServoSettleTime = ServoSettleTime; _colourTrackingController.ServoSettleTime = ServoSettleTime; }; _colourDetector = new ColourDetector(); }
public ColourDetectionControl() { InitializeComponent(); _colorDetector = new ColourDetector(); _detectorInput = new ColourDetectorInput(); _colorSettingsRepo = new ColourSettingsRepository(); _thresholdSelector = new ThresholdSelector(); _imageBoxSelector = new ImageBoxSelector(); }
public override void ImageGrabbedHandler(object sender, EventArgs e) { using (var matCaptured = new Mat()) { CameraCapture.Retrieve(matCaptured); var detector = new ColourDetector(); var input = new ColourDetectorInput { Captured = matCaptured , Settings = Settings , SetCapturedImage = false }; var result = detector.Process(input); if (result.IsDetected) { Log.Info(result); } } }
protected override ColourTrackingPanTiltOutput DoProcess(CameraProcessInput input) { var colourDetectorInput = new ColourDetectorInput(); colourDetectorInput.Captured = input.Captured; colourDetectorInput.SetCapturedImage = input.SetCapturedImage; colourDetectorInput.Settings = Settings; var colourDetectorOutput = _colourDetector.Process(colourDetectorInput); var targetPoint = CentrePoint; if (colourDetectorOutput.IsDetected) { targetPoint = colourDetectorOutput.CentralPoint.ToPoint(); } var output = ReactToTarget(targetPoint); output.Absorb(colourDetectorOutput); return(output); }
public override void ImageGrabbedHandler(object sender, EventArgs e) { using (var matCaptured = new Mat()) { CameraCapture.Retrieve(matCaptured); var input = new ColourDetectorInput { Captured = matCaptured , Settings = Settings , SetCapturedImage = false }; var result = _detector.Process(input); if (result.IsDetected) { if (!_objectCurrentlyDetected) { _debounceWatch.Start(); _objectCurrentlyDetected = true; } SweeperToRed(); Log.Info(m => m("Red detected! {0}", result)); } else { var isInDebouncePeriod = _debounceWatch.IsRunning && _debounceWatch.ElapsedMilliseconds < 800; if (_objectCurrentlyDetected && !isInDebouncePeriod) { _debounceWatch.Reset(); Log.Info(m => m("Red gone")); SweeperToGreen(); _objectCurrentlyDetected = false; } } } }
public ColourDetectionControl() { InitializeComponent(); _colorDetector = new ColourDetector(); _detectorInput = new ColourDetectorInput(); }