Video Object Detection API Methods

In this section:

Create Job

POST /job/:id

This method creates a video processing task (job) for the video-worker component.

Parameters in path segments

:id: job id.

Parameters in request body:

  • enabled: job enabled state.

  • stream_url: URL/address of a video stream/file to process.

  • labels: key-value labels, that will be used by the router component (for example facerouter) to find processing directives for objects detected in this video stream.

  • single_pass: if true, disable restarting video processing upon error (by default, false).

  • router_url: URL/address of the router component (for example, facerouter) to receive detected objects from the video-worker component for processing.

  • router_events_url: URL/address of the router component (for example, facerouter), that uses events extraction.

  • stream_settings: stream processing common settings and detector parameters.

  • stream_settings_gpu: deprecated video stream settings. Not recommended for use. Only for compatibility.

Note

Other video stream parameters that differ from common video stream parameters are specified in the video-manager configuration file (see Video Object Detection: video-manager and video-worker section) or in the service defaults.

Returns:

A job object: all parameters from the request, as well as some read-only attributes.

Example

Request

curl -s 'http://localhost:18810/job/myid-123' --data '{"stream_url":"http://1.2.3.4/stream.mp4", "labels": {"district": "SVAO"}}' | jq

Response

{
  "id": "myid-123",
  "enabled": true,
  "stream_url": "http://1.2.3.4/stream.mp4",
  "labels": {
    "district": "SVAO"
  },
  "router_url": "http://127.0.0.1:7777/mocks/events/records",
  "router_events_url": "http://127.0.0.1:7777/mocks/actions/records",
  "single_pass": false,
  "stream_settings": {
    "play_speed": -1,
    "disable_drops": false,
    "imotion_threshold": 0,
    "router_timeout_ms": 15000,
    "router_verify_ssl": true,
    "router_headers": [],
    "router_body": [],
    "ffmpeg_params": [],
    "ffmpeg_format": "",
    "use_stream_timestamp": false,
    "start_stream_timestamp": 0,
    "rot": "",
    "stream_data_filter": "",
    "video_transform": "",
    "enable_recorder": false,
    "enable_liveness": false,
    "record_audio": false,
    "detectors": {
      "face": {
        "filter_min_quality": 0.45,
        "filter_min_size": 1,
        "filter_max_size": 8192,
        "roi": "",
        "fullframe_crop_rot": false,
        "fullframe_use_png": false,
        "jpeg_quality": 95,
        "overall_only": false,
        "realtime_post_first_immediately": false,
        "realtime_post_interval": 1,
        "realtime_post_every_interval": false,
        "track_interpolate_bboxes": true,
        "track_miss_interval": 1,
        "track_overlap_threshold": 0.25,
        "track_max_duration_frames": 0,
        "track_send_history": false,
        "post_best_track_frame": true,
        "post_best_track_normalize": true,
        "post_first_track_frame": false,
        "post_last_track_frame": false,
        "tracker_type": "simple_iou",
        "track_deep_sort_matching_threshold": 0.65,
        "track_deep_sort_filter_unconfirmed_tracks": true,
        "track_object_is_principal": false,
        "track_history_active_track_miss_interval": 0,
        "filter_track_min_duration_frames": 1,
        "extractors_track_triggers": {}
      }
    }
  },
  "stream_settings_gpu": {
    "play_speed": -1,
    "filter_min_quality": 0.45,
    "filter_min_face_size": 1,
    "filter_max_face_size": 8192,
    "normalized_only": false,
    "jpeg_quality": 95,
    "overall_only": false,
    "use_stream_timestamp": false,
    "ffmpeg_params": [],
    "router_timeout_ms": 15000,
    "router_verify_ssl": true,
    "router_headers": [],
    "router_body": [],
    "start_stream_timestamp": 0,
    "imotion_threshold": 0,
    "rot": "",
    "roi": "",
    "realtime_post_interval": 1,
    "realtime_post_every_interval": false,
    "ffmpeg_format": "",
    "disable_drops": false,
    "router_full_frame_png": false,
    "router_disable_normalized": false,
    "crop_fullframe_rot": false,
    "realtime_post_first_immediately": false,
    "post_first_track_frame": false,
    "post_last_track_frame": false,
    "track_max_duration_frames": 0,
    "send_track_history": false,
    "stream_data_filter": "",
    "video_transform": ""
  },
  "status": "AWAITING",
  "status_msg": "",
  "statistic": {
    "processed_duration": 0,
    "faces_posted": 0,
    "faces_failed": 0,
    "faces_not_posted": 0,
    "processing_fps": 0,
    "frames_dropped": 0,
    "frames_processed": 0,
    "frames_imotion_skipped": 0,
    "decoding_soft_errors": 0,
    "frame_width": 0,
    "frame_height": 0,
    "last_stream_timestamp": 0,
    "objects": null,
    "extractors": null,
    "job_starts": 0
  },
  "restream_url": "",
  "restream_direct_url": "",
  "shots_url": "",
  "worker_id": "",
  "version": ""
}

