brilliantsole 0.0.27 → 0.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/assets/3d/anchor.glb +0 -0
  2. package/assets/3d/coin.glb +0 -0
  3. package/assets/3d/glasses.glb +0 -0
  4. package/assets/audio/bounceMedium.wav +0 -0
  5. package/assets/audio/bounceStrong.wav +0 -0
  6. package/assets/audio/bounceWeak.wav +0 -0
  7. package/assets/audio/coin.wav +0 -0
  8. package/assets/audio/getUp.wav +0 -0
  9. package/assets/audio/grab.wav +0 -0
  10. package/assets/audio/kick.wav +0 -0
  11. package/assets/audio/platterFadeIn old.wav +0 -0
  12. package/assets/audio/platterFadeIn.wav +0 -0
  13. package/assets/audio/platterFadeOut.wav +0 -0
  14. package/assets/audio/punch.wav +0 -0
  15. package/assets/audio/punchSqueak.wav +0 -0
  16. package/assets/audio/purr.wav +0 -0
  17. package/assets/audio/purrFadeOut.wav +0 -0
  18. package/assets/audio/release.wav +0 -0
  19. package/assets/audio/splat.wav +0 -0
  20. package/assets/audio/stomp.wav +0 -0
  21. package/build/brilliantsole.cjs +3091 -741
  22. package/build/brilliantsole.cjs.map +1 -1
  23. package/build/brilliantsole.js +2759 -709
  24. package/build/brilliantsole.js.map +1 -1
  25. package/build/brilliantsole.ls.js +2602 -543
  26. package/build/brilliantsole.ls.js.map +1 -1
  27. package/build/brilliantsole.min.js +1 -1
  28. package/build/brilliantsole.min.js.map +1 -1
  29. package/build/brilliantsole.module.d.ts +295 -65
  30. package/build/brilliantsole.module.js +2749 -710
  31. package/build/brilliantsole.module.js.map +1 -1
  32. package/build/brilliantsole.module.min.d.ts +295 -65
  33. package/build/brilliantsole.module.min.js +1 -1
  34. package/build/brilliantsole.module.min.js.map +1 -1
  35. package/build/brilliantsole.node.module.d.ts +289 -62
  36. package/build/brilliantsole.node.module.js +3080 -742
  37. package/build/brilliantsole.node.module.js.map +1 -1
  38. package/build/dts/BS-output.d.ts +10 -0
  39. package/build/dts/BS.d.ts +21 -8
  40. package/build/dts/CameraManager.d.ts +72 -0
  41. package/build/dts/Device.d.ts +64 -13
  42. package/build/dts/DeviceInformationManager.d.ts +4 -4
  43. package/build/dts/DeviceManager.d.ts +2 -0
  44. package/build/dts/FileTransferManager.d.ts +18 -8
  45. package/build/dts/InformationManager.d.ts +2 -0
  46. package/build/dts/MicrophoneManager.d.ts +88 -0
  47. package/build/dts/TfliteManager.d.ts +22 -2
  48. package/build/dts/WifiManager.d.ts +61 -0
  49. package/build/dts/connection/BaseConnectionManager.d.ts +35 -3
  50. package/build/dts/connection/ClientConnectionManager.d.ts +7 -2
  51. package/build/dts/connection/bluetooth/NobleConnectionManager.d.ts +2 -1
  52. package/build/dts/connection/bluetooth/WebBluetoothConnectionManager.d.ts +1 -0
  53. package/build/dts/connection/bluetooth/bluetoothUUIDs.d.ts +2 -2
  54. package/build/dts/connection/udp/UDPConnectionManager.d.ts +28 -0
  55. package/build/dts/connection/webSocket/WebSocketConnectionManager.d.ts +25 -0
  56. package/build/dts/devicePair/DevicePair.d.ts +5 -5
  57. package/build/dts/scanner/BaseScanner.d.ts +4 -1
  58. package/build/dts/scanner/NobleScanner.d.ts +2 -1
  59. package/build/dts/sensor/MotionSensorDataManager.d.ts +5 -2
  60. package/build/dts/sensor/SensorDataManager.d.ts +5 -4
  61. package/build/dts/server/BaseClient.d.ts +5 -3
  62. package/build/dts/server/ServerUtils.d.ts +1 -1
  63. package/build/dts/server/websocket/WebSocketUtils.d.ts +1 -1
  64. package/build/dts/utils/AudioUtils.d.ts +2 -0
  65. package/build/dts/utils/Console.d.ts +2 -0
  66. package/build/dts/utils/ThrottleUtils.d.ts +2 -0
  67. package/build/dts/vibration/VibrationManager.d.ts +19 -2
  68. package/build/index.d.ts +292 -62
  69. package/build/index.node.d.ts +286 -59
  70. package/examples/3d/scene.html +19 -5
  71. package/examples/3d-generic/index.html +144 -0
  72. package/examples/3d-generic/script.js +266 -0
  73. package/examples/basic/index.html +267 -17
  74. package/examples/basic/script.js +958 -105
  75. package/examples/camera/barcode-detector.js +109 -0
  76. package/examples/camera/depth-estimation.js +71 -0
  77. package/examples/camera/face-detector.js +119 -0
  78. package/examples/camera/face-landmark.js +111 -0
  79. package/examples/camera/gesture-recognition.js +97 -0
  80. package/examples/camera/hand-landmark.js +74 -0
  81. package/examples/camera/image-segmentation.js +98 -0
  82. package/examples/camera/image-to-text.js +43 -0
  83. package/examples/camera/image-upscale.js +75 -0
  84. package/examples/camera/index.html +129 -0
  85. package/examples/camera/object-detection.js +98 -0
  86. package/examples/camera/pose-landmark.js +60 -0
  87. package/examples/camera/script.js +316 -0
  88. package/examples/camera/utils.js +165 -0
  89. package/examples/camera/yolo-tiny.js +54 -0
  90. package/examples/camera/yolo.js +119 -0
  91. package/examples/edge-impulse/script.js +157 -48
  92. package/examples/edge-impulse-test/README.md +11 -0
  93. package/examples/edge-impulse-test/edge-impulse-standalone.js +7228 -0
  94. package/examples/edge-impulse-test/edge-impulse-standalone.wasm +0 -0
  95. package/examples/edge-impulse-test/index.html +75 -0
  96. package/examples/edge-impulse-test/run-impulse.js +135 -0
  97. package/examples/edge-impulse-test/script.js +200 -0
  98. package/examples/glasses-gestures/README.md +11 -0
  99. package/examples/glasses-gestures/edge-impulse-standalone.js +7228 -0
  100. package/examples/glasses-gestures/edge-impulse-standalone.wasm +0 -0
  101. package/examples/glasses-gestures/index.html +69 -0
  102. package/examples/glasses-gestures/run-impulse.js +135 -0
  103. package/examples/glasses-gestures/script.js +226 -0
  104. package/examples/gloves/edge-impulse-standalone.js +7228 -0
  105. package/examples/gloves/edge-impulse-standalone.wasm +0 -0
  106. package/examples/gloves/index.html +4 -1
  107. package/examples/gloves/run-impulse.js +135 -0
  108. package/examples/gloves/script.js +367 -51
  109. package/examples/graph/script.js +94 -37
  110. package/examples/microphone/gender.js +54 -0
  111. package/examples/microphone/index.html +102 -0
  112. package/examples/microphone/script.js +394 -0
  113. package/examples/microphone/utils.js +45 -0
  114. package/examples/microphone/whisper-realtime.js +166 -0
  115. package/examples/microphone/whisper.js +132 -0
  116. package/examples/punch/index.html +135 -0
  117. package/examples/punch/punch.tflite +0 -0
  118. package/examples/punch/script.js +169 -0
  119. package/examples/server/index.html +98 -22
  120. package/examples/server/script.js +317 -109
  121. package/examples/ukaton-firmware-update/merged-firmware.bin +0 -0
  122. package/examples/utils/aframe/aframe-master.min.js +2 -0
  123. package/examples/utils/aframe/bs-vibration.js +150 -0
  124. package/examples/utils/aframe/force-pushable.js +80 -0
  125. package/examples/utils/aframe/grabbable-anchor.js +46 -0
  126. package/examples/utils/aframe/grabbable-listener.js +31 -0
  127. package/examples/utils/aframe/grabbable-physics-body.js +190 -0
  128. package/examples/utils/aframe/grow-shrink.js +25 -0
  129. package/examples/utils/aframe/hand-punch.js +119 -0
  130. package/examples/utils/aframe/my-obb-collider.js +293 -0
  131. package/examples/utils/aframe/occlude-hand-tracking-controls.js +47 -0
  132. package/examples/utils/aframe/occlude-mesh.js +42 -0
  133. package/examples/utils/aframe/palm-up-detector.js +47 -0
  134. package/examples/utils/aframe/shadow-material.js +20 -0
  135. package/examples/utils/aframe/soft-shadow-light.js +9 -0
  136. package/examples/webxr-2/assets/3d/soccerBall.glb +0 -0
  137. package/examples/webxr-2/assets/audio/shellBounce.wav +0 -0
  138. package/examples/webxr-2/assets/audio/shellHit.wav +0 -0
  139. package/examples/webxr-2/assets/audio/shellKick.wav +0 -0
  140. package/examples/webxr-2/assets/audio/soccerBounce.wav +0 -0
  141. package/examples/webxr-2/assets/audio/soccerKick.mp3 +0 -0
  142. package/examples/webxr-2/assets/images/shellTexture.png +0 -0
  143. package/examples/webxr-2/components/bs-ankle.js +337 -0
  144. package/examples/webxr-2/components/coin.js +84 -0
  145. package/examples/webxr-2/components/custom-wrap.js +17 -0
  146. package/examples/webxr-2/components/goomba.js +3250 -0
  147. package/examples/webxr-2/components/init-shell-material.js +215 -0
  148. package/examples/webxr-2/components/platter.js +172 -0
  149. package/examples/webxr-2/components/shell.js +374 -0
  150. package/examples/webxr-2/components/soccer-ball.js +250 -0
  151. package/examples/webxr-2/components/squashed-goomba.js +249 -0
  152. package/examples/webxr-2/edge-impulse-standalone.js +7228 -0
  153. package/examples/webxr-2/edge-impulse-standalone.wasm +0 -0
  154. package/examples/webxr-2/index.html +996 -0
  155. package/examples/webxr-2/kick.tflite +0 -0
  156. package/examples/webxr-2/kick2.tflite +0 -0
  157. package/examples/webxr-2/run-impulse.js +135 -0
  158. package/examples/webxr-2/script.js +384 -0
  159. package/examples/webxr-3/components/bs-camera.js +65 -0
  160. package/examples/webxr-3/index.html +134 -0
  161. package/examples/webxr-3/script.js +432 -0
  162. package/package.json +2 -1
  163. package/src/.prettierrc +4 -0
  164. package/src/BS.ts +79 -8
  165. package/src/CameraManager.ts +497 -0
  166. package/src/Device.ts +691 -86
  167. package/src/DeviceInformationManager.ts +19 -10
  168. package/src/DeviceManager.ts +85 -25
  169. package/src/FileTransferManager.ts +145 -20
  170. package/src/InformationManager.ts +40 -15
  171. package/src/MicrophoneManager.ts +599 -0
  172. package/src/TfliteManager.ts +171 -25
  173. package/src/WifiManager.ts +323 -0
  174. package/src/connection/BaseConnectionManager.ts +130 -30
  175. package/src/connection/ClientConnectionManager.ts +34 -10
  176. package/src/connection/bluetooth/BluetoothConnectionManager.ts +8 -2
  177. package/src/connection/bluetooth/NobleConnectionManager.ts +147 -41
  178. package/src/connection/bluetooth/WebBluetoothConnectionManager.ts +99 -34
  179. package/src/connection/bluetooth/bluetoothUUIDs.ts +40 -13
  180. package/src/connection/udp/UDPConnectionManager.ts +356 -0
  181. package/src/connection/websocket/WebSocketConnectionManager.ts +282 -0
  182. package/src/devicePair/DevicePair.ts +95 -25
  183. package/src/devicePair/DevicePairPressureSensorDataManager.ts +27 -7
  184. package/src/scanner/BaseScanner.ts +49 -11
  185. package/src/scanner/NobleScanner.ts +76 -14
  186. package/src/sensor/MotionSensorDataManager.ts +21 -6
  187. package/src/sensor/PressureSensorDataManager.ts +37 -8
  188. package/src/sensor/SensorConfigurationManager.ts +73 -22
  189. package/src/sensor/SensorDataManager.ts +109 -23
  190. package/src/server/BaseClient.ts +150 -36
  191. package/src/server/BaseServer.ts +50 -2
  192. package/src/server/ServerUtils.ts +39 -9
  193. package/src/server/udp/UDPServer.ts +73 -22
  194. package/src/server/udp/UDPUtils.ts +9 -2
  195. package/src/server/websocket/WebSocketClient.ts +27 -7
  196. package/src/server/websocket/WebSocketUtils.ts +4 -2
  197. package/src/utils/AudioUtils.ts +65 -0
  198. package/src/utils/Console.ts +62 -9
  199. package/src/utils/ParseUtils.ts +24 -5
  200. package/src/utils/ThrottleUtils.ts +62 -0
  201. package/src/utils/Timer.ts +1 -1
  202. package/src/vibration/VibrationManager.ts +166 -40
