// Start is called before the first frame update void Start() { var model = ModelLoader.LoadFromStreamingAssets(modelName + ".bytes"); var worker = BarracudaWorkerFactory.CreateWorker(BarracudaWorkerFactory.Type.Compute, model); foreach (var layer in model.layers) { Debug.Log("Layer " + layer.name + " does: " + layer.inputs); } var inputs = new Dictionary <string, Tensor>(); Texture2D img = Resources.Load("tennis_in_crowd") as Texture2D; // Texture2D img = testImage.mainTexture as Texture2D; var tensor = new Tensor(img, 3); inputs.Add("image", tensor); worker.ExecuteAndWaitForCompletion(inputs); var Heatmap = worker.Fetch("heatmap"); var Offset = worker.Fetch("offset_2"); var Dis_fwd = worker.Fetch("displacement_fwd_2"); var Dis_bwd = worker.Fetch("displacement_bwd_2"); poses = posenet.DecodeMultiplePosesOG(Heatmap, Offset, Dis_fwd, Dis_bwd, outputStride: 16, maxPoseDetections: 2, scoreThreshold: 0.02f, nmsRadius: 20); gl = GameObject.Find("GLRenderer").GetComponent <GLRenderer>(); Debug.Log(poses.Length); // Debug.Log(Heatmap.height); Heatmap.Dispose(); Offset.Dispose(); Dis_fwd.Dispose(); Dis_bwd.Dispose(); worker.Dispose(); }
IEnumerator PoseUpdateNoTex(NativeArray <Color32> buffer, int width, int height, float secondsToWait) { // isPosing = true; var _model = ModelLoader.LoadFromStreamingAssets(modelName + ".bytes"); //var _model = model; var _worker = BarracudaWorkerFactory.CreateWorker(BarracudaWorkerFactory.Type.Compute, _model); //var _worker = worker; var frame = new Texture2D(width, height, TextureFormat.RGB24, false); frame.SetPixels32(buffer.ToArray()); frame.Apply(); //yield return new WaitForSeconds(secondsToWait); yield return(new WaitForEndOfFrame()); //frame.ResizePro(Width, Height, false, false); posenet.scale(frame, Width, Height, FilterMode.Bilinear); // Save frame image jpg to disk for debugging /// var randomInt = UnityEngine.Random.Range(0, 100000000000000000); /// File.WriteAllBytes(Application.persistentDataPath + "/pose-" + randomInt + ".jpg", frame.EncodeToJPG()); /// Debug.Log("Saved size converted image path: " + Application.persistentDataPath + "/pose-" + randomInt + ".jpg"); var inputs = new Dictionary <string, Tensor>(); var tensor = new Tensor(frame, 3); inputs.Add("image", tensor); _worker.ExecuteAndWaitForCompletion(inputs); //yield return new WaitForSeconds(secondsToWait); yield return(new WaitForEndOfFrame()); var Heatmap = _worker.Fetch("heatmap"); //yield return new WaitForSeconds(secondsToWait); yield return(new WaitForEndOfFrame()); var Offset = _worker.Fetch("offset_2"); //yield return new WaitForSeconds(secondsToWait); yield return(new WaitForEndOfFrame()); var Dis_fwd = _worker.Fetch("displacement_fwd_2"); //yield return new WaitForSeconds(secondsToWait); yield return(new WaitForEndOfFrame()); var Dis_bwd = _worker.Fetch("displacement_bwd_2"); //yield return new WaitForSeconds(secondsToWait); yield return(new WaitForEndOfFrame()); poses = posenet.DecodeMultiplePosesOG(Heatmap, Offset, Dis_fwd, Dis_bwd, outputStride: 16, maxPoseDetections: 1, scoreThreshold: 0.8f, nmsRadius: 30); Offset.Dispose(); Dis_fwd.Dispose(); Dis_bwd.Dispose(); Heatmap.Dispose(); _worker.Dispose(); isPosing = false; frame = null; inputs = null; // Resources.UnloadUnusedAssets(); yield return(null); }