<snapdata remixID="11460011"><project name="MachineLearningImage" 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="MachineLearningImage"><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="60" y="23.166666666666686"><block s="receiveKey"><l><option>l</option></l><list></list></block><block s="doSetVar"><l>ImageModelURL</l><l></l><comment w="266" 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 Image Libraries"></custom-block><custom-block s="Load Image Model %txt"><block var="ImageModelURL"/></custom-block></script><script x="59" y="204.16666666666669"><block s="receiveKey"><l><option>space</option></l><list></list><comment w="220" collapsed="false">Hit space to start predicting. This will take up to 60 seconds to start.</comment></block><block s="doUntil"><block s="reportKeyPressed"><l><option>x</option></l></block><script><custom-block s="Image Model Predict"></custom-block></script></block></script><script x="67" y="341.16666666666674"><block s="receiveKey"><l><option>space</option></l><list></list><comment w="345.48600260416663" 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="ImageModelPrediction"/></block><l>0.95</l></block><script><block s="doSayFor"><l>Object 1 Detected!</l><l>2</l></block></script></block></script></block></script></scripts></sprite><watcher var="ImageModelURL" style="normal" x="10" y="10" color="243,118,29"/><watcher var="ImageModelPrediction" style="normal" x="10" y="52.00000399999999" color="243,118,29" hidden="true"/><watcher var="ImageModelTable" style="normal" x="9" y="55.000001999999995" color="243,118,29"/></sprites></stage><variables><variable name="ImageModelURL"><l>0</l></variable><variable name="ImageModelTable"><l>0</l></variable><variable name="ImageModelPrediction"><list struct="atomic" id="388">0,0</list></variable></variables></scene></scenes></project><media name="MachineLearningImage" app="Snap! 7, https://snap.berkeley.edu" version="2"></media></snapdata>