List Existing Jobs

GET /jobs

This method returns the list of all existing jobs.

Parameters:

This method doesn’t accept any parameters.

Returns:

JSON representation with the list of all jobs.

Example

Request

curl -s 'http://localhost:18810/jobs' | jq

Response

[
  {
    "id": "myid-123",
    "enabled": true,
    "stream_url": "http://1.2.3.4/stream.mp4",
    "labels": {
      "district": "SVAO"
    },
    "router_url": "http://127.0.0.1:7777/mocks/events/records",
    "router_events_url": "http://127.0.0.1:7777/mocks/actions/records",
    "single_pass": false,
    "stream_settings": {
      "play_speed": -1,
      "disable_drops": false,
      "imotion_threshold": 0,
      "router_timeout_ms": 15000,
      "router_verify_ssl": true,
      "router_headers": [],
      "router_body": [],
      "ffmpeg_params": [],
      "ffmpeg_format": "",
      "use_stream_timestamp": false,
      "start_stream_timestamp": 0,
      "rot": "",
      "stream_data_filter": "",
      "video_transform": "",
      "enable_recorder": false,
      "enable_liveness": false,
      "record_audio": false,
      "detectors": {
        "face": {
          "filter_min_quality": 0.45,
          "filter_min_size": 1,
          "filter_max_size": 8192,
          "roi": "",
          "fullframe_crop_rot": false,
          "fullframe_use_png": false,
          "jpeg_quality": 95,
          "overall_only": false,
          "realtime_post_first_immediately": false,
          "realtime_post_interval": 1,
          "realtime_post_every_interval": false,
          "track_interpolate_bboxes": true,
          "track_miss_interval": 1,
          "track_overlap_threshold": 0.25,
          "track_max_duration_frames": 0,
          "track_send_history": false,
          "post_best_track_frame": true,
          "post_best_track_normalize": true,
          "post_first_track_frame": false,
          "post_last_track_frame": false,
          "tracker_type": "simple_iou",
          "track_deep_sort_matching_threshold": 0.65,
          "track_deep_sort_filter_unconfirmed_tracks": true,
          "track_object_is_principal": false,
          "track_history_active_track_miss_interval": 0,
          "filter_track_min_duration_frames": 1,
          "extractors_track_triggers": {}
        }
      }
    },
    "stream_settings_gpu": {
      "play_speed": -1,
      "filter_min_quality": 0.45,
      "filter_min_face_size": 1,
      "filter_max_face_size": 8192,
      "normalized_only": false,
      "jpeg_quality": 95,
      "overall_only": false,
      "use_stream_timestamp": false,
      "ffmpeg_params": [],
      "router_timeout_ms": 15000,
      "router_verify_ssl": true,
      "router_headers": [],
      "router_body": [],
      "start_stream_timestamp": 0,
      "imotion_threshold": 0,
      "rot": "",
      "roi": "",
      "realtime_post_interval": 1,
      "realtime_post_every_interval": false,
      "ffmpeg_format": "",
      "disable_drops": false,
      "router_full_frame_png": false,
      "router_disable_normalized": false,
      "crop_fullframe_rot": false,
      "realtime_post_first_immediately": false,
      "post_first_track_frame": false,
      "post_last_track_frame": false,
      "track_max_duration_frames": 0,
      "send_track_history": false,
      "stream_data_filter": "",
      "video_transform": ""
    },
    "status": "STARTING",
    "status_msg": "",
    "statistic": {
      "processed_duration": 0,
      "faces_posted": 0,
      "faces_failed": 0,
      "faces_not_posted": 0,
      "processing_fps": 0,
      "frames_dropped": 0,
      "frames_processed": 0,
      "frames_imotion_skipped": 0,
      "decoding_soft_errors": 0,
      "frame_width": 0,
      "frame_height": 0,
      "last_stream_timestamp": 0,
      "objects": {},
      "extractors": {},
      "job_starts": 0
    },
    "restream_url": "ws://127.0.0.1:9999/stream/myid-123",
    "restream_direct_url": "ws://127.0.0.1:9999/directstream/myid-123",
    "shots_url": "http://127.0.0.1:9999/shot/myid-123",
    "worker_id": "ntechlab_cpu_bed698ede98011e0311d7669f7ff0b18",
    "version": "cpa3slouvrb8u0vir3j0"
  }
]

