Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/benchmark.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ static BenchWire run_single_benchmark(const std::string & model_path,
sam3_tracker_ptr tracker;

if (visual_only) {
sam3_visual_track_params vtp;
sam3_video_params vtp;
vtp.max_keep_alive = 100;
vtp.recondition_every = 16;
tracker = sam3_create_visual_tracker(*model, vtp);
Expand Down
7 changes: 1 addition & 6 deletions examples/main_video.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,6 @@ struct vapp_state {

// Model type
bool visual_only = false;
sam3_visual_track_params visual_track_params;

// Timeline: per-frame instance presence
// timeline_instances[frame_index] = list of {instance_id, score}
Expand Down Expand Up @@ -218,11 +217,7 @@ static bool screen_to_image(const vapp_state& app, float sx, float sy,
static void create_tracker(vapp_state& app) {
if (app.visual_only) {
// SAM2 / visual-only: use visual tracker (no text detection)
app.visual_track_params.assoc_iou_threshold = app.track_params.assoc_iou_threshold;
app.visual_track_params.max_keep_alive = app.track_params.max_keep_alive;
app.visual_track_params.recondition_every = app.track_params.recondition_every;
app.visual_track_params.fill_hole_area = app.track_params.fill_hole_area;
app.tracker = sam3_create_visual_tracker(*app.model, app.visual_track_params);
app.tracker = sam3_create_visual_tracker(*app.model, app.track_params);
} else {
if (app.init_mode == VMODE_TEXT)
app.track_params.text_prompt = app.text_prompt;
Expand Down
11 changes: 3 additions & 8 deletions sam3.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10839,15 +10839,10 @@ void sam3_tracker_reset(sam3_tracker& tracker) {

sam3_tracker_ptr sam3_create_visual_tracker(
const sam3_model& model,
const sam3_visual_track_params& params) {
sam3_video_params vp;
vp.text_prompt = ""; // no PCS detection
vp.assoc_iou_threshold = params.assoc_iou_threshold;
vp.max_keep_alive = params.max_keep_alive;
vp.recondition_every = params.recondition_every;
vp.fill_hole_area = params.fill_hole_area;
const sam3_video_params& params) {
sam3_tracker_ptr tracker(new sam3_tracker());
tracker->params = vp;
tracker->params = params;
tracker->params.text_prompt.clear(); // no PCS detection
fprintf(stderr, "%s: visual-only tracker created (max_keep_alive=%d)\n",
__func__, params.max_keep_alive);
return tracker;
Expand Down
13 changes: 3 additions & 10 deletions sam3.h
Original file line number Diff line number Diff line change
Expand Up @@ -241,20 +241,13 @@ void sam3_tracker_reset(sam3_tracker & tracker);
** ── Visual-Only Video Tracking ──────────────────────────────────────────
*/

struct sam3_visual_track_params {
float assoc_iou_threshold = 0.1f;
int max_keep_alive = 30;
int recondition_every = 16;
int fill_hole_area = 16;
};

/*
** Create a tracker for visual-only models. Instances are added manually
** via sam3_tracker_add_instance().
** via sam3_tracker_add_instance(). params.text_prompt is ignored.
*/
sam3_tracker_ptr sam3_create_visual_tracker(
const sam3_model & model,
const sam3_visual_track_params & params);
const sam3_model & model,
const sam3_video_params & params);

/*
** Propagate all tracked instances to the next frame (no detection step).
Expand Down