예제 #1
0
        private static CycleGANProcess StartCycleGANProcess(IArgument input, IArgument output)
        {
            StringBuilder argumentBuilder = new StringBuilder();

            argumentBuilder.Append(input.Argument);
            if (input is PathArgument)
            {
                argumentBuilder.Append($" \"{Uri.UnescapeDataString((input as PathArgument).Value.AbsolutePath)}\"");
            }
            else if (input is ByteArrayArgument)
            {
                argumentBuilder.Append($" BYTEARRAY");
            }

            argumentBuilder.Append($" {output.Argument} \"{Uri.UnescapeDataString((output as PathArgument).Value.AbsolutePath)}\"");

            CycleGANProcess process = new CycleGANProcess();

            if (!process.Start(argumentBuilder.ToString()))
            {
                throw new Exception("Could not start the cycleGANProcess");
            }

            Console.WriteLine($" CycleGAN process started with id: {process.ProcessId}");
            return(process);
        }
예제 #2
0
        private void OnCycleGANProcessTimeout(int cycleGANId)
        {
            if (!currentProcesses.ContainsKey(cycleGANId)) //Never existed or already completed
            {
                return;
            }
            Console.WriteLine($"Timeout reached for {cycleGANId}");
            CycleGANProcess cycleGAN = currentProcesses[cycleGANId];

            currentProcesses.Remove(cycleGANId); //Kill and Remove
            cycleGAN.Process.Kill();
        }
예제 #3
0
        private void OnCycleGANProcessExit(int cycleGANId)
        {
            if (!currentProcesses.ContainsKey(cycleGANId)) //process has been removed due to timeout or previous completion or it was never added
            {
                return;
            }
            Console.WriteLine($"Exit reached for {cycleGANId}");
            CycleGANProcess cycleGAN = currentProcesses[cycleGANId];

            currentProcesses.Remove(cycleGANId);
            cycleGAN.Process = null;
            AddResult(cycleGAN);
        }
예제 #4
0
        private void AddResult(CycleGANProcess cycleGAN)
        {
            switch (cycleGAN.CycleGANType)
            {
            case ProcessType.Single:
                resultsController.AddResult(new CycleGANSingleResult {
                    ImagePath = cycleGAN.OutputFolder, Created = DateTime.UtcNow
                });
                break;

            case ProcessType.Batch:
                resultsController.AddResult(new CycleGANBatchResult {
                    FolderPath = cycleGAN.OutputFolder, Created = DateTime.UtcNow
                });
                break;
            }
        }