Existing Jobs Count

GET /jobs-count

This method returns a set of counters for all jobs statuses. Counters with no jobs will not be shown.

Parameters:

This method doesn’t accept any parameters.

Returns:

JSON representation with information about the count of jobs.

Example

Request

curl -s 'http://localhost:18810/jobs-count' | jq

Response

{
  "ALL": 10,
  "AWAITING": 1,
  "COMPLETED": 1,
  "DISABLED": 1,
  "DISCONNECTED": 1,
  "INPROGRESS": 1,
  "INTERRUPTED": 1,
  "MISCONFIGURED": 1,
  "NOT_STARTED": 1,
  "STARTING": 1,
  "TOO_MANY_CAMERAS": 1
}

Retrieve Job Parameters

GET /job/:id

This method retrieves a job parameters by id.

Parameters in path segments:

id: job id.

Returns:

JSON representation of the job object.

Example

Request

curl -s 'http://localhost:18810/job/myid-123' | jq

Response

{
  "id": "myid-123",
  "enabled": true,
  "stream_url": "http://1.2.3.4/stream.mp4",
  "labels": {
    "district": "SVAO"
  },
  "router_url": "http://127.0.0.1:7777/mocks/events/records",
  "router_events_url": "http://127.0.0.1:7777/mocks/actions/records",
  "single_pass": false,
  "stream_settings": {
    "play_speed": -1,
    "disable_drops": false,
    "imotion_threshold": 0,
    "router_timeout_ms": 15000,
    "router_verify_ssl": true,
    "router_headers": [],
    "router_body": [],
    "ffmpeg_params": [],
    "ffmpeg_format": "",
    "use_stream_timestamp": false,
    "start_stream_timestamp": 0,
    "rot": "",
    "stream_data_filter": "",
    "video_transform": "",
    "enable_recorder": false,
    "enable_liveness": false,
    "record_audio": false,
    "detectors": {
      "face": {
        "filter_min_quality": 0.45,
        "filter_min_size": 1,
        "filter_max_size": 8192,
        "roi": "",
        "fullframe_crop_rot": false,
        "fullframe_use_png": false,
        "jpeg_quality": 95,
        "overall_only": false,
        "realtime_post_first_immediately": false,
        "realtime_post_interval": 1,
        "realtime_post_every_interval": false,
        "track_interpolate_bboxes": true,
        "track_miss_interval": 1,
        "track_overlap_threshold": 0.25,
        "track_max_duration_frames": 0,
        "track_send_history": false,
        "post_best_track_frame": true,
        "post_best_track_normalize": true,
        "post_first_track_frame": false,
        "post_last_track_frame": false,
        "tracker_type": "simple_iou",
        "track_deep_sort_matching_threshold": 0.65,
        "track_deep_sort_filter_unconfirmed_tracks": true,
        "track_object_is_principal": false,
        "track_history_active_track_miss_interval": 0,
        "filter_track_min_duration_frames": 1,
        "extractors_track_triggers": {}
      }
    }
  },
  "stream_settings_gpu": {
    "play_speed": -1,
    "filter_min_quality": 0.45,
    "filter_min_face_size": 1,
    "filter_max_face_size": 8192,
    "normalized_only": false,
    "jpeg_quality": 95,
    "overall_only": false,
    "use_stream_timestamp": false,
    "ffmpeg_params": [],
    "router_timeout_ms": 15000,
    "router_verify_ssl": true,
    "router_headers": [],
    "router_body": [],
    "start_stream_timestamp": 0,
    "imotion_threshold": 0,
    "rot": "",
    "roi": "",
    "realtime_post_interval": 1,
    "realtime_post_every_interval": false,
    "ffmpeg_format": "",
    "disable_drops": false,
    "router_full_frame_png": false,
    "router_disable_normalized": false,
    "crop_fullframe_rot": false,
    "realtime_post_first_immediately": false,
    "post_first_track_frame": false,
    "post_last_track_frame": false,
    "track_max_duration_frames": 0,
    "send_track_history": false,
    "stream_data_filter": "",
    "video_transform": ""
  },
  "status": "STARTING",
  "status_msg": "",
  "statistic": {
    "processed_duration": 0,
    "faces_posted": 0,
    "faces_failed": 0,
    "faces_not_posted": 0,
    "processing_fps": 0,
    "frames_dropped": 0,
    "frames_processed": 0,
    "frames_imotion_skipped": 0,
    "decoding_soft_errors": 0,
    "frame_width": 0,
    "frame_height": 0,
    "last_stream_timestamp": 0,
    "objects": {},
    "extractors": {},
    "job_starts": 0
  },
  "restream_url": "ws://127.0.0.1:9999/stream/myid-123",
  "restream_direct_url": "ws://127.0.0.1:9999/directstream/myid-123",
  "shots_url": "http://127.0.0.1:9999/shot/myid-123",
  "worker_id": "ntechlab_cpu_bed698ede98011e0311d7669f7ff0b18",
  "version": "cpa3slouvrb8u0vir3j0"
}

