@pose-tracker/pose-estimation-web-react 0.1.0 → 0.2.0
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.
- package/dist/index.cjs +34 -1
- package/dist/index.d.cts +16 -3
- package/dist/index.d.ts +16 -3
- package/dist/index.js +31 -2
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -76,6 +76,12 @@ function PoseTrackerProvider({
|
|
|
76
76
|
(model, modelUrl) => client.setModel(model, modelUrl),
|
|
77
77
|
[client]
|
|
78
78
|
);
|
|
79
|
+
const setSource = react.useCallback(
|
|
80
|
+
(...args) => client.setSource(...args),
|
|
81
|
+
[client]
|
|
82
|
+
);
|
|
83
|
+
const analyze = react.useCallback(() => client.analyze(), [client]);
|
|
84
|
+
const getSource = react.useCallback(() => client.getSource(), [client]);
|
|
79
85
|
const getAvailableExercises = react.useCallback(() => client.getAvailableExercises(), [client]);
|
|
80
86
|
const getAvailableCustomExercises = react.useCallback(
|
|
81
87
|
() => client.getAvailableCustomExercises(),
|
|
@@ -106,6 +112,9 @@ function PoseTrackerProvider({
|
|
|
106
112
|
startExercise,
|
|
107
113
|
stopExercise,
|
|
108
114
|
setModel,
|
|
115
|
+
setSource,
|
|
116
|
+
analyze,
|
|
117
|
+
getSource,
|
|
109
118
|
getAvailableExercises,
|
|
110
119
|
getAvailableCustomExercises,
|
|
111
120
|
addEventListener,
|
|
@@ -127,6 +136,9 @@ function PoseTrackerProvider({
|
|
|
127
136
|
startExercise,
|
|
128
137
|
stopExercise,
|
|
129
138
|
setModel,
|
|
139
|
+
setSource,
|
|
140
|
+
analyze,
|
|
141
|
+
getSource,
|
|
130
142
|
getAvailableExercises,
|
|
131
143
|
getAvailableCustomExercises,
|
|
132
144
|
addEventListener,
|
|
@@ -150,6 +162,9 @@ function PoseCamera({
|
|
|
150
162
|
style,
|
|
151
163
|
className,
|
|
152
164
|
position,
|
|
165
|
+
source,
|
|
166
|
+
sourceUrl,
|
|
167
|
+
sourceFile,
|
|
153
168
|
drawSkeleton,
|
|
154
169
|
drawPlacementBox,
|
|
155
170
|
placementPaddingPercent,
|
|
@@ -170,6 +185,9 @@ function PoseCamera({
|
|
|
170
185
|
if (!el) return;
|
|
171
186
|
client.updateOptions({
|
|
172
187
|
...position ? { position } : {},
|
|
188
|
+
...source !== void 0 ? { source } : {},
|
|
189
|
+
...sourceUrl !== void 0 ? { sourceUrl } : {},
|
|
190
|
+
...sourceFile !== void 0 ? { sourceFile } : {},
|
|
173
191
|
...typeof drawSkeleton === "boolean" ? { drawSkeleton } : {},
|
|
174
192
|
...typeof drawPlacementBox === "boolean" ? { drawPlacementBox } : {},
|
|
175
193
|
...typeof placementPaddingPercent === "number" ? { placementPaddingPercent } : {},
|
|
@@ -184,7 +202,13 @@ function PoseCamera({
|
|
|
184
202
|
const shouldStart = autoStartProp ?? providerAutoStart;
|
|
185
203
|
if (shouldStart && !startedRef.current) {
|
|
186
204
|
startedRef.current = true;
|
|
187
|
-
|
|
205
|
+
const boot = async () => {
|
|
206
|
+
if (source !== void 0) {
|
|
207
|
+
await client.setSource(source, { sourceUrl, sourceFile });
|
|
208
|
+
}
|
|
209
|
+
await client.start();
|
|
210
|
+
};
|
|
211
|
+
boot().catch(() => {
|
|
188
212
|
});
|
|
189
213
|
}
|
|
190
214
|
return () => {
|
|
@@ -193,6 +217,11 @@ function PoseCamera({
|
|
|
193
217
|
_registerMountHost(null);
|
|
194
218
|
};
|
|
195
219
|
}, [client]);
|
|
220
|
+
react.useEffect(() => {
|
|
221
|
+
if (!startedRef.current || source === void 0) return;
|
|
222
|
+
void client.setSource(source, { sourceUrl, sourceFile }).catch(() => {
|
|
223
|
+
});
|
|
224
|
+
}, [client, source, sourceUrl, sourceFile]);
|
|
196
225
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
197
226
|
"div",
|
|
198
227
|
{
|
|
@@ -320,6 +349,10 @@ Object.defineProperty(exports, "createPoseTracker", {
|
|
|
320
349
|
enumerable: true,
|
|
321
350
|
get: function () { return poseEstimationWeb.createPoseTracker; }
|
|
322
351
|
});
|
|
352
|
+
Object.defineProperty(exports, "normalizePoseSource", {
|
|
353
|
+
enumerable: true,
|
|
354
|
+
get: function () { return poseEstimationWeb.normalizePoseSource; }
|
|
355
|
+
});
|
|
323
356
|
Object.defineProperty(exports, "resolvePoseModel", {
|
|
324
357
|
enumerable: true,
|
|
325
358
|
get: function () { return poseEstimationWeb.resolvePoseModel; }
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { PoseTrackerClient, PoseTrackerStatus, PoseTrackerMode, ErrorEvent, SdkManifest, ExerciseConfig, PreloadOptions, StartExerciseOptions, PoseTrackerClientOptions, PoseTrackerEventListener, ClassicNativeMessage, SkeletonDefinition, PoseTrackerCallbacks } from '@pose-tracker/pose-estimation-web';
|
|
2
|
-
export { COCO_KEYPOINT_NAMES, ColdStartMode, CounterEvent, DEFAULT_LOADING_TEXT, DEFAULT_MOVENET_LIGHTNING_URL, ErrorEvent, ExerciseConfig, InitializationEvent, Keypoint, KeypointsEvent, Pose, PoseModelAlias, PoseTracker, PoseTrackerCallbacks, PoseTrackerClient, PoseTrackerClientOptions, PoseTrackerOptions, PostureEvent, PreloadOptions, SDK_NAME, SDK_VERSION, SdkManifest, StartExerciseOptions, createPoseTracker, resolvePoseModel, shouldShowWatermark } from '@pose-tracker/pose-estimation-web';
|
|
1
|
+
import { PoseTrackerClient, PoseTrackerStatus, PoseTrackerMode, ErrorEvent, SdkManifest, ExerciseConfig, PreloadOptions, StartExerciseOptions, PoseTrackerClientOptions, PoseTrackerEventListener, ClassicNativeMessage, PoseSource, PoseSourceType, SkeletonDefinition, PoseTrackerCallbacks } from '@pose-tracker/pose-estimation-web';
|
|
2
|
+
export { COCO_KEYPOINT_NAMES, ColdStartMode, CounterEvent, DEFAULT_LOADING_TEXT, DEFAULT_MOVENET_LIGHTNING_URL, ErrorEvent, ExerciseConfig, InitializationEvent, Keypoint, KeypointsEvent, Pose, PoseModelAlias, PoseSource, PoseSourceType, PoseTracker, PoseTrackerCallbacks, PoseTrackerClient, PoseTrackerClientOptions, PoseTrackerOptions, PostureEvent, PreloadOptions, SDK_NAME, SDK_VERSION, SdkManifest, StartExerciseOptions, createPoseTracker, normalizePoseSource, resolvePoseModel, shouldShowWatermark } from '@pose-tracker/pose-estimation-web';
|
|
3
3
|
import React from 'react';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -20,6 +20,9 @@ interface PoseTrackerContextValue {
|
|
|
20
20
|
startExercise: (exerciseId: string, options?: StartExerciseOptions) => void;
|
|
21
21
|
stopExercise: () => void;
|
|
22
22
|
setModel: (model?: PoseTrackerClientOptions['model'], modelUrl?: string) => Promise<void>;
|
|
23
|
+
setSource: PoseTrackerClient['setSource'];
|
|
24
|
+
analyze: PoseTrackerClient['analyze'];
|
|
25
|
+
getSource: PoseTrackerClient['getSource'];
|
|
23
26
|
getAvailableExercises: () => ExerciseConfig[];
|
|
24
27
|
getAvailableCustomExercises: () => ReturnType<PoseTrackerClient['getAvailableCustomExercises']>;
|
|
25
28
|
addEventListener: (listener: PoseTrackerEventListener) => () => void;
|
|
@@ -51,6 +54,16 @@ interface PoseCameraProps {
|
|
|
51
54
|
className?: string;
|
|
52
55
|
/** 'front' | 'back' — mapped to getUserMedia facingMode. Default front. */
|
|
53
56
|
position?: 'front' | 'back';
|
|
57
|
+
/**
|
|
58
|
+
* Input mode. Default `camera`.
|
|
59
|
+
* Pass a full {@link PoseSource} or `'camera' | 'video' | 'image'` with
|
|
60
|
+
* `sourceUrl` / `sourceFile`.
|
|
61
|
+
*/
|
|
62
|
+
source?: PoseSource | PoseSourceType;
|
|
63
|
+
/** URL / object URL for `source: 'video' | 'image'`. */
|
|
64
|
+
sourceUrl?: string;
|
|
65
|
+
/** File/Blob for `source: 'video' | 'image'`. */
|
|
66
|
+
sourceFile?: File | Blob;
|
|
54
67
|
/** Draw navy/gold skeleton overlay. Default true. */
|
|
55
68
|
drawSkeleton?: boolean;
|
|
56
69
|
/** Placement guide while posture.ready === false. Default true. */
|
|
@@ -78,7 +91,7 @@ interface PoseCameraProps {
|
|
|
78
91
|
* Browser camera + canvas overlay (web equivalent of RN `WebViewPoseView`).
|
|
79
92
|
* Must be rendered under {@link PoseTrackerProvider}.
|
|
80
93
|
*/
|
|
81
|
-
declare function PoseCamera({ style, className, position, drawSkeleton, drawPlacementBox, placementPaddingPercent, coldStart, loadingText, showWatermark, skeletonDef, skeletonUuid, debugHud, autoStart: autoStartProp, }: PoseCameraProps): React.JSX.Element;
|
|
94
|
+
declare function PoseCamera({ style, className, position, source, sourceUrl, sourceFile, drawSkeleton, drawPlacementBox, placementPaddingPercent, coldStart, loadingText, showWatermark, skeletonDef, skeletonUuid, debugHud, autoStart: autoStartProp, }: PoseCameraProps): React.JSX.Element;
|
|
82
95
|
|
|
83
96
|
/**
|
|
84
97
|
* Access the PoseTracker pipeline and subscribe to typed events (RN light parity).
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { PoseTrackerClient, PoseTrackerStatus, PoseTrackerMode, ErrorEvent, SdkManifest, ExerciseConfig, PreloadOptions, StartExerciseOptions, PoseTrackerClientOptions, PoseTrackerEventListener, ClassicNativeMessage, SkeletonDefinition, PoseTrackerCallbacks } from '@pose-tracker/pose-estimation-web';
|
|
2
|
-
export { COCO_KEYPOINT_NAMES, ColdStartMode, CounterEvent, DEFAULT_LOADING_TEXT, DEFAULT_MOVENET_LIGHTNING_URL, ErrorEvent, ExerciseConfig, InitializationEvent, Keypoint, KeypointsEvent, Pose, PoseModelAlias, PoseTracker, PoseTrackerCallbacks, PoseTrackerClient, PoseTrackerClientOptions, PoseTrackerOptions, PostureEvent, PreloadOptions, SDK_NAME, SDK_VERSION, SdkManifest, StartExerciseOptions, createPoseTracker, resolvePoseModel, shouldShowWatermark } from '@pose-tracker/pose-estimation-web';
|
|
1
|
+
import { PoseTrackerClient, PoseTrackerStatus, PoseTrackerMode, ErrorEvent, SdkManifest, ExerciseConfig, PreloadOptions, StartExerciseOptions, PoseTrackerClientOptions, PoseTrackerEventListener, ClassicNativeMessage, PoseSource, PoseSourceType, SkeletonDefinition, PoseTrackerCallbacks } from '@pose-tracker/pose-estimation-web';
|
|
2
|
+
export { COCO_KEYPOINT_NAMES, ColdStartMode, CounterEvent, DEFAULT_LOADING_TEXT, DEFAULT_MOVENET_LIGHTNING_URL, ErrorEvent, ExerciseConfig, InitializationEvent, Keypoint, KeypointsEvent, Pose, PoseModelAlias, PoseSource, PoseSourceType, PoseTracker, PoseTrackerCallbacks, PoseTrackerClient, PoseTrackerClientOptions, PoseTrackerOptions, PostureEvent, PreloadOptions, SDK_NAME, SDK_VERSION, SdkManifest, StartExerciseOptions, createPoseTracker, normalizePoseSource, resolvePoseModel, shouldShowWatermark } from '@pose-tracker/pose-estimation-web';
|
|
3
3
|
import React from 'react';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -20,6 +20,9 @@ interface PoseTrackerContextValue {
|
|
|
20
20
|
startExercise: (exerciseId: string, options?: StartExerciseOptions) => void;
|
|
21
21
|
stopExercise: () => void;
|
|
22
22
|
setModel: (model?: PoseTrackerClientOptions['model'], modelUrl?: string) => Promise<void>;
|
|
23
|
+
setSource: PoseTrackerClient['setSource'];
|
|
24
|
+
analyze: PoseTrackerClient['analyze'];
|
|
25
|
+
getSource: PoseTrackerClient['getSource'];
|
|
23
26
|
getAvailableExercises: () => ExerciseConfig[];
|
|
24
27
|
getAvailableCustomExercises: () => ReturnType<PoseTrackerClient['getAvailableCustomExercises']>;
|
|
25
28
|
addEventListener: (listener: PoseTrackerEventListener) => () => void;
|
|
@@ -51,6 +54,16 @@ interface PoseCameraProps {
|
|
|
51
54
|
className?: string;
|
|
52
55
|
/** 'front' | 'back' — mapped to getUserMedia facingMode. Default front. */
|
|
53
56
|
position?: 'front' | 'back';
|
|
57
|
+
/**
|
|
58
|
+
* Input mode. Default `camera`.
|
|
59
|
+
* Pass a full {@link PoseSource} or `'camera' | 'video' | 'image'` with
|
|
60
|
+
* `sourceUrl` / `sourceFile`.
|
|
61
|
+
*/
|
|
62
|
+
source?: PoseSource | PoseSourceType;
|
|
63
|
+
/** URL / object URL for `source: 'video' | 'image'`. */
|
|
64
|
+
sourceUrl?: string;
|
|
65
|
+
/** File/Blob for `source: 'video' | 'image'`. */
|
|
66
|
+
sourceFile?: File | Blob;
|
|
54
67
|
/** Draw navy/gold skeleton overlay. Default true. */
|
|
55
68
|
drawSkeleton?: boolean;
|
|
56
69
|
/** Placement guide while posture.ready === false. Default true. */
|
|
@@ -78,7 +91,7 @@ interface PoseCameraProps {
|
|
|
78
91
|
* Browser camera + canvas overlay (web equivalent of RN `WebViewPoseView`).
|
|
79
92
|
* Must be rendered under {@link PoseTrackerProvider}.
|
|
80
93
|
*/
|
|
81
|
-
declare function PoseCamera({ style, className, position, drawSkeleton, drawPlacementBox, placementPaddingPercent, coldStart, loadingText, showWatermark, skeletonDef, skeletonUuid, debugHud, autoStart: autoStartProp, }: PoseCameraProps): React.JSX.Element;
|
|
94
|
+
declare function PoseCamera({ style, className, position, source, sourceUrl, sourceFile, drawSkeleton, drawPlacementBox, placementPaddingPercent, coldStart, loadingText, showWatermark, skeletonDef, skeletonUuid, debugHud, autoStart: autoStartProp, }: PoseCameraProps): React.JSX.Element;
|
|
82
95
|
|
|
83
96
|
/**
|
|
84
97
|
* Access the PoseTracker pipeline and subscribe to typed events (RN light parity).
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createPoseTracker } from '@pose-tracker/pose-estimation-web';
|
|
2
|
-
export { COCO_KEYPOINT_NAMES, DEFAULT_LOADING_TEXT, DEFAULT_MOVENET_LIGHTNING_URL, PoseTrackerClient, SDK_NAME, SDK_VERSION, createPoseTracker, resolvePoseModel, shouldShowWatermark } from '@pose-tracker/pose-estimation-web';
|
|
2
|
+
export { COCO_KEYPOINT_NAMES, DEFAULT_LOADING_TEXT, DEFAULT_MOVENET_LIGHTNING_URL, PoseTrackerClient, SDK_NAME, SDK_VERSION, createPoseTracker, normalizePoseSource, resolvePoseModel, shouldShowWatermark } from '@pose-tracker/pose-estimation-web';
|
|
3
3
|
import { createContext, useMemo, useRef, useState, useEffect, useCallback, useContext } from 'react';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
@@ -75,6 +75,12 @@ function PoseTrackerProvider({
|
|
|
75
75
|
(model, modelUrl) => client.setModel(model, modelUrl),
|
|
76
76
|
[client]
|
|
77
77
|
);
|
|
78
|
+
const setSource = useCallback(
|
|
79
|
+
(...args) => client.setSource(...args),
|
|
80
|
+
[client]
|
|
81
|
+
);
|
|
82
|
+
const analyze = useCallback(() => client.analyze(), [client]);
|
|
83
|
+
const getSource = useCallback(() => client.getSource(), [client]);
|
|
78
84
|
const getAvailableExercises = useCallback(() => client.getAvailableExercises(), [client]);
|
|
79
85
|
const getAvailableCustomExercises = useCallback(
|
|
80
86
|
() => client.getAvailableCustomExercises(),
|
|
@@ -105,6 +111,9 @@ function PoseTrackerProvider({
|
|
|
105
111
|
startExercise,
|
|
106
112
|
stopExercise,
|
|
107
113
|
setModel,
|
|
114
|
+
setSource,
|
|
115
|
+
analyze,
|
|
116
|
+
getSource,
|
|
108
117
|
getAvailableExercises,
|
|
109
118
|
getAvailableCustomExercises,
|
|
110
119
|
addEventListener,
|
|
@@ -126,6 +135,9 @@ function PoseTrackerProvider({
|
|
|
126
135
|
startExercise,
|
|
127
136
|
stopExercise,
|
|
128
137
|
setModel,
|
|
138
|
+
setSource,
|
|
139
|
+
analyze,
|
|
140
|
+
getSource,
|
|
129
141
|
getAvailableExercises,
|
|
130
142
|
getAvailableCustomExercises,
|
|
131
143
|
addEventListener,
|
|
@@ -149,6 +161,9 @@ function PoseCamera({
|
|
|
149
161
|
style,
|
|
150
162
|
className,
|
|
151
163
|
position,
|
|
164
|
+
source,
|
|
165
|
+
sourceUrl,
|
|
166
|
+
sourceFile,
|
|
152
167
|
drawSkeleton,
|
|
153
168
|
drawPlacementBox,
|
|
154
169
|
placementPaddingPercent,
|
|
@@ -169,6 +184,9 @@ function PoseCamera({
|
|
|
169
184
|
if (!el) return;
|
|
170
185
|
client.updateOptions({
|
|
171
186
|
...position ? { position } : {},
|
|
187
|
+
...source !== void 0 ? { source } : {},
|
|
188
|
+
...sourceUrl !== void 0 ? { sourceUrl } : {},
|
|
189
|
+
...sourceFile !== void 0 ? { sourceFile } : {},
|
|
172
190
|
...typeof drawSkeleton === "boolean" ? { drawSkeleton } : {},
|
|
173
191
|
...typeof drawPlacementBox === "boolean" ? { drawPlacementBox } : {},
|
|
174
192
|
...typeof placementPaddingPercent === "number" ? { placementPaddingPercent } : {},
|
|
@@ -183,7 +201,13 @@ function PoseCamera({
|
|
|
183
201
|
const shouldStart = autoStartProp ?? providerAutoStart;
|
|
184
202
|
if (shouldStart && !startedRef.current) {
|
|
185
203
|
startedRef.current = true;
|
|
186
|
-
|
|
204
|
+
const boot = async () => {
|
|
205
|
+
if (source !== void 0) {
|
|
206
|
+
await client.setSource(source, { sourceUrl, sourceFile });
|
|
207
|
+
}
|
|
208
|
+
await client.start();
|
|
209
|
+
};
|
|
210
|
+
boot().catch(() => {
|
|
187
211
|
});
|
|
188
212
|
}
|
|
189
213
|
return () => {
|
|
@@ -192,6 +216,11 @@ function PoseCamera({
|
|
|
192
216
|
_registerMountHost(null);
|
|
193
217
|
};
|
|
194
218
|
}, [client]);
|
|
219
|
+
useEffect(() => {
|
|
220
|
+
if (!startedRef.current || source === void 0) return;
|
|
221
|
+
void client.setSource(source, { sourceUrl, sourceFile }).catch(() => {
|
|
222
|
+
});
|
|
223
|
+
}, [client, source, sourceUrl, sourceFile]);
|
|
195
224
|
return /* @__PURE__ */ jsx(
|
|
196
225
|
"div",
|
|
197
226
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pose-tracker/pose-estimation-web-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "PoseTracker React (web) pose estimation — thin wrapper over @pose-tracker/pose-estimation-web. Browser camera + canvas, not React Native.",
|
|
6
6
|
"type": "module",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"access": "public"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@pose-tracker/pose-estimation-web": "0.
|
|
57
|
+
"@pose-tracker/pose-estimation-web": "0.2.0"
|
|
58
58
|
},
|
|
59
59
|
"peerDependencies": {
|
|
60
60
|
"react": ">=18.0.0",
|