https://github.com/open-mmlab/mmpose/tree/main/projects/rtmo with ONNX weights to be compatible with Transformers.js.
Usage (Transformers.js)
If you haven't already, you can install the Transformers.js JavaScript library from NPM using:
npm i @xenova/transformers
Example: Perform pose-estimation w/ Xenova/RTMO-t
.
import { AutoModel, AutoProcessor, RawImage } from '@xenova/transformers';
// Load model and processor
const model_id = 'Xenova/RTMO-t';
const model = await AutoModel.from_pretrained(model_id);
const processor = await AutoProcessor.from_pretrained(model_id);
// Read image and run processor
const url = 'https://huggingface.co/datasets/Xenova/transformers.js-docs/resolve/main/football-match.jpg';
const image = await RawImage.read(url);
const { pixel_values, original_sizes, reshaped_input_sizes } = await processor(image);
// Predict bounding boxes and keypoints
const { dets, keypoints } = await model({ input: pixel_values });
// Select the first image
const predicted_boxes = dets.tolist()[0];
const predicted_points = keypoints.tolist()[0];
const [height, width] = original_sizes[0];
const [resized_height, resized_width] = reshaped_input_sizes[0];
// Compute scale values
const xScale = width / resized_width;
const yScale = height / resized_height;
// Define thresholds
const point_threshold = 0.3;
const box_threshold = 0.3;
// Display results
for (let i = 0; i < predicted_boxes.length; ++i) {
const [xmin, ymin, xmax, ymax, box_score] = predicted_boxes[i];
if (box_score < box_threshold) continue;
const x1 = (xmin * xScale).toFixed(2);
const y1 = (ymin * yScale).toFixed(2);
const x2 = (xmax * xScale).toFixed(2);
const y2 = (ymax * yScale).toFixed(2);
console.log(`Found person at [${x1}, ${y1}, ${x2}, ${y2}] with score ${box_score.toFixed(3)}`)
const points = predicted_points[i]; // of shape [17, 3]
for (let id = 0; id < points.length; ++id) {
const label = model.config.id2label[id];
const [x, y, point_score] = points[id];
if (point_score < point_threshold) continue;
console.log(` - ${label}: (${(x * xScale).toFixed(2)}, ${(y * yScale).toFixed(2)}) with score ${point_score.toFixed(3)}`);
}
}
See example output
Found person at [411.10, 63.87, 647.68, 505.40] with score 0.986
- nose: (526.09, 119.83) with score 0.874
- left_eye: (539.01, 110.39) with score 0.696
- right_eye: (512.50, 111.08) with score 0.662
- left_shoulder: (563.59, 171.10) with score 0.999
- right_shoulder: (467.38, 160.82) with score 0.999
- left_elbow: (572.72, 240.61) with score 0.999
- right_elbow: (437.86, 218.20) with score 0.998
- left_wrist: (603.74, 303.53) with score 0.995
- right_wrist: (506.01, 218.68) with score 0.992
- left_hip: (536.00, 306.25) with score 1.000
- right_hip: (472.79, 311.69) with score 0.999
- left_knee: (580.82, 366.38) with score 0.996
- right_knee: (500.25, 449.72) with score 0.954
- left_ankle: (572.21, 449.52) with score 0.993
- right_ankle: (541.37, 436.71) with score 0.916
Found person at [93.58, 19.64, 492.62, 522.45] with score 0.909
- left_shoulder: (233.76, 109.57) with score 0.971
- right_shoulder: (229.56, 100.34) with score 0.950
- left_elbow: (317.31, 162.73) with score 0.950
- right_elbow: (229.98, 179.31) with score 0.934
- left_wrist: (385.59, 219.03) with score 0.870
- right_wrist: (161.31, 230.74) with score 0.952
- left_hip: (351.23, 243.42) with score 0.998
- right_hip: (361.94, 240.70) with score 0.999
- left_knee: (297.77, 382.00) with score 0.998
- right_knee: (306.07, 393.59) with score 1.000
- left_ankle: (413.48, 354.16) with score 1.000
- right_ankle: (445.30, 488.11) with score 0.999
Found person at [-1.46, 50.68, 160.66, 371.74] with score 0.780
- nose: (80.17, 81.16) with score 0.570
- left_eye: (85.17, 75.45) with score 0.383
- right_eye: (70.20, 77.09) with score 0.382
- left_shoulder: (121.30, 114.98) with score 0.981
- right_shoulder: (46.56, 114.41) with score 0.981
- left_elbow: (144.09, 163.76) with score 0.777
- right_elbow: (29.69, 159.24) with score 0.886
- left_wrist: (142.31, 205.64) with score 0.725
- right_wrist: (6.24, 199.62) with score 0.876
- left_hip: (108.07, 208.90) with score 0.992
- right_hip: (64.72, 212.01) with score 0.996
- left_knee: (115.26, 276.52) with score 0.998
- right_knee: (65.09, 283.25) with score 0.998
- left_ankle: (126.09, 340.42) with score 0.991
- right_ankle: (63.88, 348.88) with score 0.977
Found person at [526.35, 36.25, 650.42, 280.90] with score 0.328
- nose: (554.06, 71.87) with score 0.901
- left_eye: (562.10, 66.30) with score 0.928
- right_eye: (546.65, 66.36) with score 0.746
- left_ear: (575.98, 68.17) with score 0.658
- left_shoulder: (588.04, 102.61) with score 0.999
- right_shoulder: (526.00, 102.94) with score 0.704
- left_elbow: (618.11, 149.18) with score 0.984
- left_wrist: (630.77, 189.42) with score 0.961
- left_hip: (578.74, 181.42) with score 0.966
- right_hip: (530.33, 176.46) with score 0.698
- left_knee: (568.74, 233.01) with score 0.958
- right_knee: (542.44, 243.87) with score 0.687
- left_ankle: (585.17, 284.79) with score 0.838
- right_ankle: (550.07, 292.19) with score 0.435
- Downloads last month
- 5