Видео

Вывести списком видеоархив

Чтобы составить список видеоархивов, используйте следующий метод:

GET /videos/

Запрос содержит следующие параметры QUERY-STRING:

Название

Тип

Описание

camera_groups

array of integers

Выбрать видеоархивы, относящиеся к группам камер, ID которых указаны в массиве.

case_in

array of integers

Выбрать видеоархивы, относящиеся к происшествиям, ID которых указаны в массиве.

created_date_gt

date-time

Выбрать видеоархивы, у которых значение created_date больше указанного.

created_date_gte

date-time

Выбрать видеоархивы, у которых значение created_date больше или равно указанному.

created_date_last_n_days

number

Выбрать видеоархивы со значением created_date за последние N дней.

created_date_lt

date-time

Выбрать видеоархивы, у которых значение created_date меньше указанного.

created_date_lte

date-time

Выбрать видеоархивы, у которых значение created_date меньше или равно указанному.

created_date_nth_full_week

number

Выбрать видеоархивы со значением created_date за последние N недель (включая субботу и воскресенье).

created_date_nth_work_week

number

Выбрать видеоархивы со значением created_date за последние N недель (только рабочие дни, исключая субботу и воскресенье).

id_in

array of integers

Выбрать видеоархивы, ID которых указаны в массиве.

limit

integer

Количество выводимых результатов.

name_contains

string

Выбрать видеоархивы, в названии которых содержится указанный текст, независимо от регистра.

ordering

string

Поле для сортировки результатов запроса. Допустимые поля: id, created_date, name.

page

string

Значение курсора пагинации.

Например, укажите значение параметра limit для ограничения количества результатов на странице.

CURL пример

curl -X GET "http://<findface-ip:port>/videos/?limit=2" \
 -H "Authorization: Token <token>"

В случае успешного ответа (OK: 200) возвращается JSON-объект со следующими параметрами:

Название

Тип

Описание

next_page

string┃null

Следующая страница.

prev_page

string┃null

Предыдущая страница.

results

[{…}]

Массив, содержащий следующие параметры. Пример.

Примечание

* – означает, что параметр является обязательным. 🆁 – только для чтения.

Название

Тип

Описание

id*

integer 🆁

ID видеоархива.

camera_group*

integer

ID группы камер.

name*

string┃null

Название видеоархива.

Ограничения: минимальное количество символов — 1, максимальное количество символов — 256.

url

string┃null

URL исходного видеофайла.

camera

integer┃null

ID камеры.

processing_start_date*

date-time 🆁

Дата и время начала обработки видео.

active*

boolean 🆁

true, если обработка видео активна.

router_url

string┃null

URL для отправки обнаруженных объектов из findface-video-worker во внешний компонент для дальнейшей обработки.

screenshot*

uri 🆁

URL скриншота.

stream_settings

object

Объект, содержащий настройки параметров обработки видео:

  • настройки детекторов (detectors) для обработки и трекинга объектов определенных типов (лиц, силуэтов, транспортных средств) из видеопотока;

  • общие настройки видеопотока, такие как ограничение скорости воспроизведения (play_speed), минимальная интенсивность движения (imotion_threshold), источник получения временных меток (use_stream_timestamp, use_rtsp_time) и прочие.

source_len*

number 🆁

Длина источника в секундах.

health_status*

object

Объект, содержащий информацию об обработке видео:

  • включение обработки (enabled);

  • статус обработки (status);

  • статистика (statistic).

Объект также включает дополнительные данные для отображения в пользовательском интерфейсе (code, code_desc).

finished*

boolean 🆁

true, если обработка видео завершена.

queued*

boolean 🆁

true, если видео находится в очереди на обработку.

face_count*

integer 🆁

Количество созданных лиц.

file_size*

integer 🆁

Размер видеофайла в архиве.

created_date*

date-time 🆁

Дата создания видеоархива.

body_count*

integer 🆁

Количество созданных силуэтов.

car_count*

integer 🆁

