예제 #1
0
        public void LogEnd(string name)
        {
            if (!_currentLogs.ContainsKey(name))
            {
                throw KrakenException.Create("Attempt to LogEnd('{0}') when one has not been started", name);
            }

            PerformancePoint point = _currentLogs[name];

            point.StopTimer();

            // clear the tracker
            _currentLogs.Remove(name);
            LogPoint(point);
            _mostRecentLogName = null;
        }
예제 #2
0
        public void LogBegin(string name)
        {
            PerformancePoint point = new PerformancePoint();

            point.Name = name;
            point.StartTimer();

            // Violate bracing rules for coverage
            if (_currentLogs.ContainsKey(name))
            {
                throw KrakenException.Create("Attempt to LogBegin('{0}') when there is already one in progress. Use RequireExplicitLogEnd=false if you are lazy.", name);
            }


            SequentialModeCleanup();

            _currentLogs.Add(name, point);
            _mostRecentLogName = name;
        }
예제 #3
0
        public void Go()
        {
            var newName     = GetNewName();
            var newNameInfo = new FileInfo(newName);

            if (FileInfo.FullName != newName && !IsTestMode)
            {
                Log.Info("Renaming {0} to {1}", FileInfo.FullName, newName);

                WorkingDirectory = FileInfo.DirectoryName;
                Arguments        = $"rename {FileInfo.FullName} {newNameInfo.Name}";

                commands.AppendLine(Arguments);

                int errorLevel = StartWithWait();

                if (errorLevel != 0)
                {
                    throw KrakenException.Create("Error level returned as {0}", errorLevel);
                }
            }
        }
예제 #4
0
        public void Go()
        {
            foreach (var term in Terms)
            {
                if (FileInfo.Name.Contains(term.Target))
                {
                    var newName = FileInfo.Name.Replace(term.Target, term.ReplaceWith);

                    Log.Info("Renaming {0} to {1}", FileInfo.FullName, newName);
                    if (!IsTestMode)
                    {
                        WorkingDirectory = FileInfo.DirectoryName;
                        Arguments        = string.Format("rename {0} {1}", FileInfo.Name, newName);
                        int errorLevel = StartWithWait();

                        if (errorLevel != 0)
                        {
                            throw KrakenException.Create("Error level returned as {0}", errorLevel);
                        }
                    }
                }
            }
        }
예제 #5
0
파일: Program.cs 프로젝트: llenroc/PiCamCV
        static void Main(string[] args)
        {
            var appData = ExecutionEnvironment.GetApplicationMetadata();

            Log.Info(appData);

            var options = new ConsoleOptions(args);

            if (options.ShowHelp)
            {
                Console.WriteLine("Options:");
                options.OptionSet.WriteOptionDescriptions(Console.Out);
                return;
            }

            ICaptureGrab capture = null;

            if (options.Mode != Mode.simple)
            {
                var captureDevice = CaptureDevice.Usb;
                if (Environment.OSVersion.Platform == PlatformID.Unix)
                {
                    captureDevice = CaptureDevice.Pi;
                }
                capture = CaptureFactory.GetCapture(captureDevice);
                var captureProperties = capture.GetCaptureProperties();
                Log.Info(m => m("Capture properties: {0}", captureProperties));

                SafetyCheckRoi(options, captureProperties);
            }

            IRunner runner;

            Log.Info(options);
            switch (options.Mode)
            {
            case Mode.simple: runner = new SimpleCv();
                break;

            case Mode.colourdetect:
                var colorDetector = new ColorDetectRunner(capture);
                if (options.HasColourSettings)
                {
                    colorDetector.Settings = options.ColourSettings;
                }
                runner = colorDetector;
                break;

            case Mode.haar:

                var relativePath    = string.Format(@"haarcascades{0}haarcascade_frontalface_default.xml", Path.DirectorySeparatorChar);
                var cascadeFilename = Path.Combine(appData.ExeFolder, relativePath);
                var cascadeContent  = File.ReadAllText(cascadeFilename);
                runner = new CascadeRunner(capture, cascadeContent);
                break;


            case Mode.servosort:
                runner = new ServoSorter(capture, options);
                break;

            default:
                throw KrakenException.Create("Option mode {0} needs wiring up", options.Mode);
            }

            runner.Run();
        }
