rtmlib-ts 0.0.2
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/.gitattributes +1 -0
- package/README.md +202 -0
- package/dist/core/base.d.ts +20 -0
- package/dist/core/base.d.ts.map +1 -0
- package/dist/core/base.js +40 -0
- package/dist/core/file.d.ts +11 -0
- package/dist/core/file.d.ts.map +1 -0
- package/dist/core/file.js +111 -0
- package/dist/core/modelCache.d.ts +35 -0
- package/dist/core/modelCache.d.ts.map +1 -0
- package/dist/core/modelCache.js +161 -0
- package/dist/core/posePostprocessing.d.ts +12 -0
- package/dist/core/posePostprocessing.d.ts.map +1 -0
- package/dist/core/posePostprocessing.js +76 -0
- package/dist/core/postprocessing.d.ts +10 -0
- package/dist/core/postprocessing.d.ts.map +1 -0
- package/dist/core/postprocessing.js +70 -0
- package/dist/core/preprocessing.d.ts +14 -0
- package/dist/core/preprocessing.d.ts.map +1 -0
- package/dist/core/preprocessing.js +79 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/models/rtmpose.d.ts +25 -0
- package/dist/models/rtmpose.d.ts.map +1 -0
- package/dist/models/rtmpose.js +185 -0
- package/dist/models/rtmpose3d.d.ts +28 -0
- package/dist/models/rtmpose3d.d.ts.map +1 -0
- package/dist/models/rtmpose3d.js +184 -0
- package/dist/models/yolo12.d.ts +23 -0
- package/dist/models/yolo12.d.ts.map +1 -0
- package/dist/models/yolo12.js +165 -0
- package/dist/models/yolox.d.ts +18 -0
- package/dist/models/yolox.d.ts.map +1 -0
- package/dist/models/yolox.js +167 -0
- package/dist/solution/animalDetector.d.ts +229 -0
- package/dist/solution/animalDetector.d.ts.map +1 -0
- package/dist/solution/animalDetector.js +663 -0
- package/dist/solution/body.d.ts +16 -0
- package/dist/solution/body.d.ts.map +1 -0
- package/dist/solution/body.js +52 -0
- package/dist/solution/bodyWithFeet.d.ts +16 -0
- package/dist/solution/bodyWithFeet.d.ts.map +1 -0
- package/dist/solution/bodyWithFeet.js +52 -0
- package/dist/solution/customDetector.d.ts +137 -0
- package/dist/solution/customDetector.d.ts.map +1 -0
- package/dist/solution/customDetector.js +342 -0
- package/dist/solution/hand.d.ts +14 -0
- package/dist/solution/hand.d.ts.map +1 -0
- package/dist/solution/hand.js +20 -0
- package/dist/solution/index.d.ts +10 -0
- package/dist/solution/index.d.ts.map +1 -0
- package/dist/solution/index.js +9 -0
- package/dist/solution/objectDetector.d.ts +172 -0
- package/dist/solution/objectDetector.d.ts.map +1 -0
- package/dist/solution/objectDetector.js +606 -0
- package/dist/solution/pose3dDetector.d.ts +145 -0
- package/dist/solution/pose3dDetector.d.ts.map +1 -0
- package/dist/solution/pose3dDetector.js +611 -0
- package/dist/solution/poseDetector.d.ts +198 -0
- package/dist/solution/poseDetector.d.ts.map +1 -0
- package/dist/solution/poseDetector.js +622 -0
- package/dist/solution/poseTracker.d.ts +22 -0
- package/dist/solution/poseTracker.d.ts.map +1 -0
- package/dist/solution/poseTracker.js +106 -0
- package/dist/solution/wholebody.d.ts +19 -0
- package/dist/solution/wholebody.d.ts.map +1 -0
- package/dist/solution/wholebody.js +82 -0
- package/dist/solution/wholebody3d.d.ts +22 -0
- package/dist/solution/wholebody3d.d.ts.map +1 -0
- package/dist/solution/wholebody3d.js +75 -0
- package/dist/types/index.d.ts +52 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/visualization/draw.d.ts +57 -0
- package/dist/visualization/draw.d.ts.map +1 -0
- package/dist/visualization/draw.js +400 -0
- package/dist/visualization/skeleton/coco133.d.ts +350 -0
- package/dist/visualization/skeleton/coco133.d.ts.map +1 -0
- package/dist/visualization/skeleton/coco133.js +120 -0
- package/dist/visualization/skeleton/coco17.d.ts +180 -0
- package/dist/visualization/skeleton/coco17.d.ts.map +1 -0
- package/dist/visualization/skeleton/coco17.js +48 -0
- package/dist/visualization/skeleton/halpe26.d.ts +278 -0
- package/dist/visualization/skeleton/halpe26.d.ts.map +1 -0
- package/dist/visualization/skeleton/halpe26.js +70 -0
- package/dist/visualization/skeleton/hand21.d.ts +196 -0
- package/dist/visualization/skeleton/hand21.d.ts.map +1 -0
- package/dist/visualization/skeleton/hand21.js +51 -0
- package/dist/visualization/skeleton/index.d.ts +10 -0
- package/dist/visualization/skeleton/index.d.ts.map +1 -0
- package/dist/visualization/skeleton/index.js +9 -0
- package/dist/visualization/skeleton/openpose134.d.ts +357 -0
- package/dist/visualization/skeleton/openpose134.d.ts.map +1 -0
- package/dist/visualization/skeleton/openpose134.js +116 -0
- package/dist/visualization/skeleton/openpose18.d.ts +177 -0
- package/dist/visualization/skeleton/openpose18.d.ts.map +1 -0
- package/dist/visualization/skeleton/openpose18.js +47 -0
- package/docs/ANIMAL_DETECTOR.md +450 -0
- package/docs/CUSTOM_DETECTOR.md +568 -0
- package/docs/OBJECT_DETECTOR.md +373 -0
- package/docs/POSE3D_DETECTOR.md +458 -0
- package/docs/POSE_DETECTOR.md +442 -0
- package/examples/README.md +119 -0
- package/examples/index.html +746 -0
- package/package.json +51 -0
- package/playground/README.md +114 -0
- package/playground/app/favicon.ico +0 -0
- package/playground/app/globals.css +17 -0
- package/playground/app/layout.tsx +19 -0
- package/playground/app/page.tsx +1338 -0
- package/playground/eslint.config.mjs +18 -0
- package/playground/next.config.ts +34 -0
- package/playground/package-lock.json +6723 -0
- package/playground/package.json +27 -0
- package/playground/postcss.config.mjs +7 -0
- package/playground/tsconfig.json +34 -0
- package/src/core/base.ts +66 -0
- package/src/core/file.ts +141 -0
- package/src/core/modelCache.ts +189 -0
- package/src/core/posePostprocessing.ts +91 -0
- package/src/core/postprocessing.ts +93 -0
- package/src/core/preprocessing.ts +127 -0
- package/src/index.ts +69 -0
- package/src/models/rtmpose.ts +265 -0
- package/src/models/rtmpose3d.ts +289 -0
- package/src/models/yolo12.ts +220 -0
- package/src/models/yolox.ts +214 -0
- package/src/solution/animalDetector.ts +955 -0
- package/src/solution/body.ts +89 -0
- package/src/solution/bodyWithFeet.ts +89 -0
- package/src/solution/customDetector.ts +474 -0
- package/src/solution/hand.ts +52 -0
- package/src/solution/index.ts +10 -0
- package/src/solution/objectDetector.ts +816 -0
- package/src/solution/pose3dDetector.ts +890 -0
- package/src/solution/poseDetector.ts +892 -0
- package/src/solution/poseTracker.ts +172 -0
- package/src/solution/wholebody.ts +130 -0
- package/src/solution/wholebody3d.ts +125 -0
- package/src/types/index.ts +62 -0
- package/src/visualization/draw.ts +543 -0
- package/src/visualization/skeleton/coco133.ts +131 -0
- package/src/visualization/skeleton/coco17.ts +49 -0
- package/src/visualization/skeleton/halpe26.ts +71 -0
- package/src/visualization/skeleton/hand21.ts +52 -0
- package/src/visualization/skeleton/index.ts +10 -0
- package/src/visualization/skeleton/openpose134.ts +125 -0
- package/src/visualization/skeleton/openpose18.ts +48 -0
- package/tsconfig.json +32 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PoseDetector - Unified API for person detection and pose estimation
|
|
3
|
+
* Combines YOLO12 detector with RTMW pose model in a single optimized interface
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* // Initialize with default models (from HuggingFace)
|
|
8
|
+
* const detector = new PoseDetector();
|
|
9
|
+
* await detector.init();
|
|
10
|
+
*
|
|
11
|
+
* // Or with custom models
|
|
12
|
+
* const detector = new PoseDetector({
|
|
13
|
+
* detModel: 'models/yolov12n.onnx',
|
|
14
|
+
* poseModel: 'models/rtmlib/end2end.onnx',
|
|
15
|
+
* });
|
|
16
|
+
* await detector.init();
|
|
17
|
+
*
|
|
18
|
+
* // From canvas
|
|
19
|
+
* const results = await detector.detectFromCanvas(canvas);
|
|
20
|
+
*
|
|
21
|
+
* // From video element
|
|
22
|
+
* const results = await detector.detectFromVideo(videoElement);
|
|
23
|
+
*
|
|
24
|
+
* // From raw image data
|
|
25
|
+
* const results = await detector.detect(imageData, width, height);
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* Configuration options for PoseDetector
|
|
30
|
+
*/
|
|
31
|
+
export interface PoseDetectorConfig {
|
|
32
|
+
/** Path to YOLO12 detection model (optional - uses default from HuggingFace if not specified) */
|
|
33
|
+
detModel?: string;
|
|
34
|
+
/** Path to RTMW pose estimation model (optional - uses default from HuggingFace if not specified) */
|
|
35
|
+
poseModel?: string;
|
|
36
|
+
/** Detection input size (default: [416, 416]) */
|
|
37
|
+
detInputSize?: [number, number];
|
|
38
|
+
/** Pose input size (default: [384, 288]) */
|
|
39
|
+
poseInputSize?: [number, number];
|
|
40
|
+
/** Detection confidence threshold (default: 0.5) */
|
|
41
|
+
detConfidence?: number;
|
|
42
|
+
/** NMS IoU threshold (default: 0.45) */
|
|
43
|
+
nmsThreshold?: number;
|
|
44
|
+
/** Pose keypoint confidence threshold (default: 0.3) */
|
|
45
|
+
poseConfidence?: number;
|
|
46
|
+
/** Execution backend (default: 'wasm') */
|
|
47
|
+
backend?: 'wasm' | 'webgpu';
|
|
48
|
+
/** Enable model caching (default: true) */
|
|
49
|
+
cache?: boolean;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Detected person with bounding box and keypoints
|
|
53
|
+
*/
|
|
54
|
+
export interface Person {
|
|
55
|
+
/** Bounding box coordinates */
|
|
56
|
+
bbox: {
|
|
57
|
+
x1: number;
|
|
58
|
+
y1: number;
|
|
59
|
+
x2: number;
|
|
60
|
+
y2: number;
|
|
61
|
+
confidence: number;
|
|
62
|
+
};
|
|
63
|
+
/** 17 COCO keypoints coordinates */
|
|
64
|
+
keypoints: Keypoint[];
|
|
65
|
+
/** Keypoint scores (0-1) */
|
|
66
|
+
scores: number[];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Single keypoint with coordinates and visibility
|
|
70
|
+
*/
|
|
71
|
+
export interface Keypoint {
|
|
72
|
+
x: number;
|
|
73
|
+
y: number;
|
|
74
|
+
score: number;
|
|
75
|
+
visible: boolean;
|
|
76
|
+
name: string;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Detection statistics
|
|
80
|
+
*/
|
|
81
|
+
export interface PoseStats {
|
|
82
|
+
/** Number of detected people */
|
|
83
|
+
personCount: number;
|
|
84
|
+
/** Detection inference time (ms) */
|
|
85
|
+
detTime: number;
|
|
86
|
+
/** Pose estimation time (ms) */
|
|
87
|
+
poseTime: number;
|
|
88
|
+
/** Total processing time (ms) */
|
|
89
|
+
totalTime: number;
|
|
90
|
+
}
|
|
91
|
+
export declare class PoseDetector {
|
|
92
|
+
private config;
|
|
93
|
+
private detSession;
|
|
94
|
+
private poseSession;
|
|
95
|
+
private initialized;
|
|
96
|
+
private canvas;
|
|
97
|
+
private ctx;
|
|
98
|
+
private poseCanvas;
|
|
99
|
+
private poseCtx;
|
|
100
|
+
private poseTensorBuffer;
|
|
101
|
+
private detInputSize;
|
|
102
|
+
private poseInputSize;
|
|
103
|
+
constructor(config: PoseDetectorConfig);
|
|
104
|
+
/**
|
|
105
|
+
* Initialize both detection and pose models with pre-allocated resources
|
|
106
|
+
*/
|
|
107
|
+
init(): Promise<void>;
|
|
108
|
+
/**
|
|
109
|
+
* Detect poses from HTMLCanvasElement
|
|
110
|
+
* @param canvas - Canvas element containing the image
|
|
111
|
+
* @returns Array of detected people with keypoints
|
|
112
|
+
*/
|
|
113
|
+
detectFromCanvas(canvas: HTMLCanvasElement): Promise<Person[]>;
|
|
114
|
+
/**
|
|
115
|
+
* Detect poses from HTMLVideoElement
|
|
116
|
+
* @param video - Video element to capture frame from
|
|
117
|
+
* @param targetCanvas - Optional canvas for frame extraction (creates one if not provided)
|
|
118
|
+
* @returns Array of detected people with keypoints
|
|
119
|
+
*/
|
|
120
|
+
detectFromVideo(video: HTMLVideoElement, targetCanvas?: HTMLCanvasElement): Promise<Person[]>;
|
|
121
|
+
/**
|
|
122
|
+
* Detect poses from HTMLImageElement
|
|
123
|
+
* @param image - Image element to process
|
|
124
|
+
* @param targetCanvas - Optional canvas for image extraction (creates one if not provided)
|
|
125
|
+
* @returns Array of detected people with keypoints
|
|
126
|
+
*/
|
|
127
|
+
detectFromImage(image: HTMLImageElement, targetCanvas?: HTMLCanvasElement): Promise<Person[]>;
|
|
128
|
+
/**
|
|
129
|
+
* Detect poses from ImageBitmap (efficient for blob/file uploads)
|
|
130
|
+
* @param bitmap - ImageBitmap to process
|
|
131
|
+
* @param targetCanvas - Optional canvas for bitmap extraction (creates one if not provided)
|
|
132
|
+
* @returns Array of detected people with keypoints
|
|
133
|
+
*/
|
|
134
|
+
detectFromBitmap(bitmap: ImageBitmap, targetCanvas?: HTMLCanvasElement): Promise<Person[]>;
|
|
135
|
+
/**
|
|
136
|
+
* Detect poses from File (for file input uploads)
|
|
137
|
+
* @param file - File object from input element
|
|
138
|
+
* @param targetCanvas - Optional canvas for image extraction (creates one if not provided)
|
|
139
|
+
* @returns Array of detected people with keypoints
|
|
140
|
+
*/
|
|
141
|
+
detectFromFile(file: File, targetCanvas?: HTMLCanvasElement): Promise<Person[]>;
|
|
142
|
+
/**
|
|
143
|
+
* Detect poses from Blob (for camera capture or downloads)
|
|
144
|
+
* @param blob - Blob object to process
|
|
145
|
+
* @param targetCanvas - Optional canvas for image extraction (creates one if not provided)
|
|
146
|
+
* @returns Array of detected people with keypoints
|
|
147
|
+
*/
|
|
148
|
+
detectFromBlob(blob: Blob, targetCanvas?: HTMLCanvasElement): Promise<Person[]>;
|
|
149
|
+
/**
|
|
150
|
+
* Detect people and estimate poses in a single call
|
|
151
|
+
* @param imageData - Image data (Uint8Array RGB/RGBA)
|
|
152
|
+
* @param width - Image width
|
|
153
|
+
* @param height - Image height
|
|
154
|
+
* @returns Array of detected people with keypoints
|
|
155
|
+
*/
|
|
156
|
+
detect(imageData: Uint8Array, width: number, height: number): Promise<Person[]>;
|
|
157
|
+
/**
|
|
158
|
+
* Get detection and pose statistics from last call
|
|
159
|
+
*/
|
|
160
|
+
getStats(): PoseStats | null;
|
|
161
|
+
/**
|
|
162
|
+
* Detect people using YOLO12
|
|
163
|
+
*/
|
|
164
|
+
private detectPeople;
|
|
165
|
+
/**
|
|
166
|
+
* Estimate pose for a single person
|
|
167
|
+
*/
|
|
168
|
+
private estimatePose;
|
|
169
|
+
/**
|
|
170
|
+
* YOLO preprocessing with letterbox
|
|
171
|
+
*/
|
|
172
|
+
private preprocessYOLO;
|
|
173
|
+
/**
|
|
174
|
+
* YOLO postprocessing with NMS
|
|
175
|
+
*/
|
|
176
|
+
private postprocessYOLO;
|
|
177
|
+
/**
|
|
178
|
+
* Pose preprocessing with affine crop
|
|
179
|
+
*/
|
|
180
|
+
private preprocessPose;
|
|
181
|
+
/**
|
|
182
|
+
* Pose postprocessing with SimCC decoding
|
|
183
|
+
*/
|
|
184
|
+
private postprocessPose;
|
|
185
|
+
/**
|
|
186
|
+
* Non-Maximum Suppression
|
|
187
|
+
*/
|
|
188
|
+
private applyNMS;
|
|
189
|
+
/**
|
|
190
|
+
* Calculate IoU between two boxes
|
|
191
|
+
*/
|
|
192
|
+
private calculateIoU;
|
|
193
|
+
/**
|
|
194
|
+
* Dispose resources
|
|
195
|
+
*/
|
|
196
|
+
dispose(): void;
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=poseDetector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poseDetector.d.ts","sourceRoot":"","sources":["../../src/solution/poseDetector.ts"],"names":[],"mappings":"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"}
|