Количество созданных транспортных средств.

case

integer┃null

ID происшествия.

face_cluster_count*

integer┃null 🆁

Количество созданных из видео кластеров лиц.

body_cluster_count*

integer┃null 🆁

Количество созданных из видео кластеров силуэтов.

car_cluster_count*

integer┃null 🆁

Количество созданных из видео кластеров транспортных средств.

frame_height*

integer 🆁

Оригинальная высота кадров (в пикселях), полученных из видеопотока.

frame_width*

integer 🆁

Оригинальная ширина кадров (в пикселях), полученных из видеопотока.

error*

string 🆁

Ошибка при обработке видеоархива.

Примечание

Происшествия не поддерживаются в FindFace Multi 2.0+ и хранятся только в API.

Пример ответа

{
 "next_page": null,
 "prev_page": null,
 "results": [
   {
     "id": 2,
     "camera_group": 1,
     "name": "file.mp4",
     "url": null,
     "camera": null,
     "processing_start_date": "2025-03-28T11:55:13.335020Z",
     "active": false,
     "router_url": null,
     "screenshot": "http://<findface-ip:port>/videos/2/screenshot/",
     "stream_settings": {
       "detectors": {
         "face": {
           "filter_max_size": 8192,
           "filter_min_quality": 0.42,
           "filter_min_size": 60,
           "fullframe_crop_rot": false,
           "fullframe_use_png": false,
           "jpeg_quality": 95,
           "overall_only": true,
           "post_best_track_frame": true,
           "post_best_track_normalize": true,
           "post_first_track_frame": false,
           "post_last_track_frame": false,
           "realtime_post_every_interval": false,
           "realtime_post_first_immediately": false,
           "realtime_post_interval": 1,
           "roi": "",
           "track_interpolate_bboxes": true,
           "track_max_duration_frames": 0,
           "track_miss_interval": 1,
           "track_overlap_threshold": 0.25,
           "track_send_history": false,
           "tracker_type": "simple_iou",
           "track_deep_sort_matching_threshold": 0.65,
           "track_deep_sort_filter_unconfirmed_tracks": true,
           "filter_track_min_duration_frames": 1
         },
         "body": null,
         "car": null
       },
       "disable_drops": true,
       "ffmpeg_format": "",
       "ffmpeg_params": [],
       "imotion_threshold": 0,
       "play_speed": -1,
       "rot": "",
       "router_timeout_ms": 15000,
       "router_verify_ssl": true,
       "start_stream_timestamp": 0,
       "stream_data_filter": "",
       "use_stream_timestamp": false,
       "video_transform": "",
       "enable_recorder": false,
       "enable_liveness": false,
       "record_audio": false,
       "use_rtsp_time": true
     },
     "source_len": 12.533333,
     "health_status": {
       "enabled": false,
       "status": "COMPLETED",
       "msg": "",
       "statistic": {
         "processed_duration": 12.466666,
         "faces_posted": 5,
         "faces_failed": 0,
         "faces_not_posted": 0,
         "processing_fps": 30.567686,
         "frames_dropped": 0,
         "frames_processed": 188,
         "frames_imotion_skipped": 0,
         "decoding_soft_errors": 4,
         "frame_width": 1154,
         "frame_height": 602,
         "last_stream_timestamp": 12.466666,
         "objects": {
           "face": {
             "posted": 5,
             "failed": 0,
             "not_posted": 0
           }
         },
         "extractors": {},
         "job_starts": 1
       },
       "code": "green",
       "code_desc": "Video processing is done"
     },
     "finished": true,
     "queued": false,
     "face_count": 6,
     "file_size": 2259950,
     "created_date": "2025-03-28T11:37:28.170028Z",
     "body_count": 0,
     "car_count": 0,
     "case": null,
     "face_cluster_count": 1,
     "body_cluster_count": 0,
     "car_cluster_count": 0,
     "frame_height": 602,
     "frame_width": 1154,
     "error": null
   }
 ]
}