예제 #6
0
        static void Main(string[] args)
        {
            var appData = ExecutionEnvironment.GetApplicationMetadata();

            Log.Info(appData);

            _consoleOptions = new ConsoleOptions(args);

            if (_consoleOptions.ShowHelp)
            {
                Console.WriteLine("Options:");
                _consoleOptions.OptionSet.WriteOptionDescriptions(Console.Out);
                return;
            }

            CapturePi.DoMatMagic("CreateCapture");

            var noCaptureGrabs = new[] { Mode.simple, Mode.pantiltjoy, Mode.ipReport };
            var i2cRequired    = new[] { Mode.pantiltface, Mode.pantiltjoy, Mode.pantiltcolour, Mode.pantiltmultimode };

            ICaptureGrab capture = null;

            if (!noCaptureGrabs.Contains(_consoleOptions.Mode))
            {
                var config = CaptureConfig.Parse(_consoleOptions.CaptureConfig);
                capture = BuildCaptureGrabber(config);
                Log.Info($"Requested capture {capture.RequestedConfig}");
            }

            IPanTiltMechanism panTiltMech = null;
            IScreen           screen      = null;

            if (i2cRequired.Contains(_consoleOptions.Mode))
            {
                var pwmDeviceFactory = new Pca9685DeviceFactory();
                var pwmDevice        = pwmDeviceFactory.GetDevice(_consoleOptions.UseFakeDevice);
                panTiltMech = new PanTiltMechanism(pwmDevice);
                screen      = new ConsoleScreen();
                screen.Clear();
            }
            else
            {
                Log.Info("Pan Tilt is not required");
            }

            IRunner runner;

            Log.Info(_consoleOptions);
            switch (_consoleOptions.Mode)
            {
            case Mode.noop:
                var noopRunner = new NoopRunner(capture);
                noopRunner.ReportFramesPerSecond = true;
                runner = noopRunner;
                break;

            case Mode.simple: runner = new SimpleCv();
                break;

            case Mode.colourdetect:
                var colorDetector = new ColorDetectRunner(capture);
                if (_consoleOptions.HasColourSettings)
                {
                    colorDetector.Settings = _consoleOptions.ColourSettings;
                }
                runner = colorDetector;
                break;

            case Mode.haar:
                var relativePath    = $@"haarcascades{Path.DirectorySeparatorChar}haarcascade_frontalface_default.xml";
                var cascadeFilename = Path.Combine(appData.ExeFolder, relativePath);
                var cascadeContent  = File.ReadAllText(cascadeFilename);
                runner = new CascadeRunner(capture, cascadeContent);
                break;

            case Mode.servosort:
                runner = new ServoSorter(capture, _consoleOptions);
                break;

            case Mode.pantiltjoy:
                var joyController = new JoystickPanTiltController(panTiltMech);
                runner = new TimerRunner(joyController, screen);
                break;

            case Mode.pantiltface:
                var controllerF = new FaceTrackingPanTiltController(panTiltMech, capture.RequestedConfig);
                runner = new CameraBasedPanTiltRunner(panTiltMech, capture, controllerF, screen);
                break;

            case Mode.pantiltmultimode:
                var cameraHubProxy = new CameraHubProxy();
                cameraHubProxy.Connect();
                var remoteScreen     = new RemoteConsoleScreen(cameraHubProxy);
                var piServerClient   = new BsonPostImageTransmitter();
                var imageTransmitter = new RemoteImageSender(piServerClient, cameraHubProxy);

                cameraHubProxy.SettingsChanged += (sender, s) =>
                {
                    remoteScreen.Enabled     = s.EnableConsoleTransmit;
                    imageTransmitter.Enabled = s.EnableImageTransmit;
                };

                var controllerMultimode = new MultimodePanTiltController(panTiltMech, capture.RequestedConfig, remoteScreen, cameraHubProxy, imageTransmitter);

                var cameraBasedRunner = new CameraBasedPanTiltRunner(panTiltMech, capture, controllerMultimode, screen);
                runner = cameraBasedRunner;

                cameraHubProxy.UpdateCapture += (s, e) =>
                {
                    remoteScreen.WriteLine($"Changing capture settings to {e}");
                    var newGrabber = BuildCaptureGrabber(e);
                    cameraBasedRunner.UpdateCaptureGrabber(newGrabber);
                };
                break;

            case Mode.pantiltcolour:
                var controllerC = new ColourTrackingPanTiltController(panTiltMech, capture.RequestedConfig);
                if (_consoleOptions.HasColourSettings)
                {
                    controllerC.Settings = _consoleOptions.ColourSettings;
                }
                else
                {
                    throw KrakenException.Create("Colour settings not found");
                }
                runner = new CameraBasedPanTiltRunner(panTiltMech, capture, controllerC, screen);
                break;

            case Mode.ipReport:
                var hub = new CameraHubProxy();
                runner = new IpReporter(hub);
                break;

            default:
                throw KrakenException.Create("Option mode {0} needs wiring up", _consoleOptions.Mode);
            }

            runner.Run();
        }