Delete Job

DELETE /job/:id

This method deletes a job by id.

Parameters in path segments:

id: job id.

Returns:

JSON representation of the deleted job object.

Example

Request

curl -s 'http://localhost:18810/job/myid-123' -X DELETE | jq

Response

{
  "id": "myid-123",
  "enabled": true,
  "stream_url": "http://1.2.3.4/stream.mp4",
  "labels": {
    "district": "SVAO"
  },
  "router_url": "http://127.0.0.1:7777/mocks/events/records",
  "router_events_url": "http://127.0.0.1:7777/mocks/actions/records",
  "single_pass": false,
  "stream_settings": {
    "play_speed": -1,
    "disable_drops": false,
    "imotion_threshold": 0,
    "router_timeout_ms": 15000,
    "router_verify_ssl": true,
    "router_headers": [],
    "router_body": [],
    "ffmpeg_params": [],
    "ffmpeg_format": "",
    "use_stream_timestamp": false,
    "start_stream_timestamp": 0,
    "rot": "",
    "stream_data_filter": "",
    "video_transform": "",
    "enable_recorder": false,
    "enable_liveness": false,
    "record_audio": false,
    "detectors": {
      "face": {
        "filter_min_quality": 0.45,
        "filter_min_size": 1,
        "filter_max_size": 8192,
        "roi": "",
        "fullframe_crop_rot": false,
        "fullframe_use_png": false,
        "jpeg_quality": 95,
        "overall_only": false,
        "realtime_post_first_immediately": false,
        "realtime_post_interval": 1,
        "realtime_post_every_interval": false,
        "track_interpolate_bboxes": true,
        "track_miss_interval": 1,
        "track_overlap_threshold": 0.25,
        "track_max_duration_frames": 0,
        "track_send_history": false,
        "post_best_track_frame": true,
        "post_best_track_normalize": true,
        "post_first_track_frame": false,
        "post_last_track_frame": false,
        "tracker_type": "simple_iou",
        "track_deep_sort_matching_threshold": 0.65,
        "track_deep_sort_filter_unconfirmed_tracks": true,
        "track_object_is_principal": false,
        "track_history_active_track_miss_interval": 0,
        "filter_track_min_duration_frames": 1,
        "extractors_track_triggers": {}
      }
    }
  },
  "stream_settings_gpu": {
    "play_speed": -1,
    "filter_min_quality": 0.45,
    "filter_min_face_size": 1,
    "filter_max_face_size": 8192,
    "normalized_only": false,
    "jpeg_quality": 95,
    "overall_only": false,
    "use_stream_timestamp": false,
    "ffmpeg_params": [],
    "router_timeout_ms": 15000,
    "router_verify_ssl": true,
    "router_headers": [],
    "router_body": [],
    "start_stream_timestamp": 0,
    "imotion_threshold": 0,
    "rot": "",
    "roi": "",
    "realtime_post_interval": 1,
    "realtime_post_every_interval": false,
    "ffmpeg_format": "",
    "disable_drops": false,
    "router_full_frame_png": false,
    "router_disable_normalized": false,
    "crop_fullframe_rot": false,
    "realtime_post_first_immediately": false,
    "post_first_track_frame": false,
    "post_last_track_frame": false,
    "track_max_duration_frames": 0,
    "send_track_history": false,
    "stream_data_filter": "",
    "video_transform": ""
  },
  "status": "DELETED",
  "status_msg": "",
  "statistic": {
    "processed_duration": 0,
    "faces_posted": 0,
    "faces_failed": 0,
    "faces_not_posted": 0,
    "processing_fps": 0,
    "frames_dropped": 0,
    "frames_processed": 0,
    "frames_imotion_skipped": 0,
    "decoding_soft_errors": 0,
    "frame_width": 0,
    "frame_height": 0,
    "last_stream_timestamp": 0,
    "objects": null,
    "extractors": null,
    "job_starts": 0
  },
  "restream_url": "ws://127.0.0.1:9999/stream/myid-123",
  "restream_direct_url": "ws://127.0.0.1:9999/directstream/myid-123",
  "shots_url": "http://127.0.0.1:9999/shot/myid-123",
  "worker_id": "ntechlab_cpu_bed698ede98011e0311d7669f7ff0b18",
  "version": "cpa3slouvrb8u0vir3j0"
}