Добавить новый видеоархив

Чтобы добавить новый видеоархив, используйте следующий метод:

POST /videos/

Тело запроса является обязательным и содержит объект application/json со следующими параметрами:

Название

Тип

Описание

camera_group*

integer

ID группы камер.

name*

string┃null

Название видеоархива.

Ограничения: минимальное количество символов — 1, максимальное количество символов — 256.

url

string┃null

URL исходного видеофайла, который необходимо загрузить.

Вы также можете загрузить исходный видеофайл с помощью метода PUT /videos/{id}/upload/source_file/.

Ограничение: минимум 1 символ.

camera

integer┃null

ID камеры.

router_url

string┃null

URL для отправки обнаруженных объектов из findface-video-worker во внешний компонент для дальнейшей обработки.

stream_settings

object

Объект, содержащий настройки параметров обработки видео:

  • настройки детекторов (detectors) для обработки и трекинга объектов определенных типов (лиц, силуэтов, транспортных средств) из видеопотока;

  • общие настройки видеопотока, такие как ограничение скорости воспроизведения (play_speed), минимальная интенсивность движения (imotion_threshold), источник получения временных меток (use_stream_timestamp, use_rtsp_time) и прочие.

case

integer┃null

ID происшествия.

Примечание

Происшествия не поддерживаются в FindFace Multi 2.0+ и хранятся только в API.

Пример запроса

Совет

Этот пример приведен только для ознакомления. Подставьте свои значения в соответствующие поля. Вы можете заполнить только обязательные поля, а остальные будут использовать значения по умолчанию.

{
 "camera_group": 0,
 "name": "A",
 "url": "A",
 "camera": 0,
 "router_url": "string",
 "stream_settings": {
   "detectors": {
     "face": {
       "filter_max_size": 0,
       "filter_min_quality": 0,
       "filter_min_size": 0,
       "fullframe_crop_rot": false,
       "fullframe_use_png": false,
       "jpeg_quality": 0,
       "overall_only": false,
       "post_best_track_frame": false,
       "post_best_track_normalize": false,
       "post_first_track_frame": false,
       "post_last_track_frame": false,
       "realtime_post_every_interval": false,
       "realtime_post_first_immediately": false,
       "realtime_post_interval": 0,
       "roi": "string",
       "track_interpolate_bboxes": false,
       "track_max_duration_frames": 0,
       "track_miss_interval": 0,
       "track_overlap_threshold": 0,
       "track_send_history": false,
       "tracker_type": "string",
       "track_deep_sort_matching_threshold": 0,
       "track_deep_sort_filter_unconfirmed_tracks": false,
       "filter_track_min_duration_frames": 0
     },
     "body": {
       "filter_max_size": 0,
       "filter_min_quality": 0,
       "filter_min_size": 0,
       "fullframe_crop_rot": false,
       "fullframe_use_png": false,
       "jpeg_quality": 0,
       "overall_only": false,
       "post_best_track_frame": false,
       "post_best_track_normalize": false,
       "post_first_track_frame": false,
       "post_last_track_frame": false,
       "realtime_post_every_interval": false,
       "realtime_post_first_immediately": false,
       "realtime_post_interval": 0,
       "roi": "string",
       "track_interpolate_bboxes": false,
       "track_max_duration_frames": 0,
       "track_miss_interval": 0,
       "track_overlap_threshold": 0,
       "track_send_history": false,
       "tracker_type": "string",
       "track_deep_sort_matching_threshold": 0,
       "track_deep_sort_filter_unconfirmed_tracks": false,
       "filter_track_min_duration_frames": 0
     },
     "car": {
       "filter_max_size": 0,
       "filter_min_quality": 0,
       "filter_min_size": 0,
       "fullframe_crop_rot": false,
       "fullframe_use_png": false,
       "jpeg_quality": 0,
       "overall_only": false,
       "post_best_track_frame": false,
       "post_best_track_normalize": false,
       "post_first_track_frame": false,
       "post_last_track_frame": false,
       "realtime_post_every_interval": false,
       "realtime_post_first_immediately": false,
       "realtime_post_interval": 0,
       "roi": "string",
       "track_interpolate_bboxes": false,
       "track_max_duration_frames": 0,
       "track_miss_interval": 0,
       "track_overlap_threshold": 0,
       "track_send_history": false,
       "tracker_type": "string",
       "track_deep_sort_matching_threshold": 0,
       "track_deep_sort_filter_unconfirmed_tracks": false,
       "filter_track_min_duration_frames": 0
     }
   },
   "disable_drops": false,
   "ffmpeg_format": "string",
   "ffmpeg_params": [
     "A"
   ],
   "imotion_threshold": 0,
   "play_speed": 0,
   "rot": "string",
   "router_timeout_ms": 0,
   "router_verify_ssl": false,
   "start_stream_timestamp": 0,
   "stream_data_filter": "string",
   "use_stream_timestamp": false,
   "video_transform": "string",
   "enable_recorder": false,
   "enable_liveness": false,
   "record_audio": false,
   "use_rtsp_time": false
 },
 "case": 0
}

