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.
Files changed (150) hide show
  1. package/.gitattributes +1 -0
  2. package/README.md +202 -0
  3. package/dist/core/base.d.ts +20 -0
  4. package/dist/core/base.d.ts.map +1 -0
  5. package/dist/core/base.js +40 -0
  6. package/dist/core/file.d.ts +11 -0
  7. package/dist/core/file.d.ts.map +1 -0
  8. package/dist/core/file.js +111 -0
  9. package/dist/core/modelCache.d.ts +35 -0
  10. package/dist/core/modelCache.d.ts.map +1 -0
  11. package/dist/core/modelCache.js +161 -0
  12. package/dist/core/posePostprocessing.d.ts +12 -0
  13. package/dist/core/posePostprocessing.d.ts.map +1 -0
  14. package/dist/core/posePostprocessing.js +76 -0
  15. package/dist/core/postprocessing.d.ts +10 -0
  16. package/dist/core/postprocessing.d.ts.map +1 -0
  17. package/dist/core/postprocessing.js +70 -0
  18. package/dist/core/preprocessing.d.ts +14 -0
  19. package/dist/core/preprocessing.d.ts.map +1 -0
  20. package/dist/core/preprocessing.js +79 -0
  21. package/dist/index.d.ts +27 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +31 -0
  24. package/dist/models/rtmpose.d.ts +25 -0
  25. package/dist/models/rtmpose.d.ts.map +1 -0
  26. package/dist/models/rtmpose.js +185 -0
  27. package/dist/models/rtmpose3d.d.ts +28 -0
  28. package/dist/models/rtmpose3d.d.ts.map +1 -0
  29. package/dist/models/rtmpose3d.js +184 -0
  30. package/dist/models/yolo12.d.ts +23 -0
  31. package/dist/models/yolo12.d.ts.map +1 -0
  32. package/dist/models/yolo12.js +165 -0
  33. package/dist/models/yolox.d.ts +18 -0
  34. package/dist/models/yolox.d.ts.map +1 -0
  35. package/dist/models/yolox.js +167 -0
  36. package/dist/solution/animalDetector.d.ts +229 -0
  37. package/dist/solution/animalDetector.d.ts.map +1 -0
  38. package/dist/solution/animalDetector.js +663 -0
  39. package/dist/solution/body.d.ts +16 -0
  40. package/dist/solution/body.d.ts.map +1 -0
  41. package/dist/solution/body.js +52 -0
  42. package/dist/solution/bodyWithFeet.d.ts +16 -0
  43. package/dist/solution/bodyWithFeet.d.ts.map +1 -0
  44. package/dist/solution/bodyWithFeet.js +52 -0
  45. package/dist/solution/customDetector.d.ts +137 -0
  46. package/dist/solution/customDetector.d.ts.map +1 -0
  47. package/dist/solution/customDetector.js +342 -0
  48. package/dist/solution/hand.d.ts +14 -0
  49. package/dist/solution/hand.d.ts.map +1 -0
  50. package/dist/solution/hand.js +20 -0
  51. package/dist/solution/index.d.ts +10 -0
  52. package/dist/solution/index.d.ts.map +1 -0
  53. package/dist/solution/index.js +9 -0
  54. package/dist/solution/objectDetector.d.ts +172 -0
  55. package/dist/solution/objectDetector.d.ts.map +1 -0
  56. package/dist/solution/objectDetector.js +606 -0
  57. package/dist/solution/pose3dDetector.d.ts +145 -0
  58. package/dist/solution/pose3dDetector.d.ts.map +1 -0
  59. package/dist/solution/pose3dDetector.js +611 -0
  60. package/dist/solution/poseDetector.d.ts +198 -0
  61. package/dist/solution/poseDetector.d.ts.map +1 -0
  62. package/dist/solution/poseDetector.js +622 -0
  63. package/dist/solution/poseTracker.d.ts +22 -0
  64. package/dist/solution/poseTracker.d.ts.map +1 -0
  65. package/dist/solution/poseTracker.js +106 -0
  66. package/dist/solution/wholebody.d.ts +19 -0
  67. package/dist/solution/wholebody.d.ts.map +1 -0
  68. package/dist/solution/wholebody.js +82 -0
  69. package/dist/solution/wholebody3d.d.ts +22 -0
  70. package/dist/solution/wholebody3d.d.ts.map +1 -0
  71. package/dist/solution/wholebody3d.js +75 -0
  72. package/dist/types/index.d.ts +52 -0
  73. package/dist/types/index.d.ts.map +1 -0
  74. package/dist/types/index.js +5 -0
  75. package/dist/visualization/draw.d.ts +57 -0
  76. package/dist/visualization/draw.d.ts.map +1 -0
  77. package/dist/visualization/draw.js +400 -0
  78. package/dist/visualization/skeleton/coco133.d.ts +350 -0
  79. package/dist/visualization/skeleton/coco133.d.ts.map +1 -0
  80. package/dist/visualization/skeleton/coco133.js +120 -0
  81. package/dist/visualization/skeleton/coco17.d.ts +180 -0
  82. package/dist/visualization/skeleton/coco17.d.ts.map +1 -0
  83. package/dist/visualization/skeleton/coco17.js +48 -0
  84. package/dist/visualization/skeleton/halpe26.d.ts +278 -0
  85. package/dist/visualization/skeleton/halpe26.d.ts.map +1 -0
  86. package/dist/visualization/skeleton/halpe26.js +70 -0
  87. package/dist/visualization/skeleton/hand21.d.ts +196 -0
  88. package/dist/visualization/skeleton/hand21.d.ts.map +1 -0
  89. package/dist/visualization/skeleton/hand21.js +51 -0
  90. package/dist/visualization/skeleton/index.d.ts +10 -0
  91. package/dist/visualization/skeleton/index.d.ts.map +1 -0
  92. package/dist/visualization/skeleton/index.js +9 -0
  93. package/dist/visualization/skeleton/openpose134.d.ts +357 -0
  94. package/dist/visualization/skeleton/openpose134.d.ts.map +1 -0
  95. package/dist/visualization/skeleton/openpose134.js +116 -0
  96. package/dist/visualization/skeleton/openpose18.d.ts +177 -0
  97. package/dist/visualization/skeleton/openpose18.d.ts.map +1 -0
  98. package/dist/visualization/skeleton/openpose18.js +47 -0
  99. package/docs/ANIMAL_DETECTOR.md +450 -0
  100. package/docs/CUSTOM_DETECTOR.md +568 -0
  101. package/docs/OBJECT_DETECTOR.md +373 -0
  102. package/docs/POSE3D_DETECTOR.md +458 -0
  103. package/docs/POSE_DETECTOR.md +442 -0
  104. package/examples/README.md +119 -0
  105. package/examples/index.html +746 -0
  106. package/package.json +51 -0
  107. package/playground/README.md +114 -0
  108. package/playground/app/favicon.ico +0 -0
  109. package/playground/app/globals.css +17 -0
  110. package/playground/app/layout.tsx +19 -0
  111. package/playground/app/page.tsx +1338 -0
  112. package/playground/eslint.config.mjs +18 -0
  113. package/playground/next.config.ts +34 -0
  114. package/playground/package-lock.json +6723 -0
  115. package/playground/package.json +27 -0
  116. package/playground/postcss.config.mjs +7 -0
  117. package/playground/tsconfig.json +34 -0
  118. package/src/core/base.ts +66 -0
  119. package/src/core/file.ts +141 -0
  120. package/src/core/modelCache.ts +189 -0
  121. package/src/core/posePostprocessing.ts +91 -0
  122. package/src/core/postprocessing.ts +93 -0
  123. package/src/core/preprocessing.ts +127 -0
  124. package/src/index.ts +69 -0
  125. package/src/models/rtmpose.ts +265 -0
  126. package/src/models/rtmpose3d.ts +289 -0
  127. package/src/models/yolo12.ts +220 -0
  128. package/src/models/yolox.ts +214 -0
  129. package/src/solution/animalDetector.ts +955 -0
  130. package/src/solution/body.ts +89 -0
  131. package/src/solution/bodyWithFeet.ts +89 -0
  132. package/src/solution/customDetector.ts +474 -0
  133. package/src/solution/hand.ts +52 -0
  134. package/src/solution/index.ts +10 -0
  135. package/src/solution/objectDetector.ts +816 -0
  136. package/src/solution/pose3dDetector.ts +890 -0
  137. package/src/solution/poseDetector.ts +892 -0
  138. package/src/solution/poseTracker.ts +172 -0
  139. package/src/solution/wholebody.ts +130 -0
  140. package/src/solution/wholebody3d.ts +125 -0
  141. package/src/types/index.ts +62 -0
  142. package/src/visualization/draw.ts +543 -0
  143. package/src/visualization/skeleton/coco133.ts +131 -0
  144. package/src/visualization/skeleton/coco17.ts +49 -0
  145. package/src/visualization/skeleton/halpe26.ts +71 -0
  146. package/src/visualization/skeleton/hand21.ts +52 -0
  147. package/src/visualization/skeleton/index.ts +10 -0
  148. package/src/visualization/skeleton/openpose134.ts +125 -0
  149. package/src/visualization/skeleton/openpose18.ts +48 -0
  150. 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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"}