From 896cfa4c2c378e9992667cf27c52cdd7737e4f9d Mon Sep 17 00:00:00 2001 From: "Github Action (authored by pmalacho-mit)" Date: Sun, 10 Mar 2024 22:49:12 -0700 Subject: [PATCH 1/7] Updated code to always try to load model (and indicate it). Change model URL to point to google storage apis. Add random param to ensure cache info is not used --- extensions/src/teachableMachine/index.ts | 52 ++++++++++++++---------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/extensions/src/teachableMachine/index.ts b/extensions/src/teachableMachine/index.ts index 13d4e35d4..639210e6a 100644 --- a/extensions/src/teachableMachine/index.ts +++ b/extensions/src/teachableMachine/index.ts @@ -25,7 +25,7 @@ export default class teachableMachine extends extension({ iconURL: "teachable-machine-blocks.png", insetIconURL: "teachable-machine-blocks-small.svg", tags: ["Dancing with AI", "Made by PRG"] -}) { +}, "indicators") { lastUpdate: number; maxConfidence: number; modelConfidences: {}; @@ -166,18 +166,24 @@ export default class teachableMachine extends extension({ } async startPredicting(modelDataUrl) { - if (!this.predictionState[modelDataUrl]) { - try { - this.predictionState[modelDataUrl] = {}; - // https://github.com/googlecreativelab/teachablemachine-community/tree/master/libraries/image - const { model, type } = await this.initModel(modelDataUrl); - this.predictionState[modelDataUrl].modelType = type; - this.predictionState[modelDataUrl].model = model; - this.runtime.requestToolboxExtensionsUpdate(); - } catch (e) { - this.predictionState[modelDataUrl] = {}; - console.log("Model initialization failure!", e); - } + const alreadyLoaded = Boolean(this.predictionState[modelDataUrl]); + try { + const indicator = await this.indicate({ + type: "warning", + msg: alreadyLoaded ? "Updating model" : "Loading model" + }); + this.predictionState[modelDataUrl] = {}; + // https://github.com/googlecreativelab/teachablemachine-community/tree/master/libraries/image + const { model, type } = await this.initModel(modelDataUrl); + this.predictionState[modelDataUrl].modelType = type; + this.predictionState[modelDataUrl].model = model; + this.runtime.requestToolboxExtensionsUpdate(); + indicator.close(); + this.indicateFor({ type: "success", msg: "Model loaded" }, 1); + } catch (e) { + this.predictionState[modelDataUrl] = {}; + console.log("Model initialization failure!", e); + this.indicateFor({ type: "error", msg: "Unable to load model." }, 1); } } @@ -195,8 +201,9 @@ export default class teachableMachine extends extension({ } async initModel(modelUrl) { - const modelURL = modelUrl + "model.json"; - const metadataURL = modelUrl + "metadata.json"; + const avoidCache = `?x=${Date.now()}`; + const modelURL = modelUrl + "model.json" + avoidCache; + const metadataURL = modelUrl + "metadata.json" + avoidCache; const customMobileNet = await tmImage.load(modelURL, metadataURL); if ((customMobileNet as any)._metadata.hasOwnProperty('tfjsSpeechCommandsVersion')) { // customMobileNet.dispose(); // too early to dispose @@ -217,6 +224,7 @@ export default class teachableMachine extends extension({ const customPoseNet = await tmPose.load(modelURL, metadataURL); return { model: customPoseNet, type: this.ModelType.POSE }; } else { + console.log(customMobileNet.getMetadata(), customMobileNet.getTotalClasses(), customMobileNet.getClassLabels()); return { model: customMobileNet, type: this.ModelType.IMAGE }; } } @@ -224,17 +232,17 @@ export default class teachableMachine extends extension({ useModel(url) { try { const modelUrl = this.modelArgumentToURL(url); - this.getPredictionStateOrStartPredicting(modelUrl); + this.getPredictionStateOrStartPredicting(modelUrl, true); this.updateStageModel(modelUrl); } catch (e) { this.teachableImageModel = null; } } - modelArgumentToURL(modelArg) { - return modelArg.startsWith('https://teachablemachine.withgoogle.com/models/') ? - modelArg : - `https://teachablemachine.withgoogle.com/models/${modelArg}/`; + modelArgumentToURL(modelArg: string) { + return modelArg.startsWith('https://teachablemachine.withgoogle.com/models/') + ? modelArg.replace("https://teachablemachine.withgoogle.com/models/", "https://storage.googleapis.com/tm-model/") + : `https://storage.googleapis.com/tm-model/${modelArg}/`; } updateStageModel(modelUrl) { @@ -245,9 +253,9 @@ export default class teachableMachine extends extension({ } } - getPredictionStateOrStartPredicting(modelUrl) { + getPredictionStateOrStartPredicting(modelUrl, override = false) { const hasPredictionState = this.predictionState.hasOwnProperty(modelUrl); - if (!hasPredictionState) { + if (!hasPredictionState || override) { this.startPredicting(modelUrl); return null; } From 810cf5b7f7916bffefe392413f08a97c188dfff7 Mon Sep 17 00:00:00 2001 From: "Github Action (authored by pmalacho-mit)" Date: Sun, 10 Mar 2024 23:20:49 -0700 Subject: [PATCH 2/7] adding comment --- extensions/src/teachableMachine/index.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/extensions/src/teachableMachine/index.ts b/extensions/src/teachableMachine/index.ts index 639210e6a..24677794f 100644 --- a/extensions/src/teachableMachine/index.ts +++ b/extensions/src/teachableMachine/index.ts @@ -240,9 +240,13 @@ export default class teachableMachine extends extension({ } modelArgumentToURL(modelArg: string) { - return modelArg.startsWith('https://teachablemachine.withgoogle.com/models/') - ? modelArg.replace("https://teachablemachine.withgoogle.com/models/", "https://storage.googleapis.com/tm-model/") - : `https://storage.googleapis.com/tm-model/${modelArg}/`; + const endpointProvidedFromInterface = "https://teachablemachine.withgoogle.com/models/"; + // NOTE: It's possible Google will change this endpoint in the future, and that will break this extension. + // TODO: https://github.com/mitmedialab/prg-extension-boilerplate/issues/343 + const redirectEndpoint = "https://storage.googleapis.com/tm-model/"; + return modelArg.startsWith(endpointProvidedFromInterface) + ? modelArg.replace(endpointProvidedFromInterface, redirectEndpoint) + : redirectEndpoint + modelArg + "/"; } updateStageModel(modelUrl) { From a4d85bc471e0eb4c4d7a8f7947ffa1a47eb86e90 Mon Sep 17 00:00:00 2001 From: "Github Action (authored by pmalacho-mit)" Date: Thu, 9 May 2024 23:37:11 -0700 Subject: [PATCH 3/7] initial commit of fix --- packages/scratch-gui/src/containers/blocks.jsx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/scratch-gui/src/containers/blocks.jsx b/packages/scratch-gui/src/containers/blocks.jsx index e5b47b1fd..f6622266c 100644 --- a/packages/scratch-gui/src/containers/blocks.jsx +++ b/packages/scratch-gui/src/containers/blocks.jsx @@ -117,9 +117,6 @@ class Blocks extends React.Component { toolboxWorkspace.registerButtonCallback('MAKE_A_LIST', varListButtonCallback('list')); toolboxWorkspace.registerButtonCallback('MAKE_A_PROCEDURE', procButtonCallback); toolboxWorkspace.registerButtonCallback('CONNECT_MICROBIT_ROBOT', connectMicrobitRobotCallback); - this.props.vm.runtime.on(registerButtonCallbackEvent, (event) => { - toolboxWorkspace.registerButtonCallback(event, () => this.props.vm.runtime.emit(event)); - }); this.props.vm.runtime.on(openUIEvent, (details) => this.props.onOpenProgrammaticModal(details)); @@ -216,7 +213,15 @@ class Blocks extends React.Component { this.props.vm.refreshWorkspace(); this.requestToolboxUpdate(); this.withToolboxUpdates(() => { - this.workspace.getFlyout().setRecyclingEnabled(true); + this.flyout = this.workspace.getFlyout(); + this.flyout.setRecyclingEnabled(true); + + const registerButtonCallback = (event) => + this.workspace.getFlyout() + ? this.workspace.registerButtonCallback(event, () => { this.props.vm.runtime.emit(event) }) + : this.props.vm.runtime.off(registerButtonCallbackEvent, registerButtonCallback) + + this.props.vm.runtime.on(registerButtonCallbackEvent, registerButtonCallback.bind(this)); }); }); } From e02e120591b36a60393f50be255ca23e431e2418 Mon Sep 17 00:00:00 2001 From: "Github Action (authored by pmalacho-mit)" Date: Thu, 9 May 2024 23:42:10 -0700 Subject: [PATCH 4/7] preparing PR --- packages/scratch-gui/src/containers/blocks.jsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/scratch-gui/src/containers/blocks.jsx b/packages/scratch-gui/src/containers/blocks.jsx index f6622266c..2ac1d59ee 100644 --- a/packages/scratch-gui/src/containers/blocks.jsx +++ b/packages/scratch-gui/src/containers/blocks.jsx @@ -213,9 +213,10 @@ class Blocks extends React.Component { this.props.vm.refreshWorkspace(); this.requestToolboxUpdate(); this.withToolboxUpdates(() => { - this.flyout = this.workspace.getFlyout(); - this.flyout.setRecyclingEnabled(true); + this.workspace.getFlyout().setRecyclingEnabled(true); + // Moved from `componentDidMount` due to strange blockly error after changing locale. + // Worth retesting after updating scratch, as this may have been addressed in later blockly versions. const registerButtonCallback = (event) => this.workspace.getFlyout() ? this.workspace.registerButtonCallback(event, () => { this.props.vm.runtime.emit(event) }) From 46fab7251db0b02e60534f7670dfdc0d1da5fc1a Mon Sep 17 00:00:00 2001 From: "Github Action (authored by pmalacho-mit)" Date: Fri, 24 May 2024 07:51:06 -0700 Subject: [PATCH 5/7] downgrade posent version --- extensions/src/poseBody/package-lock.json | 238 +++++++--------------- extensions/src/poseBody/package.json | 2 +- 2 files changed, 78 insertions(+), 162 deletions(-) diff --git a/extensions/src/poseBody/package-lock.json b/extensions/src/poseBody/package-lock.json index f682e5415..85a08fe5b 100644 --- a/extensions/src/poseBody/package-lock.json +++ b/extensions/src/poseBody/package-lock.json @@ -9,50 +9,63 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@tensorflow-models/posenet": "^2.2.1" + "@tensorflow-models/posenet": "2.2.1" } }, "node_modules/@tensorflow-models/posenet": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@tensorflow-models/posenet/-/posenet-2.2.2.tgz", - "integrity": "sha512-0SXIksRet/IdX7WVH+JSD6W3upkGHix1hwtd3xykIoIMGR7zQ4SC5+wZcNt9ofASyxNYQoI+tUULUo4LNw0c3w==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@tensorflow-models/posenet/-/posenet-2.2.1.tgz", + "integrity": "sha512-n9/g6DfjAyrBTf/zt1haRCyWsgALxUCzg9/Ks3Y2mbYavRZVSCSTRPy/qlE5Hr4tLfyckGfDN14zmGTthNcg/g==", "peerDependencies": { - "@tensorflow/tfjs-converter": "^3.0.0-rc.1", - "@tensorflow/tfjs-core": "^3.0.0-rc.1" + "@tensorflow/tfjs-converter": "^1.3.0", + "@tensorflow/tfjs-core": "^1.3.0" } }, "node_modules/@tensorflow/tfjs-converter": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-3.21.0.tgz", - "integrity": "sha512-12Y4zVDq3yW+wSjSDpSv4HnpL2sDZrNiGSg8XNiDE4HQBdjdA+a+Q3sZF/8NV9y2yoBhL5L7V4mMLDdbZBd9/Q==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-1.7.4.tgz", + "integrity": "sha512-B/Ux9I3osI0CXoESGR0Xe5C6BsEfC04+g2xn5zVaW9KEuVEnGEgnuBQxgijRFzkqTwoyLv4ptAmjyIghVARX0Q==", "peer": true, "peerDependencies": { - "@tensorflow/tfjs-core": "3.21.0" + "@tensorflow/tfjs-core": "1.7.4" } }, "node_modules/@tensorflow/tfjs-core": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-3.21.0.tgz", - "integrity": "sha512-YSfsswOqWfd+M4bXIhT3hwtAb+IV8+ODwIxwdFR/7jTAPZP1wMVnSlpKnXHAN64HFOiP+Tm3HmKusEZ0+09A0w==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-1.7.4.tgz", + "integrity": "sha512-3G4VKJ6nPs7iCt6gs3bjRj8chihKrYWenf63R0pm7D9MhlrVoX/tpN4LYVMGgBL7jHPxMLKdOkoAZJrn/J88HQ==", "peer": true, "dependencies": { - "@types/long": "^4.0.1", "@types/offscreencanvas": "~2019.3.0", - "@types/seedrandom": "^2.4.28", + "@types/seedrandom": "2.4.27", "@types/webgl-ext": "0.0.30", - "@webgpu/types": "0.1.16", - "long": "4.0.0", - "node-fetch": "~2.6.1", - "seedrandom": "^3.0.5" + "@types/webgl2": "0.0.4", + "node-fetch": "~2.1.2", + "seedrandom": "2.4.3" }, "engines": { "yarn": ">= 1.3.2" } }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", + "node_modules/@tensorflow/tfjs-core/node_modules/@types/seedrandom": { + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.27.tgz", + "integrity": "sha512-YvMLqFak/7rt//lPBtEHv3M4sRNA+HGxrhFZ+DQs9K2IkYJbNwVIb8avtJfhDiuaUBX/AW0jnjv48FV8h3u9bQ==", + "peer": true + }, + "node_modules/@tensorflow/tfjs-core/node_modules/node-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", + "integrity": "sha512-IHLHYskTc2arMYsHZH82PVX8CSKT5lzb7AXeyO06QnjGDKtkv+pv3mEki6S7reB/x1QPo+YPxQRNEVgR5V/w3Q==", + "peer": true, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/@tensorflow/tfjs-core/node_modules/seedrandom": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", + "integrity": "sha512-2CkZ9Wn2dS4mMUWQaXLsOAfGD+irMlLEeSP3cMxpGbgyOOzJGFa+MWCOMTOCMyZinHRPxyOj/S/C57li/1to6Q==", "peer": true }, "node_modules/@types/offscreencanvas": { @@ -61,181 +74,84 @@ "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==", "peer": true }, - "node_modules/@types/seedrandom": { - "version": "2.4.34", - "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.34.tgz", - "integrity": "sha512-ytDiArvrn/3Xk6/vtylys5tlY6eo7Ane0hvcx++TKo6RxQXuVfW0AF/oeWqAj9dN29SyhtawuXstgmPlwNcv/A==", - "peer": true - }, "node_modules/@types/webgl-ext": { "version": "0.0.30", "resolved": "https://registry.npmjs.org/@types/webgl-ext/-/webgl-ext-0.0.30.tgz", "integrity": "sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==", "peer": true }, - "node_modules/@webgpu/types": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.16.tgz", - "integrity": "sha512-9E61voMP4+Rze02jlTXud++Htpjyyk8vw5Hyw9FGRrmhHQg2GqbuOfwf5Klrb8vTxc2XWI3EfO7RUHMpxTj26A==", - "peer": true - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "peer": true - }, - "node_modules/node-fetch": { - "version": "2.6.13", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz", - "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==", - "peer": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", - "peer": true - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "peer": true - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "node_modules/@types/webgl2": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/webgl2/-/webgl2-0.0.4.tgz", + "integrity": "sha512-PACt1xdErJbMUOUweSrbVM7gSIYm1vTncW2hF6Os/EeWi6TXYAYMPp+8v6rzHmypE5gHrxaxZNXgMkJVIdZpHw==", "peer": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "peer": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } } }, "dependencies": { "@tensorflow-models/posenet": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@tensorflow-models/posenet/-/posenet-2.2.2.tgz", - "integrity": "sha512-0SXIksRet/IdX7WVH+JSD6W3upkGHix1hwtd3xykIoIMGR7zQ4SC5+wZcNt9ofASyxNYQoI+tUULUo4LNw0c3w==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@tensorflow-models/posenet/-/posenet-2.2.1.tgz", + "integrity": "sha512-n9/g6DfjAyrBTf/zt1haRCyWsgALxUCzg9/Ks3Y2mbYavRZVSCSTRPy/qlE5Hr4tLfyckGfDN14zmGTthNcg/g==", "requires": {} }, "@tensorflow/tfjs-converter": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-3.21.0.tgz", - "integrity": "sha512-12Y4zVDq3yW+wSjSDpSv4HnpL2sDZrNiGSg8XNiDE4HQBdjdA+a+Q3sZF/8NV9y2yoBhL5L7V4mMLDdbZBd9/Q==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-1.7.4.tgz", + "integrity": "sha512-B/Ux9I3osI0CXoESGR0Xe5C6BsEfC04+g2xn5zVaW9KEuVEnGEgnuBQxgijRFzkqTwoyLv4ptAmjyIghVARX0Q==", "peer": true, "requires": {} }, "@tensorflow/tfjs-core": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-3.21.0.tgz", - "integrity": "sha512-YSfsswOqWfd+M4bXIhT3hwtAb+IV8+ODwIxwdFR/7jTAPZP1wMVnSlpKnXHAN64HFOiP+Tm3HmKusEZ0+09A0w==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-1.7.4.tgz", + "integrity": "sha512-3G4VKJ6nPs7iCt6gs3bjRj8chihKrYWenf63R0pm7D9MhlrVoX/tpN4LYVMGgBL7jHPxMLKdOkoAZJrn/J88HQ==", "peer": true, "requires": { - "@types/long": "^4.0.1", "@types/offscreencanvas": "~2019.3.0", - "@types/seedrandom": "^2.4.28", + "@types/seedrandom": "2.4.27", "@types/webgl-ext": "0.0.30", - "@webgpu/types": "0.1.16", - "long": "4.0.0", - "node-fetch": "~2.6.1", - "seedrandom": "^3.0.5" + "@types/webgl2": "0.0.4", + "node-fetch": "~2.1.2", + "seedrandom": "2.4.3" + }, + "dependencies": { + "@types/seedrandom": { + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.27.tgz", + "integrity": "sha512-YvMLqFak/7rt//lPBtEHv3M4sRNA+HGxrhFZ+DQs9K2IkYJbNwVIb8avtJfhDiuaUBX/AW0jnjv48FV8h3u9bQ==", + "peer": true + }, + "node-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", + "integrity": "sha512-IHLHYskTc2arMYsHZH82PVX8CSKT5lzb7AXeyO06QnjGDKtkv+pv3mEki6S7reB/x1QPo+YPxQRNEVgR5V/w3Q==", + "peer": true + }, + "seedrandom": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", + "integrity": "sha512-2CkZ9Wn2dS4mMUWQaXLsOAfGD+irMlLEeSP3cMxpGbgyOOzJGFa+MWCOMTOCMyZinHRPxyOj/S/C57li/1to6Q==", + "peer": true + } } }, - "@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", - "peer": true - }, "@types/offscreencanvas": { "version": "2019.3.0", "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz", "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==", "peer": true }, - "@types/seedrandom": { - "version": "2.4.34", - "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.34.tgz", - "integrity": "sha512-ytDiArvrn/3Xk6/vtylys5tlY6eo7Ane0hvcx++TKo6RxQXuVfW0AF/oeWqAj9dN29SyhtawuXstgmPlwNcv/A==", - "peer": true - }, "@types/webgl-ext": { "version": "0.0.30", "resolved": "https://registry.npmjs.org/@types/webgl-ext/-/webgl-ext-0.0.30.tgz", "integrity": "sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==", "peer": true }, - "@webgpu/types": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.16.tgz", - "integrity": "sha512-9E61voMP4+Rze02jlTXud++Htpjyyk8vw5Hyw9FGRrmhHQg2GqbuOfwf5Klrb8vTxc2XWI3EfO7RUHMpxTj26A==", + "@types/webgl2": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/webgl2/-/webgl2-0.0.4.tgz", + "integrity": "sha512-PACt1xdErJbMUOUweSrbVM7gSIYm1vTncW2hF6Os/EeWi6TXYAYMPp+8v6rzHmypE5gHrxaxZNXgMkJVIdZpHw==", "peer": true - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "peer": true - }, - "node-fetch": { - "version": "2.6.13", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz", - "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==", - "peer": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", - "peer": true - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "peer": true - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "peer": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "peer": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } } } } diff --git a/extensions/src/poseBody/package.json b/extensions/src/poseBody/package.json index 0730ec52f..5c7e07979 100644 --- a/extensions/src/poseBody/package.json +++ b/extensions/src/poseBody/package.json @@ -11,6 +11,6 @@ "author": "", "license": "ISC", "dependencies": { - "@tensorflow-models/posenet": "^2.2.1" + "@tensorflow-models/posenet": "2.2.1" } } \ No newline at end of file From 8dde8e71f0f61449afa4d91566c99a00930bd680 Mon Sep 17 00:00:00 2001 From: "Github Action (authored by pmalacho-mit)" Date: Mon, 15 Jul 2024 22:32:18 -0700 Subject: [PATCH 6/7] Adding icon picture for selfie segmentation --- extensions/src/selfieSegmentation/index.ts | 3 ++- .../src/selfieSegmentation/profile-picture.png | Bin 0 -> 7534 bytes 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 extensions/src/selfieSegmentation/profile-picture.png diff --git a/extensions/src/selfieSegmentation/index.ts b/extensions/src/selfieSegmentation/index.ts index d4fa26ad1..a082e4be0 100644 --- a/extensions/src/selfieSegmentation/index.ts +++ b/extensions/src/selfieSegmentation/index.ts @@ -5,7 +5,8 @@ import type BlockUtility from "$scratch-vm/engine/block-utility"; const details: ExtensionMenuDisplayDetails = { name: "Selfie Detector", - tags: ["Made by PRG"] + tags: ["Made by PRG"], + insetIconURL: "profile-picture.png", }; export default class extends extension( diff --git a/extensions/src/selfieSegmentation/profile-picture.png b/extensions/src/selfieSegmentation/profile-picture.png new file mode 100644 index 0000000000000000000000000000000000000000..b9aba1e96b6a0c145fa06ae02bb4a9af0a966f85 GIT binary patch literal 7534 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 literal 0 HcmV?d00001 From 8e110f525735f3a0f42ca0879ccfe3f04d889a40 Mon Sep 17 00:00:00 2001 From: "Github Action (authored by pmalacho-mit)" Date: Wed, 24 Jul 2024 09:46:34 -0400 Subject: [PATCH 7/7] ran install --- extensions/src/poseBody/pnpm-lock.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/extensions/src/poseBody/pnpm-lock.yaml b/extensions/src/poseBody/pnpm-lock.yaml index f34b9804c..ef5650a0d 100644 --- a/extensions/src/poseBody/pnpm-lock.yaml +++ b/extensions/src/poseBody/pnpm-lock.yaml @@ -9,16 +9,16 @@ importers: .: dependencies: '@tensorflow-models/posenet': - specifier: ^2.2.1 - version: 2.2.2(@tensorflow/tfjs-converter@3.21.0(@tensorflow/tfjs-core@3.21.0))(@tensorflow/tfjs-core@3.21.0) + specifier: 2.2.1 + version: 2.2.1(@tensorflow/tfjs-converter@3.21.0(@tensorflow/tfjs-core@3.21.0))(@tensorflow/tfjs-core@3.21.0) packages: - '@tensorflow-models/posenet@2.2.2': - resolution: {integrity: sha512-0SXIksRet/IdX7WVH+JSD6W3upkGHix1hwtd3xykIoIMGR7zQ4SC5+wZcNt9ofASyxNYQoI+tUULUo4LNw0c3w==} + '@tensorflow-models/posenet@2.2.1': + resolution: {integrity: sha512-n9/g6DfjAyrBTf/zt1haRCyWsgALxUCzg9/Ks3Y2mbYavRZVSCSTRPy/qlE5Hr4tLfyckGfDN14zmGTthNcg/g==} peerDependencies: - '@tensorflow/tfjs-converter': ^3.0.0-rc.1 - '@tensorflow/tfjs-core': ^3.0.0-rc.1 + '@tensorflow/tfjs-converter': ^1.3.0 + '@tensorflow/tfjs-core': ^1.3.0 '@tensorflow/tfjs-converter@3.21.0': resolution: {integrity: sha512-12Y4zVDq3yW+wSjSDpSv4HnpL2sDZrNiGSg8XNiDE4HQBdjdA+a+Q3sZF/8NV9y2yoBhL5L7V4mMLDdbZBd9/Q==} @@ -70,7 +70,7 @@ packages: snapshots: - '@tensorflow-models/posenet@2.2.2(@tensorflow/tfjs-converter@3.21.0(@tensorflow/tfjs-core@3.21.0))(@tensorflow/tfjs-core@3.21.0)': + '@tensorflow-models/posenet@2.2.1(@tensorflow/tfjs-converter@3.21.0(@tensorflow/tfjs-core@3.21.0))(@tensorflow/tfjs-core@3.21.0)': dependencies: '@tensorflow/tfjs-converter': 3.21.0(@tensorflow/tfjs-core@3.21.0) '@tensorflow/tfjs-core': 3.21.0