@@ -0,0 +1,43 @@
1
+ import { pipeline } from "https://cdn.jsdelivr.net/npm/@huggingface/transformers@3.2.4";
2
+
3
+ import { registerModel } from "./utils.js";
4
+
5
+ let captioner = undefined;
6
+ let isRunning = false;
7
+
8
+ const createCaptioner = async () => {
9
+ console.log("creating captioner...", captioner);
10
+ captioner = await pipeline(
11
+ "image-to-text",
12
+ "Xenova/vit-gpt2-image-captioning"
13
+ );
14
+ console.log("created captioner", captioner);
15
+ };
16
+
17
+ registerModel(
18
+ "image to text",
19
+ () => {
20
+ if (!captioner) {
21
+ createCaptioner();
22
+ }
23
+ },
24
+ async (image, canvas, context, mediaResultsElement) => {
25
+ if (!captioner) {
26
+ console.error("captioner not created yet");
27
+ return;
28
+ }
29
+ if (isRunning) {
30
+ return;
31
+ }
32
+ isRunning = true;
33
+
34
+ const output = await captioner(image.src);
35
+ console.log("captioner output", output);
36
+
37
+ isRunning = false;
38
+
39
+ if (output[0]) {
40
+ mediaResultsElement.textContent = output[0].generated_text;
41
+ }
42
+ }
43
+ );
@@ -0,0 +1,75 @@
1
+ import { pipeline } from "https://cdn.jsdelivr.net/npm/@huggingface/transformers@3.5.2";
2
+
3
+ import {
4
+ drawColorImage,
5
+ drawGreyscaleImage,
6
+ registerModel,
7
+ resizeImage,
8
+ } from "./utils.js";
9
+
10
+ let upscaler = undefined;
11
+ let isRunning = false;
12
+
13
+ const createUpscaler = async () => {
14
+ console.log("creating upscaler...");
15
+ upscaler = await pipeline(
16
+ "image-to-image",
17
+ "Xenova/swin2SR-compressed-sr-x4-48",
18
+ {
19
+ // quantized: false, // Uncomment this line to use the quantized version
20
+ }
21
+ );
22
+ console.log("created upscaler", upscaler);
23
+ };
24
+
25
+ registerModel(
26
+ "image upscale",
27
+ () => {
28
+ if (!upscaler) {
29
+ createUpscaler();
30
+ }
31
+ },
32
+ async (
33
+ image,
34
+ canvas,
35
+ context,
36
+ mediaResultsElement,
37
+ generatedImageCanvas,
38
+ generatedImageContext
39
+ ) => {
40
+ if (!upscaler) {
41
+ console.error("upscaler not created yet");
42
+ return;
43
+ }
44
+ if (isRunning) {
45
+ return;
46
+ }
47
+ isRunning = true;
48
+
49
+ try {
50
+ console.log("running upscaler...");
51
+ const src = resizeImage(image, 256, 256);
52
+ const output = await upscaler(src);
53
+ console.log("upscaler output", output);
54
+
55
+ if (output) {
56
+ const { channels, data, height, width } = output;
57
+ console.log({ channels, data, height, width });
58
+ if (channels == 3) {
59
+ generatedImageCanvas.style.display = "";
60
+ drawColorImage(
61
+ data,
62
+ height,
63
+ width,
64
+ generatedImageCanvas,
65
+ generatedImageContext
66
+ );
67
+ }
68
+ }
69
+ } catch (error) {
70
+ console.error("error running upscalar", error);
71
+ } finally {
72
+ isRunning = false;
73
+ }
74
+ }
75
+ );
@@ -0,0 +1,129 @@
1
+ <html>
2
+ <head>
3
+ <title>Camera | BrilliantSole JavaScript SDK</title>
4
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
5
+ <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
6
+ <script type="module" src="./script.js"></script>
7
+
8
+ <script
9
+ src="https://cdn.jsdelivr.net/npm/@mediapipe/drawing_utils/drawing_utils.js"
10
+ crossorigin="anonymous"
11
+ ></script>
12
+ <script
13
+ src="https://cdn.jsdelivr.net/npm/@mediapipe/hands/hands.js"
14
+ crossorigin="anonymous"
15
+ ></script>
16
+ <script type="module" src="./hand-landmark.js"></script>
17
+ <script type="module" src="./gesture-recognition.js"></script>
18
+ <script type="module" src="./face-detector.js"></script>
19
+ <script type="module" src="./barcode-detector.js"></script>
20
+ <script type="module" src="./face-landmark.js"></script>
21
+ <script type="module" src="./pose-landmark.js"></script>
22
+ <script type="module" src="./object-detection.js"></script>
23
+ <script type="module" src="./image-to-text.js"></script>
24
+ <script type="module" src="./image-upscale.js"></script>
25
+ <script type="module" src="./depth-estimation.js"></script>
26
+ <script type="module" src="./yolo.js"></script>
27
+ <!-- <script type="module" src="./yolo-tiny.js"></script> -->
28
+ <script type="module" src="./image-segmentation.js"></script>
29
+ </head>
30
+ <style>
31
+ img,
32
+ canvas {
33
+ width: 100%;
34
+ height: 100%;
35
+ }
36
+
37
+ #generatedImage {
38
+ width: 300;
39
+ height: 300;
40
+ }
41
+
42
+ #imageContainer {
43
+ position: relative;
44
+ display: inline-block;
45
+ width: 300;
46
+ height: 300;
47
+ aspect-ratio: 1;
48
+ }
49
+ #imageOverlay {
50
+ position: absolute;
51
+ top: 0;
52
+ left: 0;
53
+ pointer-events: none;
54
+ }
55
+ </style>
56
+ <body>
57
+ <nav>
58
+ <a href="../../">home</a>
59
+ </nav>
60
+
61
+ <h1>Camera | BrilliantSole JavaScript SDK</h1>
62
+
63
+ <button id="toggleConnection">connect</button>
64
+ <label>
65
+ model type
66
+ <select id="modelType">
67
+ <optgroup label="model type">
68
+ <option>none</option>
69
+ </optgroup>
70
+ </select>
71
+ </label>
72
+ <br />
73
+
74
+ <label><b>camera status:</b> <span id="cameraStatus"></span></label>
75
+ <br />
76
+
77
+ <label>auto picture: <input type="checkbox" id="autoPicture" /> </label>
78
+ <br />
79
+
80
+ <button disabled id="takePicture">take picture</button>
81
+ <progress value="0" id="cameraImageProgress"></progress>
82
+ <br />
83
+ <button disabled id="focusCamera">focus camera</button>
84
+ <br />
85
+ <button disabled id="sleepCamera">sleep camera</button>
86
+
87
+ <div style="display: flex; flex-direction: row; gap: 1rem">
88
+ <div>
89
+ <label>
90
+ <b>camera configuration: </b>
91
+ <pre id="cameraConfigurationPre"></pre>
92
+ </label>
93
+
94
+ <label>
95
+ take picture after update?
96
+ <input type="checkbox" id="takePictureAfterUpdate" />
97
+ </label>
98
+
99
+ <div id="cameraConfiguration">
100
+ <template id="cameraConfigurationTypeTemplate">
101
+ <div class="cameraConfigurationType">
102
+ <label>
103
+ <input class="value" type="range" value="" disabled />
104
+ <b class="type"></b> <span></span>
105
+ </label>
106
+ </div>
107
+ </template>
108
+ </div>
109
+ <label>
110
+ <b>white balance</b>
111
+ <input type="color" id="cameraWhiteBalance" disabled />
112
+ </label>
113
+ </div>
114
+ <div>
115
+ <div id="imageContainer">
116
+ <canvas width="300" height="300" id="imageOverlay"></canvas>
117
+ <img id="cameraImage" />
118
+ </div>
119
+ <canvas
120
+ display="none"
121
+ width="300"
122
+ height="300"
123
+ id="generatedImage"
124
+ ></canvas>
125
+ <pre id="modelResults"></pre>
126
+ </div>
127
+ </div>
128
+ </body>
129
+ </html>
@@ -0,0 +1,98 @@
1
+ import {
2
+ ObjectDetector,
3
+ FilesetResolver,
4
+ } from "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.2";
5
+
6
+ import { drawBox, registerModel } from "./utils.js";
7
+
8
+ let objectDetector = undefined;
9
+ let runningMode = "VIDEO";
10
+
11
+ registerModel(
12
+ "object detection",
13
+ () => {
14
+ if (!objectDetector) {
15
+ createObjectDetector();
16
+ }
17
+ },
18
+ async (image, canvas, context, mediaResultsElement) => {
19
+ if (!objectDetector) {
20
+ console.error("objectDetector not created yet");
21
+ return;
22
+ }
23
+
24
+ const results = objectDetector.detectForVideo(image, performance.now());
25
+ console.log("objectDetectorResults", results);
26
+
27
+ let categoriesStringObject = [];
28
+ results.detections.forEach((detection, index) => {
29
+ const { boundingBox, categories } = detection;
30
+ drawBox(boundingBox, image, canvas, context);
31
+ const category = categories[0];
32
+ if (category) {
33
+ const { score, categoryName } = category;
34
+ categoriesStringObject.push({ score, categoryName });
35
+ }
36
+ });
37
+
38
+ mediaResultsElement.textContent = JSON.stringify(
39
+ categoriesStringObject,
40
+ null,
41
+ 2
42
+ );
43
+ }
44
+ );
45
+
46
+ const createObjectDetector = async () => {
47
+ const vision = await FilesetResolver.forVisionTasks(
48
+ "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.2/wasm"
49
+ );
50
+ objectDetector = await ObjectDetector.createFromOptions(vision, {
51
+ baseOptions: {
52
+ modelAssetPath: `https://storage.googleapis.com/mediapipe-models/object_detector/efficientdet_lite0/float16/1/efficientdet_lite0.tflite`,
53
+ delegate: "GPU",
54
+ },
55
+ scoreThreshold: 0.5,
56
+ runningMode: runningMode,
57
+ });
58
+ console.log("created objectDetector", objectDetector);
59
+ };
60
+
61
+ const sampleResult = {
62
+ detections: [
63
+ {
64
+ categories: [
65
+ {
66
+ score: 0.8662109375,
67
+ index: -1,
68
+ categoryName: "clock",
69
+ displayName: "",
70
+ },
71
+ ],
72
+ keypoints: [],
73
+ boundingBox: {
74
+ originX: 333,
75
+ originY: 309,
76
+ width: 244,
77
+ height: 240,
78
+ },
79
+ },
80
+ {
81
+ categories: [
82
+ {
83
+ score: 0.53125,
84
+ index: -1,
85
+ categoryName: "person",
86
+ displayName: "",
87
+ },
88
+ ],
89
+ keypoints: [],
90
+ boundingBox: {
91
+ originX: 43,
92
+ originY: 572,
93
+ width: 189,
94
+ height: 146,
95
+ },
96
+ },
97
+ ],
98
+ };
@@ -0,0 +1,60 @@
1
+ import {
2
+ PoseLandmarker,
3
+ FilesetResolver,
4
+ DrawingUtils,
5
+ } from "https://cdn.skypack.dev/@mediapipe/tasks-vision@0.10.0";
6
+
7
+ import { registerModel } from "./utils.js";
8
+
9
+ let poseLandmarker = undefined;
10
+ let drawingUtils;
11
+ let runningMode = "VIDEO";
12
+
13
+ registerModel(
14
+ "pose landmark",
15
+ () => {
16
+ if (!poseLandmarker) {
17
+ createPoseLandmarker();
18
+ }
19
+ },
20
+ async (image, canvas, context) => {
21
+ if (!poseLandmarker) {
22
+ console.error("poseLandmarker not created yet");
23
+ return;
24
+ }
25
+
26
+ const result = poseLandmarker.detectForVideo(image, performance.now());
27
+ console.log("poseLandmarkerResult", result);
28
+
29
+ drawingUtils = drawingUtils || new DrawingUtils(context);
30
+
31
+ context.save();
32
+ context.clearRect(0, 0, canvas.width, canvas.height);
33
+ for (const landmark of result.landmarks) {
34
+ drawingUtils.drawLandmarks(landmark, {
35
+ radius: (data) => DrawingUtils.lerp(data.from.z, -0.15, 0.1, 2, 1),
36
+ });
37
+ drawingUtils.drawConnectors(landmark, PoseLandmarker.POSE_CONNECTIONS);
38
+ }
39
+ context.restore();
40
+ }
41
+ );
42
+
43
+ const createPoseLandmarker = async () => {
44
+ const vision = await FilesetResolver.forVisionTasks(
45
+ "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.0/wasm"
46
+ );
47
+ poseLandmarker = await PoseLandmarker.createFromOptions(vision, {
48
+ baseOptions: {
49
+ modelAssetPath: `https://storage.googleapis.com/mediapipe-models/pose_landmarker/pose_landmarker_lite/float16/1/pose_landmarker_lite.task`,
50
+ delegate: "GPU",
51
+ },
52
+ runningMode: runningMode,
53
+ numPoses: 1,
54
+ minPoseDetectionConfidence: 0.5,
55
+ minPosePresenceConfidence: 0.5,
56
+ minTrackingConfidence: 0.5,
57
+ outputSegmentationMasks: false,
58
+ });
59
+ console.log("created poseLandmarker", poseLandmarker);
60
+ };