Видео

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

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

GET /videos/

Запрос содержит следующие QUERY-STRING PARAMETERS.

Название

Схема JSON

Описание

case_in

массив из integer

Выбрать видеоролики, относящиеся к нужным событиям.

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 недель (только рабочие дни, исключая субботу и воскресенье).

limit

string

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

name*

string

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

ordering

string

Допустимые значения: id, created_date, name.

page

string

Положение курсора.

save_to

string

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

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

CURL пример

curl -X GET "http://<findface-ip:port>/videos/?limit=2" \
 -H "Accept: application/json" \
 -H "Content-Language: ru" \
 -H "Accept-Language: ru" \
 -H "Authorization: Token <token>" \

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

Название

Схема JSON

next_page

string┃null

prev_page

string┃null

results

массив

results содержат массив со следующими параметрами:

Название

Схема JSON

Описание

id*

integer 🆁

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

camera_group*

integer

Группа камер.

name*

string┃null

Название видеоархива. Максимум 256 символа.

url

string┃null

URL.

camera

integer┃null

Камера.

processing_start_date*

date-time 🆁

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

active*

boolean 🆁

Обработка видео активна.

screenshot*

uri 🆁

URL скриншота.

stream_settings

{…}

Сериализатор mixin, который вызывает ошибку проверки ValidationError, если представлены избыточные поля. Может использоваться во вложенных сериализаторах.

source_len*

number 🆁

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

health_status*

{…}

Дополнительная информация о статусе.

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

Происшествие.

face_cluster_count*

integer┃null 🆁

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

body_cluster_count*

integer┃null 🆁

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

car_cluster_count*

integer┃null 🆁

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

Примечание

Происшествия не поддерживаются в 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": null,
     "active": false,
     "screenshot": "http://<findface-ip:port>/videos/2/screenshot/",
     "stream_settings": {
       "detectors": {
         "face": {
           "filter_max_size": 8192,
           "filter_min_quality": 0.45,
           "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
         },
         "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
     },
     "source_len": null,
     "health_status": {
       "enabled": false,
       "status": "DISABLED",
       "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,
         "job_starts": 0
       },
       "code": "gray",
       "code_desc": "Обработка видео не запущена"
     },
     "finished": false,
     "queued": false,
     "face_count": 0,
     "file_size": 2259950,
     "created_date": "2023-01-12T08:57:36.811305Z",
     "body_count": 0,
     "car_count": 0,
     "case": null,
     "face_cluster_count": 0,
     "body_cluster_count": 0,
     "car_cluster_count": 0
   }
 ]
}

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

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

POST /videos/

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

Название

Схема JSON

Описание

camera_group*

integer

Значение ID группы камер.

name*

string┃null

Название видеоархива (от 1 до 256 знаков).

url

string┃null

Минимум 1 символ.

camera

integer┃null

Камера.

stream_settings

{…}

Сериализатор mixin, который вызывает ошибку проверки ValidationError, если представлены избыточные поля. Может использоваться во вложенных сериализаторах.

case

integer┃null

Происшествие.

Примечание

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

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

Совет

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

{
 "camera_group": 0,
 "name": "A",
 "url": "A",
 "camera": 0,
 "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
     },
     "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
     },
     "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
     }
   },
   "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
 },
 "case": 0
}

Вы можете отправить в запросе следующие параметры.

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

CURL пример

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

Если ответ успешен (Created: 201), то возвращается объект, который содержит следующие параметры. Пример.

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

{
 "id": 6,
 "camera_group": 1,
 "name": "Pitt&Jolie",
 "url": null,
 "camera": null,
 "processing_start_date": null,
 "active": false,
 "screenshot": "http://<findface-ip:port>/videos/6/screenshot/",
 "stream_settings": {
   "detectors": {
     "face": {
       "filter_max_size": 8192,
       "filter_min_quality": 0.45,
       "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
     },
     "body": {
       "filter_max_size": 8192,
       "filter_min_quality": 0.6,
       "filter_min_size": 70,
       "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
     },
     "car": {
       "filter_max_size": 8192,
       "filter_min_quality": 0.73,
       "filter_min_size": 100,
       "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
     }
   }
 },
 "source_len": null,
 "health_status": {
   "enabled": false,
   "status": "WAITING_FOR_SYNC",
   "msg": "",
   "statistic": {},
   "code": "red",
   "code_desc": "Отсутствует задача в видео менеджере. Дождитесь синхронизации."
 },
 "finished": false,
 "queued": false,
 "face_count": 0,
 "file_size": 0,
 "created_date": "2023-01-18T08:38:52.119129Z",
 "body_count": 0,
 "car_count": 0,
 "case": null,
 "face_cluster_count": 0,
 "body_cluster_count": 0,
 "car_cluster_count": 0
}

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

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

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

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

Запрос содержит PATH PARAMETERS:

Название

Схема JSON

Описание

id*

integer

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

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

Возвращает:

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

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

CURL пример

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

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

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

POST /videos/{id}/process/

Запрос содержит id в PATH PARAMETERS, обозначающий уникальный идентификатор видеоархива.

CURL пример

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

Возвращает:

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

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

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

GET /videos/
POST /videos/
GET /videos/{id}/
PUT /videos/{id}/
DELETE /videos/{id}/
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/