Update Job

PATCH /job/:id

The method updates job parameters by id.

Parameters in path segments:

id: job id.

Parameters in request body:

  • enabled: job enabled state.

  • stream_url: URL/address of a video stream/file to process.

  • labels: key-value labels, that will be used by the router component (for example, facerouter) to find processing directives for objects detected in this video stream.

  • single_pass: if true, disable restarting video processing upon error (by default, false).

  • router_url: URL/address of the router component (for example, facerouter) to receive detected objects from the video-worker component for processing.

  • router_events_url: URL/address of the router component (for example, facerouter), that uses events extraction.

  • stream_settings: stream processing common settings and detector parameters.

  • stream_settings_gpu: deprecated video stream settings. Not recommended for use. Only for compatibility.

Returns:

JSON representation of the updated job object.

Non-editable fields in response:

  • id: job id.

  • status: job status.

  • status_msg: additional job status info.

  • statistic: job progress statistics (progress duration, number of posted and not posted objects, processing fps, the number of processed and dropped frames, job start time, etc.).

  • restream_url: websocket URL where processing stream with detected objects streams live time.

  • restream_direct_url: websocket URL where original stream with input quality streams live time.

  • shots_url: HTTP URL where actual stream screenshot can be downloaded.

  • worker_id: unique id of the video worker instance with a processing job.

  • version: job version.

Simple example

Request