Например, вы можете отправить в запросе следующие параметры:

{
 "camera_group": 1,
 "name": "Pitt&Jolie"
}

CURL пример

curl -X POST "http://<findface-ip:port>/videos/" \
  -H "Authorization: Token <token>" \
  -H "Content-Type: application/json" \
  -d '{"camera_group":1,"name":"Pitt&Jolie"}'

В случае успешного ответа (Created: 201) возвращается JSON-объект со следующими параметрами. Пример.

Пример ответа

{
 "id": 6,
 "camera_group": 1,
 "name": "Pitt&Jolie",
 "url": null,
 "camera": null,
 "processing_start_date": null,
 "active": false,
 "router_url": "string",
 "screenshot": "http://<findface-ip:port>/videos/6/screenshot/",
 "stream_settings": {
   "detectors": {
     "face": {
       "filter_max_size": 0,
       "filter_min_quality": 0,
       "filter_min_size": 0,
       "fullframe_crop_rot": false,
       "fullframe_use_png": false,
       "jpeg_quality": 0,
       "overall_only": false,
       "post_best_track_frame": false,
       "post_best_track_normalize": false,
       "post_first_track_frame": false,
       "post_last_track_frame": false,
       "realtime_post_every_interval": false,
       "realtime_post_first_immediately": false,
       "realtime_post_interval": 0,
       "roi": "string",
       "track_interpolate_bboxes": false,
       "track_max_duration_frames": 0,
       "track_miss_interval": 0,
       "track_overlap_threshold": 0,
       "track_send_history": false,
       "tracker_type": "string",
       "track_deep_sort_matching_threshold": 0,
       "track_deep_sort_filter_unconfirmed_tracks": false,
       "filter_track_min_duration_frames": 0
     },
     "body": {
       "filter_max_size": 0,
       "filter_min_quality": 0,
       "filter_min_size": 0,
       "fullframe_crop_rot": false,
       "fullframe_use_png": false,
       "jpeg_quality": 0,
       "overall_only": false,
       "post_best_track_frame": false,
       "post_best_track_normalize": false,
       "post_first_track_frame": false,
       "post_last_track_frame": false,
       "realtime_post_every_interval": false,
       "realtime_post_first_immediately": false,
       "realtime_post_interval": 0,
       "roi": "string",
       "track_interpolate_bboxes": false,
       "track_max_duration_frames": 0,
       "track_miss_interval": 0,
       "track_overlap_threshold": 0,
       "track_send_history": false,
       "tracker_type": "string",
       "track_deep_sort_matching_threshold": 0,
       "track_deep_sort_filter_unconfirmed_tracks": false,
       "filter_track_min_duration_frames": 0
     },
     "car": {
       "filter_max_size": 0,
       "filter_min_quality": 0,
       "filter_min_size": 0,
       "fullframe_crop_rot": false,
       "fullframe_use_png": false,
       "jpeg_quality": 0,
       "overall_only": false,
       "post_best_track_frame": false,
       "post_best_track_normalize": false,
       "post_first_track_frame": false,
       "post_last_track_frame": false,
       "realtime_post_every_interval": false,
       "realtime_post_first_immediately": false,
       "realtime_post_interval": 0,
       "roi": "string",
       "track_interpolate_bboxes": false,
       "track_max_duration_frames": 0,
       "track_miss_interval": 0,
       "track_overlap_threshold": 0,
       "track_send_history": false,
       "tracker_type": "string",
       "track_deep_sort_matching_threshold": 0,
       "track_deep_sort_filter_unconfirmed_tracks": false,
       "filter_track_min_duration_frames": 0
     }
   },
   "disable_drops": false,
   "ffmpeg_format": "string",
   "ffmpeg_params": [
     "A"
   ],
   "imotion_threshold": 0,
   "play_speed": 0,
   "rot": "string",
   "router_timeout_ms": 0,
   "router_verify_ssl": false,
   "start_stream_timestamp": 0,
   "stream_data_filter": "string",
   "use_stream_timestamp": false,
   "video_transform": "string",
   "enable_recorder": false,
   "enable_liveness": false,
   "record_audio": false,
   "use_rtsp_time": false
 },
 "source_len": null,
 "health_status": {
   "enabled": false,
   "status": "WAITING_FOR_SYNC",
   "msg": "",
   "statistic": {},
   "code": "red",
   "code_desc": "Videomanager job is missing. Wait for synchronization."
 },
 "finished": false,
 "queued": false,
 "face_count": 0,
 "file_size": 0,
 "created_date": "2025-03-28T14:26:35.641469Z",
 "body_count": 0,
 "car_count": 0,
 "case": null,
 "face_cluster_count": 0,
 "body_cluster_count": 0,
 "car_cluster_count": 0,
 "frame_height": null,
 "frame_width": null,
 "error": null
}

