<snapdata remixID="11460064"><project name="MachineLearningPose" app="Snap! 7, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><scenes select="1"><scene name="MachineLearningPose"><notes></notes><palette><category name="Machine Learning" color="0,199,117,1"/></palette><hidden></hidden><headers></headers><code></code><blocks><block-definition s="Load Image Libraries" type="command" category="Machine Learning"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRepeat"><l>2</l><script><block s="doRun"><block s="reportJSFunction"><list></list><l>   let script = document.createElement("script");&#xD;   script.type = "text/javascript"; &#xD;   script.src = "https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.3.1/dist/tf.min.js";  &#xD;   document.head.appendChild(script);&#xD;   let script2 = document.createElement("script");&#xD;   script2.type = "text/javascript";&#xD;   script2.src = "https://cdn.jsdelivr.net/npm/@teachablemachine/image@0.8/dist/teachablemachine-image.min.js";&#xD;   document.head.appendChild(script2);  </l></block><list></list></block><block s="doWait"><l>1</l></block></script></block></script></block-definition><block-definition s="Load Image Model %&apos;URL&apos;" type="command" category="Machine Learning"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>URL</l></list><l>const when_loaded = (loaded_model) =&gt; {&#xD;  console.log("loading model")&#xD;  window.imageModel = loaded_model;&#xD;};&#xD;&#xD;const modelURL = URL + "model.json"; // model topology&#xD;const metadataURL = URL + "metadata.json"; // model metadata&#xD;&#xD;const recognizer = tmImage.load(modelURL, metadataURL).then(when_loaded);     </l></block><list><block var="ImageModelURL"/></list></block></script></block-definition><block-definition s="Image Model Predict" type="command" category="Machine Learning"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>predictionJS</l></list></block><block s="doDeclareVariables"><list><l>predictionList</l></list></block><block s="doRun"><block s="reportJSFunction"><list><l>videoCapture</l></list><l>const report_predictions = (prediction) =&gt; {&#xD;   let class_names = window.imageModel.getClassLabels();&#xD;   let names_and_scores = prediction.map((score, index) =&gt; [class_names[index], score.probability]);&#xD;   &#xD;   //console.log(class_names)&#xD;&#xD;   var predictionList = []&#xD;&#xD;   // This loop is for outer array&#xD;   for (var i = 0; i &lt; names_and_scores.length; i++) {&#xD;      if (names_and_scores[i].length &gt; 1) {&#xD;         predictionList.push([class_names[i],names_and_scores[i][1]]) &#xD;         //console.log([class_names[i], predictionList[i]])&#xD;      }&#xD;   }&#xD;&#xD;   window.prediction = predictionList&#xD;};&#xD;&#xD;const prediction = window.imageModel.predict(videoCapture.contents).then(report_predictions);   &#xD;//console.log(prediction)        </l></block><list><block s="reportVideo"><l><option>snap</option></l><l>Stage</l></block></list></block><block s="doSetVar"><l>predictionJS</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>return window.prediction</l></block><list></list></block></block><block s="doSetVar"><l>predictionList</l><block s="reportTextSplit"><block s="reportJoinWords"><list><block var="predictionJS"/></list></block><l>,</l></block></block><block s="doSetVar"><l>ImageModelTable</l><block s="reportReshape"><block var="predictionList"/><list><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="predictionList"/></block><l>2</l></block><l>2</l></list></block></block><block s="doSetVar"><l>ImageModelPrediction</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block var="ImageModelTable"/></block></block></script></block-definition><block-definition s="Load Audio Libraries" type="command" category="Machine Learning"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRepeat"><l>2</l><script><block s="doRun"><block s="reportJSFunction"><list></list><l>let script = document.createElement("script");&#xD;script.type = "text/javascript";&#xD;script.src = "https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.3.1/dist/tf.min.js";&#xD;document.head.appendChild(script);&#xD;let script2 = document.createElement("script");&#xD;script2.type = "text/javascript";&#xD;script2.src = "https://cdn.jsdelivr.net/npm/@tensorflow-models/speech-commands@0.4.0/dist/speech-commands.min.js";&#xD;document.head.appendChild(script2);  </l></block><list></list></block><block s="doWait"><l>1</l></block></script></block></script></block-definition><block-definition s="Load Audio Model %&apos;URL&apos;" type="command" category="Machine Learning"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>URL</l></list><l>const checkpointURL = URL + "model.json"; // model topology&#xD;const metadataURL = URL + "metadata.json"; // model metadata&#xD;&#xD;const recognizer = speechCommands.create("BROWSER_FFT", undefined, checkpointURL, metadataURL);&#xD;&#xD;// check that model and metadata are loaded via HTTPS requests.&#xD;while (!recognizer.ensureModelLoaded()){}&#xD;&#xD;// Set a global variable for the recognizer&#xD;window.recognizer = recognizer&#xD;     </l></block><list><block var="AudioModelURL"/></list></block></script></block-definition><block-definition s="Stop Listening" type="command" category="Machine Learning"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>window.recognizer.stopListening()</l></block><list></list></block></script></block-definition><block-definition s="Audio Model Predict" type="command" category="Machine Learning"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>predictionJSAudio</l></list></block><block s="doDeclareVariables"><list><l>predictionListAudio</l></list></block><block s="doRun"><block s="reportJSFunction"><list></list><l>const report_predictionsAudio = (predictionAudio) =&gt; {&#xD;   let class_names = recognizer.wordLabels()&#xD;   let names_and_scores = Array.prototype.slice.call(predictionAudio.scores).map((score, index) =&gt; [class_names[index], score]);&#xD;&#xD;   //console.log(class_names)&#xD;&#xD;   var predictionListAudio = []&#xD;&#xD;   // This loop is for outer array&#xD;   for (var i = 0; i &lt; names_and_scores.length; i++) {&#xD;      if (names_and_scores[i].length &gt; 1) {&#xD;         predictionListAudio.push([class_names[i],names_and_scores[i][1]]) &#xD;         //console.log([class_names[i], predictionList[i]])&#xD;      }&#xD;   }&#xD;&#xD;   window.predictionAudio = predictionListAudio&#xD;   //console.log(predictionList)&#xD;};&#xD;&#xD;// listen() takes two arguments:&#xD;// 1. A callback function that is invoked anytime a word is recognized.&#xD;// 2. A configuration object with adjustable fields&#xD;window.recognizer.listen(report_predictionsAudio, {invokeCallbackOnNoiseAndUnknown: true});&#xD;           </l></block><list></list></block><block s="doUntil"><block s="reportKeyPressed"><l><option>x</option></l></block><script><block s="doSetVar"><l>predictionJSAudio</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>return window.predictionAudio</l></block><list></list></block></block><block s="doSetVar"><l>predictionListAudio</l><block s="reportTextSplit"><block s="reportJoinWords"><list><block var="predictionJSAudio"/></list></block><l>,</l></block></block><block s="doSetVar"><l>AudioPredictionTable</l><block s="reportReshape"><block var="predictionListAudio"/><list><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="predictionListAudio"/></block><l>2</l></block><l>2</l></list></block></block><block s="doSetVar"><l>AudioPrediction</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block var="AudioPredictionTable"/></block></block></script></block><block s="doRun"><block s="reportJSFunction"><list></list><l>window.recognizer.stopListening()</l></block><list></list></block></script></block-definition><block-definition s="Load Pose Libraries" type="command" category="Machine Learning"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRepeat"><l>2</l><script><block s="doRun"><block s="reportJSFunction"><list></list><l>   let script = document.createElement("script");&#xD;   script.type = "text/javascript"; &#xD;   script.src = "https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.3.1/dist/tf.min.js";  &#xD;   document.head.appendChild(script);&#xD;   let script2 = document.createElement("script");&#xD;   script2.type = "text/javascript";&#xD;   script2.src = "https://cdn.jsdelivr.net/npm/@teachablemachine/pose@0.8/dist/teachablemachine-pose.min.js";&#xD;   document.head.appendChild(script2);  </l></block><list></list></block><block s="doWait"><l>1</l></block></script></block></script></block-definition><block-definition s="Load Pose Model %&apos;URL&apos;" type="command" category="Machine Learning"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>URL</l></list><l>const when_loaded = (loaded_model) =&gt; {&#xD;  console.log("loading model")&#xD;  window.poseModel = loaded_model;&#xD;};&#xD;&#xD;const modelURL = URL + "model.json"; // model topology&#xD;const metadataURL = URL + "metadata.json"; // model metadata&#xD;&#xD;const recognizer = tmPose.load(modelURL, metadataURL).then(when_loaded);     </l></block><list><block var="PoseModelURL"/></list></block></script></block-definition><block-definition s="Pose Model Predict" type="command" category="Machine Learning"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>posePredictionJS</l></list></block><block s="doDeclareVariables"><list><l>posePredictionList</l></list></block><block s="doRun"><block s="reportJSFunction"><list><l>videoCapture</l></list><l>const report_predictionsPose = (posePrediction) =&gt; {&#xD;   let class_names = window.poseModel.getClassLabels();&#xD;   let names_and_scores = posePrediction.map((score, index) =&gt; [class_names[index], score.probability]);&#xD;   &#xD;   //console.log(posePrediction)&#xD;&#xD;   window.posePrediction = names_and_scores&#xD;};&#xD;&#xD;const make_pose_prediction = (pose) =&gt; {&#xD;   poseModel.predict(pose.posenetOutput).then(report_predictionsPose);&#xD;} &#xD;&#xD;// Have to estimate the pose and then run it through the teachable machine&#xD;window.poseModel.estimatePose(videoCapture.contents).then(make_pose_prediction);&#xD;     </l></block><list><block s="reportVideo"><l><option>snap</option></l><l>Stage</l></block></list></block><block s="doSetVar"><l>posePredictionJS</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>return window.posePrediction</l></block><list></list></block></block><block s="doSetVar"><l>posePredictionList</l><block s="reportTextSplit"><block s="reportJoinWords"><list><block var="posePredictionJS"/></list></block><l>,</l></block></block><block s="doSetVar"><l>PoseModelTable</l><block s="reportReshape"><block var="posePredictionList"/><list><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="posePredictionList"/></block><l>2</l></block><l>2</l></list></block></block><block s="doSetVar"><l>PoseModelPrediction</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><block var="PoseModelTable"/></block></block></script></block-definition></blocks><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="327"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAADoVJREFUeF7t1cEJAAAIxDDdf2m3sJ+4wEEQuuMIECBAgACBd4F9XzRIgAABAgQIjAB7AgIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECByxcQFpoRMBzwAAAABJRU5ErkJggg==</pentrails><costumes><list struct="atomic" id="328"></list></costumes><sounds><list struct="atomic" id="329"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Sprite" idx="1" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="334"><costumes><list struct="atomic" id="335"></list></costumes><sounds><list struct="atomic" id="336"></list></sounds><blocks></blocks><variables></variables><scripts><script x="52" y="40.166666666666686"><block s="receiveKey"><l><option>l</option></l><list></list></block><block s="doSetVar"><l>PoseModelURL</l><l></l><comment w="274" collapsed="false">Enter the full URL from Google Teachable Machine here. Hit enter, then hit the l key to load the library. If the URL loaded correctly it will show up on the stage.</comment></block><custom-block s="Load Pose Libraries"></custom-block><custom-block s="Load Pose Model %txt"><block var="PoseModelURL"/></custom-block></script><script x="55" y="324"><block s="receiveKey"><l><option>space</option></l><list></list><comment w="288" collapsed="false">Sample code demonstrating how to use the model predictions.</comment></block><block s="doUntil"><block s="reportKeyPressed"><l><option>x</option></l></block><script><block s="doIf"><block s="reportGreaterThan"><block s="reportListItem"><l>1</l><block var="PoseModelPrediction"/></block><l>0.90</l></block><script><block s="doSayFor"><l>That&apos;s an interesting pose</l><l>2</l></block></script></block></script></block></script><script x="57" y="183.16666666666669"><block s="receiveKey"><l><option>space</option></l><list></list><comment w="258" collapsed="false">Press space to start predicting. This will take up to 60 seconds to start running. </comment></block><block s="doUntil"><block s="reportKeyPressed"><l><option>x</option></l></block><script><custom-block s="Pose Model Predict"></custom-block></script></block></script></scripts></sprite><watcher var="PoseModelPrediction" style="normal" x="10" y="157.00001399999996" color="243,118,29" hidden="true"/><watcher var="PoseModelURL" style="normal" x="14" y="10.000009999999975" color="243,118,29"/><watcher var="PoseModelTable" style="normal" x="17" y="44.00001199999997" color="243,118,29"/></sprites></stage><variables><variable name="PoseModelURL"><l>0</l></variable><variable name="PoseModelTable"><l>0</l></variable><variable name="PoseModelPrediction"><list struct="atomic" id="388">0,0</list></variable></variables></scene></scenes></project><media name="MachineLearningPose" app="Snap! 7, https://snap.berkeley.edu" version="2"></media></snapdata>