curl -s 'http://localhost:18810/job/myid-123' -X PATCH --data '{"router_url":"http://myrouter"}' | jq
{
  "id": "myid-123",
  "enabled": true,
  "stream_url": "http://1.2.3.4/stream.mp4",
  "labels": {
    "district": "SVAO"
  },
  "router_url": "http://myrouter",
  "router_events_url": "http://127.0.0.1:7777/mocks/actions/records",
  "single_pass": false,
  "stream_settings": {
    "play_speed": -1,
    "disable_drops": false,
    "imotion_threshold": 0,
    "router_timeout_ms": 15000,
    "router_verify_ssl": true,
    "router_headers": [],
    "router_body": [],
    "ffmpeg_params": [],
    "ffmpeg_format": "",
    "use_stream_timestamp": false,
    "start_stream_timestamp": 0,
    "rot": "",
    "stream_data_filter": "",
    "video_transform": "",
    "enable_recorder": false,
    "enable_liveness": false,
    "record_audio": false,
    "detectors": {
      "face": {
        "filter_min_quality": 0.45,
        "filter_min_size": 1,
        "filter_max_size": 8192,
        "roi": "",
        "fullframe_crop_rot": false,
        "fullframe_use_png": false,
        "jpeg_quality": 95,
        "overall_only": false,
        "realtime_post_first_immediately": false,
        "realtime_post_interval": 1,
        "realtime_post_every_interval": false,
        "track_interpolate_bboxes": true,
        "track_miss_interval": 1,
        "track_overlap_threshold": 0.25,
        "track_max_duration_frames": 0,
        "track_send_history": false,
        "post_best_track_frame": true,
        "post_best_track_normalize": true,
        "post_first_track_frame": false,
        "post_last_track_frame": false,
        "tracker_type": "simple_iou",
        "track_deep_sort_matching_threshold": 0.65,
        "track_deep_sort_filter_unconfirmed_tracks": true,
        "track_object_is_principal": false,
        "track_history_active_track_miss_interval": 0,
        "filter_track_min_duration_frames": 1,
        "extractors_track_triggers": {}
      }
    }
  },
  "stream_settings_gpu": {
    "play_speed": -1,
    "filter_min_quality": 0.45,
    "filter_min_face_size": 1,
    "filter_max_face_size": 8192,
    "normalized_only": false,
    "jpeg_quality": 95,
    "overall_only": false,
    "use_stream_timestamp": false,
    "ffmpeg_params": [],
    "router_timeout_ms": 15000,
    "router_verify_ssl": true,
    "router_headers": [],
    "router_body": [],
    "start_stream_timestamp": 0,
    "imotion_threshold": 0,
    "rot": "",
    "roi": "",
    "realtime_post_interval": 1,
    "realtime_post_every_interval": false,
    "ffmpeg_format": "",
    "disable_drops": false,
    "router_full_frame_png": false,
    "router_disable_normalized": false,
    "crop_fullframe_rot": false,
    "realtime_post_first_immediately": false,
    "post_first_track_frame": false,
    "post_last_track_frame": false,
    "track_max_duration_frames": 0,
    "send_track_history": false,
    "stream_data_filter": "",
    "video_transform": ""
  },
  "status": "STARTING",
  "status_msg": "",
  "statistic": {
    "processed_duration": 0,
    "faces_posted": 0,
    "faces_failed": 0,
    "faces_not_posted": 0,
    "processing_fps": 0,
    "frames_dropped": 0,
    "frames_processed": 0,
    "frames_imotion_skipped": 0,
    "decoding_soft_errors": 0,
    "frame_width": 0,
    "frame_height": 0,
    "last_stream_timestamp": 0,
    "objects": null,
    "extractors": null,
    "job_starts": 0
  },
  "restream_url": "ws://127.0.0.1:9999/stream/myid-123",
  "restream_direct_url": "ws://127.0.0.1:9999/directstream/myid-123",
  "shots_url": "http://127.0.0.1:9999/shot/myid-123",
  "worker_id": "ntechlab_cpu_bed698ede98011e0311d7669f7ff0b18",
  "version": "cpa5ob0uvrb8u0vir3mg"
}

Disable detector example

Request

