private void DiscoverModels() { isRetrievingModels = true; this.StartCoroutine(RunwayHub.listModels((models) => { isRetrievingModels = false; availableModels = models; })); }
void RunInference() { Field[] inputs = getSelectedModel().commands[0].inputs; Field[] outputs = getSelectedModel().commands[0].outputs; Dictionary <string, object> dataToSend = new Dictionary <string, object>(); for (var i = 0; i < inputs.Length; i++) { Field input = inputs[i]; object value = inputData[input.name]; if (input.type.Equals("image")) { Texture2D tex = textureForInputKey(input.name, false) as Texture2D; byte[] data = RunwayUtils.TextureToPNG(tex); dataToSend[input.name] = "data:image/png;base64," + System.Convert.ToBase64String(data); } else if (input.type.Equals("segmentation")) { Texture2D tex = textureForInputKey(input.name, true) as Texture2D; byte[] data = RunwayUtils.TextureToPNG(tex); dataToSend[input.name] = "data:image/png;base64," + System.Convert.ToBase64String(data); } else if (input.type.Equals("vector")) { dataToSend[input.name] = RunwayUtils.RandomVector(input.length, input.samplingMean, input.samplingStd); } else { dataToSend[input.name] = value; } } this.StartCoroutine(RunwayHub.runInference(runningSession.url, getFilteredModels()[selectedModelIndex].commands[0].name, dataToSend, (outputData) => { this.isProcessingInput = false; if (outputData == null) { EditorUtility.DisplayDialog("Inference Error", "There was an error processing this input", "OK"); return; } for (var i = 0; i < outputs.Length; i++) { object value = outputData[outputs[i].name]; if (outputs[i].type.Equals("image")) { string stringValue = value as string; int dataStartIndex = stringValue.IndexOf("base64,") + 7; byte[] outputImg = System.Convert.FromBase64String(((string)value).Substring(dataStartIndex)); Texture2D tex = new Texture2D(2, 2); // Once image is loaded, texture will auto-resize tex.LoadImage(outputImg); this.lastOutput = tex; } } Repaint(); })); }
private IEnumerator UpdateRunningSession() { while (isWindowEnabled) { if (isRunwayRunning && runningSession != null) { this.StartCoroutine(RunwayHub.getSession(runningSession.id, (session) => { runningSession = session; })); } yield return(new WaitForSeconds(1)); } }
private IEnumerator CheckIfRunwayRunning() { while (isWindowEnabled) { this.StartCoroutine(RunwayHub.isRunwayRunning((newStatus) => { if (!this.isRunwayRunning && newStatus) { DiscoverModels(); } this.isRunwayRunning = newStatus; })); yield return(new WaitForSeconds(1)); } }
private IEnumerator DiscoverRunningSessions() { while (isWindowEnabled) { if (isRunwayRunning) { this.StartCoroutine(RunwayHub.listSessions((sessions) => { foreach (ModelSession s in sessions) { if (s.application.Equals("Unity")) { runningSession = s; } } })); } yield return(new WaitForSeconds(1)); } }
void RenderRunModel() { GUILayout.Space(10); GUILayout.Label("RUN OPTIONS", sectionTitleStyle); GUILayout.Space(5); GUILayout.BeginHorizontal("box"); GUILayout.BeginVertical(); GUILayout.Space(5); GUILayout.BeginHorizontal(horizontalStyle); GUILayout.Label("Run Location"); GUILayout.FlexibleSpace(); runLocationIndex = EditorGUILayout.Popup(runLocationIndex, runLocations); GUILayout.EndHorizontal(); GUILayout.Space(5); GUILayout.BeginHorizontal(horizontalStyle); GUILayout.Label("Run Continuously"); GUILayout.FlexibleSpace(); this.continuousInference = EditorGUILayout.Toggle(this.continuousInference, GUILayout.Width(20)); GUILayout.EndHorizontal(); GUILayout.Space(5); GUILayout.BeginHorizontal(horizontalStyle); GUILayout.FlexibleSpace(); if (modelIsRunning()) { if (this.continuousInference && !this.isProcessingInput) { this.isProcessingInput = true; try { this.RunInference(); } catch { this.isProcessingInput = false; } } using (new EditorGUI.DisabledScope(this.isProcessingInput)) { if (GUILayout.Button("Process")) { this.isProcessingInput = true; try { this.RunInference(); } catch { this.isProcessingInput = false; } } } } string buttonText; bool buttonDisabled; if (modelIsRunning()) { buttonText = "Stop Model"; buttonDisabled = false; } else if (modelIsStarting()) { buttonText = "Starting Model..."; buttonDisabled = true; } else { buttonText = "Start Model"; buttonDisabled = false; } buttonDisabled = buttonDisabled || this.isMakingRequest; using (new EditorGUI.DisabledScope(buttonDisabled)) { if (GUILayout.Button(buttonText)) { if (modelIsRunning()) { this.isMakingRequest = true; this.StartCoroutine(RunwayHub.stopModel(runningSession.id, (response) => { this.runningSession = null; this.isMakingRequest = false; this.isProcessingInput = false; Repaint(); })); } else { ProviderOptions providerOptions = new ProviderOptions(); providerOptions.runLocation = runLocations[runLocationIndex]; this.isMakingRequest = true; int versionId = getFilteredModels()[selectedModelIndex].defaultVersionId; this.StartCoroutine(RunwayHub.runModel(versionId, getOptions(), providerOptions, (error, session) => { this.isMakingRequest = false; if (error != null) { EditorUtility.DisplayDialog("Error starting model", error, "OK"); return; } this.runningSession = session; Repaint(); })); } } } GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.Space(15); }