Далее вы можете использовать id добавленного видеоархива, чтобы загрузить видеофайл с помощью метода PUT /videos/{id}/upload/source_file/.

Загрузить видеофайл

Чтобы загрузить видеофайл, используйте следующий метод:

PUT /videos/{id}/upload/source_file/

Запрос содержит обязательный PATH-параметр:

Название

Тип

Описание

id*

integer

Уникальный идентификатор видеоархива.

Прикрепите в тело запроса исходный видеофайл, указав id видеоархива в пути URL.

Возвращает:

  • Created: 201 – в случае успеха.

  • Not Found: 404 – в случае ошибки.

CURL пример

curl -X PUT "http://<findface-ip:port>/videos/6/upload/source_file/" \
 -H "Authorization: Token <token>" \
 -H "Content-Type: video/mp4" \
 --data-binary @sample.mp4

Совет

Замените sample.mp4 на абсолютный путь к видеофайлу, если он не находится в текущей рабочей директории. Пример: --data-binary @"/home/ubuntu/sample.mp4"

Запуск обработки видеоархива

Чтобы запустить обработку видеоархива, используйте следующий метод:

POST /videos/{id}/process/

Запрос содержит id в качестве PATH-параметра. Указанный id представляет собой уникальный идентификатор видеоархива.

CURL пример

curl -X POST "http://<findface-ip:port>/videos/6/process/" \
 -H "Authorization: Token <token>"

Возвращает:

  • OK: 200 – в случае успеха.

  • Not Found: 404 – в случае ошибки.

Полезные API запросы

GET /videos/
POST /videos/
GET /videos/{id}/
PUT /videos/{id}/
DELETE /videos/{id}/
PATCH /videos/{id}/
DELETE /videos/{id}/file/
POST /videos/{id}/process/
GET /videos/{id}/screenshot/
POST /videos/{id}/screenshot/
POST /videos/{id}/stop/
PUT /videos/{id}/upload/source_file/
GET /videos/count/