$ curl -s 'http://localhost:18810/job/myid-123' -X PATCH --data '{"stream_settings":{"detectors":{"face":null}}}' | jq
{
   "id": "myid-123",
   "enabled": true,
   "stream_url": "http://1.2.3.4/stream.mp4",
   "labels": {
     "district": "SVAO"
   },
   "router_url": "http://myrouter",
   "router_events_url": "http://127.0.0.1:7777/mocks/actions/records",
   "single_pass": false,
   "stream_settings": {
     "play_speed": -1,
     "disable_drops": false,
     "imotion_threshold": 0,
     "router_timeout_ms": 15000,
     "router_verify_ssl": true,
     "router_headers": [],
     "router_body": [],
     "ffmpeg_params": [],
     "ffmpeg_format": "",
     "use_stream_timestamp": false,
     "start_stream_timestamp": 0,
     "rot": "",
     "stream_data_filter": "",
     "video_transform": "",
     "enable_recorder": false,
     "enable_liveness": false,
     "record_audio": false,
     "detectors": {}
   },
   "stream_settings_gpu": {
     "play_speed": -1,
     "filter_min_quality": 0.45,
     "filter_min_face_size": 1,
     "filter_max_face_size": 8192,
     "normalized_only": false,
     "jpeg_quality": 95,
     "overall_only": false,
     "use_stream_timestamp": false,
     "ffmpeg_params": [],
     "router_timeout_ms": 15000,
     "router_verify_ssl": true,
     "router_headers": [],
     "router_body": [],
     "start_stream_timestamp": 0,
     "imotion_threshold": 0,
     "rot": "",
     "roi": "",
     "realtime_post_interval": 1,
     "realtime_post_every_interval": false,
     "ffmpeg_format": "",
     "disable_drops": false,
     "router_full_frame_png": false,
     "router_disable_normalized": false,
     "crop_fullframe_rot": false,
     "realtime_post_first_immediately": false,
     "post_first_track_frame": false,
     "post_last_track_frame": false,
     "track_max_duration_frames": 0,
     "send_track_history": false,
     "stream_data_filter": "",
     "video_transform": ""
   },
   "status": "STARTING",
   "status_msg": "",
   "statistic": {
     "processed_duration": 0,
     "faces_posted": 0,
     "faces_failed": 0,
     "faces_not_posted": 0,
     "processing_fps": 0,
     "frames_dropped": 0,
     "frames_processed": 0,
     "frames_imotion_skipped": 0,
     "decoding_soft_errors": 0,
     "frame_width": 0,
     "frame_height": 0,
     "last_stream_timestamp": 0,
     "objects": {},
     "extractors": {},
     "job_starts": 0
   },
   "restream_url": "ws://127.0.0.1:9999/stream/myid-123",
   "restream_direct_url": "ws://127.0.0.1:9999/directstream/myid-123",
   "shots_url": "http://127.0.0.1:9999/shot/myid-123",
   "worker_id": "ntechlab_cpu_bed698ede98011e0311d7669f7ff0b18",
   "version": "cpa5ob0uvrb8u0vir3mg"
 }

Restart Job

RESTART /job/:id
POST /job/:id/restart

This method restarts a job by ID.

Parameters in path segments:

id: job id.

Returns:

HTTP/1.1 200 OK on success.

Example

Request

curl -s -D - -X RESTART http://localhost:18810/job/1

Response

HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: VM:n267l1VQ
Date: Mon, 27 May 2024 08:12:19 GMT
Content-Length: 0

Get Actual Stream Settings as JSON-schema

GET /schemas/stream_settings

This method gets actual stream settings parameters as JSON schema.

Parameters:

This method doesn’t accept any parameters.

Returns:

JSON representation, free form of JSON schema.

Example

Request

curl -s 'http://localhost:18810/schemas/stream_settings' | jq

Response

