Видео
Вывести списком видеоархив
Чтобы составить список видеоархивов, используйте следующий метод:
GET /videos/
Запрос содержит следующие параметры QUERY-STRING:
Название |
Тип |
Описание |
---|---|---|
|
array of integers |
Выбрать видеоархивы, относящиеся к группам камер, ID которых указаны в массиве. |
|
array of integers |
Выбрать видеоархивы, относящиеся к происшествиям, ID которых указаны в массиве. |
|
date-time |
Выбрать видеоархивы, у которых значение |
|
date-time |
Выбрать видеоархивы, у которых значение |
|
number |
Выбрать видеоархивы со значением |
|
date-time |
Выбрать видеоархивы, у которых значение |
|
date-time |
Выбрать видеоархивы, у которых значение |
|
number |
Выбрать видеоархивы со значением |
|
number |
Выбрать видеоархивы со значением |
|
array of integers |
Выбрать видеоархивы, ID которых указаны в массиве. |
|
integer |
Количество выводимых результатов. |
|
string |
Выбрать видеоархивы, в названии которых содержится указанный текст, независимо от регистра. |
|
string |
Поле для сортировки результатов запроса. Допустимые поля: |
|
string |
Значение курсора пагинации. |
Например, укажите значение параметра limit
для ограничения количества результатов на странице.
CURL пример
curl -X GET "http://<findface-ip:port>/videos/?limit=2" \
-H "Authorization: Token <token>"
В случае успешного ответа (OK: 200) возвращается JSON-объект со следующими параметрами:
Название |
Тип |
Описание |
---|---|---|
|
string┃null |
Следующая страница. |
|
string┃null |
Предыдущая страница. |
|
[{…}] |
Массив, содержащий следующие параметры. Пример. |
Примечание
* – означает, что параметр является обязательным. 🆁 – только для чтения.
Название |
Тип |
Описание |
---|---|---|
|
integer 🆁 |
ID видеоархива. |
|
integer |
ID группы камер. |
|
string┃null |
Название видеоархива. Ограничения: минимальное количество символов — 1, максимальное количество символов — 256. |
|
string┃null |
URL исходного видеофайла. |
|
integer┃null |
ID камеры. |
|
date-time 🆁 |
Дата и время начала обработки видео. |
|
boolean 🆁 |
|
|
string┃null |
URL для отправки обнаруженных объектов из |
|
uri 🆁 |
URL скриншота. |
|
object |
Объект, содержащий настройки параметров обработки видео:
|
|
number 🆁 |
Длина источника в секундах. |
|
object |
Объект, содержащий информацию об обработке видео:
Объект также включает дополнительные данные для отображения в пользовательском интерфейсе ( |
|
boolean 🆁 |
|
|
boolean 🆁 |
|
|
integer 🆁 |
Количество созданных лиц. |
|
integer 🆁 |
Размер видеофайла в архиве. |
|
date-time 🆁 |
Дата создания видеоархива. |
|
integer 🆁 |
Количество созданных силуэтов. |
|
integer 🆁 |
Количество созданных транспортных средств. |
|
integer┃null |
ID происшествия. |
|
integer┃null 🆁 |
Количество созданных из видео кластеров лиц. |
|
integer┃null 🆁 |
Количество созданных из видео кластеров силуэтов. |
|
integer┃null 🆁 |
Количество созданных из видео кластеров транспортных средств. |
|
integer 🆁 |
Оригинальная высота кадров (в пикселях), полученных из видеопотока. |
|
integer 🆁 |
Оригинальная ширина кадров (в пикселях), полученных из видеопотока. |
|
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 со следующими параметрами:
Название |
Тип |
Описание |
---|---|---|
|
integer |
ID группы камер. |
|
string┃null |
Название видеоархива. Ограничения: минимальное количество символов — 1, максимальное количество символов — 256. |
|
string┃null |
URL исходного видеофайла, который необходимо загрузить. Вы также можете загрузить исходный видеофайл с помощью метода Ограничение: минимум 1 символ. |
|
integer┃null |
ID камеры. |
|
string┃null |
URL для отправки обнаруженных объектов из |
|
object |
Объект, содержащий настройки параметров обработки видео:
|
|
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-параметр:
Название |
Тип |
Описание |
---|---|---|
|
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/