feat(perception): person re-identification node (Issue #201) #208

Merged
sl-jetson merged 2 commits from sl-perception/issue-201-person-reid into main 2026-03-02 11:44:32 -05:00
Collaborator

Summary

  • Add saltybot_person_reid_msgs: PersonAppearance + PersonAppearanceArray message types
  • Add saltybot_person_reid: MobileNetV2 ONNX torso-crop embedder producing 128-dim L2-normalised embeddings, with 128-bin HSV histogram fallback when no model file is provided
  • Cosine-similarity gallery with EMA identity updates and configurable age-based pruning (default 5 min)
  • ROS2 node subscribes to /person/detections + /camera/color/image_raw, extracts torso crops, runs embedding, publishes PersonAppearanceArray on /saltybot/person_reid at 5 Hz
  • Pure-Python helpers (_embedding_model, _reid_gallery) importable without rclpy — 18/18 unit tests pass

Closes #201

Test plan

  • python3 -m pytest test/test_person_reid.py -v — 18 passed
  • Launch with person_detection.launch.py and verify /saltybot/person_reid publishes at 5 Hz
  • Verify identity re-assigned across frames for same person

🤖 Generated with Claude Code

## Summary - Add `saltybot_person_reid_msgs`: `PersonAppearance` + `PersonAppearanceArray` message types - Add `saltybot_person_reid`: MobileNetV2 ONNX torso-crop embedder producing 128-dim L2-normalised embeddings, with 128-bin HSV histogram fallback when no model file is provided - Cosine-similarity gallery with EMA identity updates and configurable age-based pruning (default 5 min) - ROS2 node subscribes to `/person/detections` + `/camera/color/image_raw`, extracts torso crops, runs embedding, publishes `PersonAppearanceArray` on `/saltybot/person_reid` at 5 Hz - Pure-Python helpers (`_embedding_model`, `_reid_gallery`) importable without `rclpy` — 18/18 unit tests pass Closes #201 ## Test plan - [ ] `python3 -m pytest test/test_person_reid.py -v` — 18 passed - [ ] Launch with `person_detection.launch.py` and verify `/saltybot/person_reid` publishes at 5 Hz - [ ] Verify identity re-assigned across frames for same person 🤖 Generated with [Claude Code](https://claude.com/claude-code)
sl-perception added 2 commits 2026-03-02 11:21:29 -05:00
Two new packages:
- saltybot_person_reid_msgs: PersonAppearance + PersonAppearanceArray msgs
- saltybot_person_reid: MobileNetV2 torso-crop embedder (128-dim L2-norm)
  with 128-bin HSV histogram fallback, cosine-similarity gallery with EMA
  identity updates and configurable age-based pruning, ROS2 node publishing
  PersonAppearanceArray on /saltybot/person_reid at 5 Hz.

Pure-Python helpers (_embedding_model, _reid_gallery) importable without
rclpy — 18/18 unit tests pass.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sl-perception force-pushed sl-perception/issue-201-person-reid from 96ab90ef71 to d143a6d156 2026-03-02 11:39:35 -05:00 Compare
sl-jetson merged commit d1a4008451 into main 2026-03-02 11:44:32 -05:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: seb/saltylab-firmware#208
No description provided.