{
  "$schema": "http://json-schema.org/draft/2020-12/schema",
  "$id": "https://git.int.ntl/FF.Server/universe/videomanager-api/src/stream_settings/stream-settings",
  "$ref": "#/$defs/StreamSettings",
  "$defs": {
    "Detector": {
      "properties": {
        "filter_min_quality": {
          "type": "number"
        },
        "filter_min_size": {
          "type": "integer"
        },
        "filter_max_size": {
          "type": "integer"
        },
        "roi": {
          "type": "string"
        },
        "fullframe_crop_rot": {
          "type": "boolean"
        },
        "fullframe_use_png": {
          "type": "boolean"
        },
        "jpeg_quality": {
          "type": "integer"
        },
        "overall_only": {
          "type": "boolean"
        },
        "realtime_post_first_immediately": {
          "type": "boolean"
        },
        "realtime_post_interval": {
          "type": "number"
        },
        "realtime_post_every_interval": {
          "type": "boolean"
        },
        "track_interpolate_bboxes": {
          "type": "boolean"
        },
        "track_miss_interval": {
          "type": "number"
        },
        "track_overlap_threshold": {
          "type": "number"
        },
        "track_max_duration_frames": {
          "type": "integer"
        },
        "track_send_history": {
          "type": "boolean"
        },
        "post_best_track_frame": {
          "type": "boolean"
        },
        "post_best_track_normalize": {
          "type": "boolean"
        },
        "post_first_track_frame": {
          "type": "boolean"
        },
        "post_last_track_frame": {
          "type": "boolean"
        },
        "tracker_type": {
          "type": "string"
        },
        "track_deep_sort_matching_threshold": {
          "type": "number"
        },
        "track_deep_sort_filter_unconfirmed_tracks": {
          "type": "boolean"
        },
        "track_object_is_principal": {
          "type": "boolean"
        },
        "track_history_active_track_miss_interval": {
          "type": "number"
        },
        "filter_track_min_duration_frames": {
          "type": "integer"
        },
        "extractors_track_triggers": {
          "patternProperties": {
            ".*": {
              "$ref": "#/$defs/ExtractorTrackTriggers"
            }
          },
          "type": "object"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "ExtractorTrackTriggers": {
      "properties": {
        "run_on_start": {
          "type": "boolean"
        },
        "run_on_end": {
          "type": "boolean"
        },
        "run_interval": {
          "type": "number"
        },
        "post_frame": {
          "type": "boolean"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "StreamSettings": {
      "properties": {
        "play_speed": {
          "type": "number"
        },
        "disable_drops": {
          "type": "boolean"
        },
        "imotion_threshold": {
          "type": "number"
        },
        "router_timeout_ms": {
          "type": "integer"
        },
        "router_verify_ssl": {
          "type": "boolean"
        },
        "router_headers": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "router_body": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "ffmpeg_params": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "ffmpeg_format": {
          "type": "string"
        },
        "use_stream_timestamp": {
          "type": "boolean"
        },
        "start_stream_timestamp": {
          "type": "integer"
        },
        "rot": {
          "type": "string"
        },
        "stream_data_filter": {
          "type": "string"
        },
        "video_transform": {
          "type": "string"
        },
        "enable_recorder": {
          "type": "boolean"
        },
        "enable_liveness": {
          "type": "boolean"
        },
        "record_audio": {
          "type": "boolean"
        },
        "detectors": {
          "patternProperties": {
            ".*": {
              "$ref": "#/$defs/Detector"
            }
          },
          "type": "object"
        }
      },
      "additionalProperties": false,
      "type": "object"
    }
  }
}

Get Actual GPU Stream Settings as JSON-schema

GET /schemas/stream_settings_gpu

This method gets actual GPU stream settings (outdated format of the stream settings) parameters as JSON schema.

Parameters:

This method doesn’t accept any parameters.

Returns:

JSON representation, free form of JSON schema.

Example

Request

curl -s 'http://localhost:18810/schemas/stream_settings_gpu' | jq

Response

{
  "$schema": "http://json-schema.org/draft/2020-12/schema",
  "$id": "https://git.int.ntl/FF.Server/universe/videomanager-api/src/stream_settings/stream-settings-gpu",
  "$ref": "#/$defs/StreamSettingsGpu",
  "$defs": {
    "StreamSettingsGpu": {
      "properties": {
        "play_speed": {
          "type": "number"
        },
        "filter_min_quality": {
          "type": "number"
        },
        "filter_min_face_size": {
          "type": "integer"
        },
        "filter_max_face_size": {
          "type": "integer"
        },
        "normalized_only": {
          "type": "boolean"
        },
        "jpeg_quality": {
          "type": "integer"
        },
        "overall_only": {
          "type": "boolean"
        },
        "use_stream_timestamp": {
          "type": "boolean"
        },
        "ffmpeg_params": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "router_timeout_ms": {
          "type": "integer"
        },
        "router_verify_ssl": {
          "type": "boolean"
        },
        "router_headers": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "router_body": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "start_stream_timestamp": {
          "type": "integer"
        },
        "imotion_threshold": {
          "type": "number"
        },
        "rot": {
          "type": "string"
        },
        "roi": {
          "type": "string"
        },
        "realtime_post_interval": {
          "type": "number"
        },
        "realtime_post_every_interval": {
          "type": "boolean"
        },
        "ffmpeg_format": {
          "type": "string"
        },
        "disable_drops": {
          "type": "boolean"
        },
        "router_full_frame_png": {
          "type": "boolean"
        },
        "router_disable_normalized": {
          "type": "boolean"
        },
        "crop_fullframe_rot": {
          "type": "boolean"
        },
        "realtime_post_first_immediately": {
          "type": "boolean"
        },
        "post_first_track_frame": {
          "type": "boolean"
        },
        "post_last_track_frame": {
          "type": "boolean"
        },
        "track_max_duration_frames": {
          "type": "integer"
        },
        "send_track_history": {
          "type": "boolean"
        },
        "stream_data_filter": {
          "type": "string"
        },
        "video_transform": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object"
    }
  }
}