Как настроить индексирование и поиск по видео в бесплатных ПО
Коротко: расскажу, как из записей с камер сделать полнотекстовый и визуальный поиск без дорогих систем. Подойдёт для дома, магазина или интегратору, который хочет дать клиенту быстрый доступ к нужным фрагментам.
Зачем индексировать видео
Видео само по себе громоздкое. Индексирование превращает записи в метаданные: кто/что/когда, текст (речь, табличка), векторы признаков. Это даёт быстрый поиск по событиям, людям, номерным знакам и визуальному сходству. Для охраны это экономия времени при расследовании, для бизнеса — аналитика потоков и очередей.
Индексирование — это не про хранение всей записи, а про хранение «карты» того, что в ней происходит.
Общая архитектура (схема)
Простой конвейер:
- Источник: IP-камера или регистратор (NVR).
- Захват/трансформация: FFmpeg — декод, кадрирование, нарезка.
- Выделение ключевых кадров: PySceneDetect или простая выборка каждые N секунд.
- Аналитика: YOLO/Detectron2 (объекты), face_recognition/InsightFace, Tesseract OCR, Vosk ASR, CLIP/ResNet для эмбеддингов.
- Хранилище метаданных: Elasticsearch/OpenSearch (текст, поля), Milvus/FAISS (векторы).
- Поисковый интерфейс: веб UI с timeline, превью через FFmpeg seek.
Текстовая схема в одну строку:
камера → FFmpeg → keyframes → аналитика → JSON → Elasticsearch + Milvus → UI
Какие бесплатные инструменты использовать
| Задача | Инструмент | Плюсы | Минусы |
| Декод/нарезка | FFmpeg | быстро, стабильно | командная строка |
| Ключевые кадры | PySceneDetect | чёткое разделение сцен | иногда много мелких сцен |
| Детекция объектов | YOLOv5/v8 (Ultralytics) | точный, активное сообщество | требует GPU для скорости |
| Лицо | face_recognition / InsightFace | хорошие эмбеддинги | чувствительны к качеству кадра |
| OCR | Tesseract | бесплатно, хорошо для чётких символов | плохо с мелким/размытым текстом |
| ASR (речь в текст) | Vosk | офлайн, русская модель | неточно при шуме |
| Текстовый индекс | Elasticsearch / OpenSearch | мощный поиск, агрегации | памяти много |
| Векторный поиск | FAISS / Milvus | быстрый поиск похожих | настройка сложнее |
Пошаговая схема настройки
1. Захват и хранение
Для начала подключите поток с камеры к серверу/регистратору. Если уже используете NVR, убедитесь, что он хранит метаданные времени и идентификатор камеры. Посмотрите подходящие решения в каталоге систем видеонаблюдения — https://y-ss.ru/catalog/sistemy_videonablyudeniya/ или общую витрину https://y-ss.ru/catalog/.
2. Выделение кадров и нарезка
Настройте FFmpeg на извлечение ключевых кадров или снимков через N секунд. PySceneDetect поможет, если важно отделять сцены. Храните кадры в структуре вида /camera_id/date/time.jpg.
3. Аналитика и извлечение метаданных
Запустите модели:
- YOLO — детекцирует объекты (человек, автомобиль).
- face_recognition — находит и сохраняет эмбеддинги лиц.
- Tesseract — OCR текст с табличек/этикеток.
- Vosk — преобразует звук в текст при наличии аудио.
Сохраняйте результаты в JSON:
{ camera, timestamp, objects:[{class, bbox, conf}], faces:[{id, vector}], ocr_text, asr_text }
4. Индексация
- По тексту (OCR, ASR, метки) — в Elasticsearch. Настройте поля: camera, time, tags, full_text.
- По вектору (эмбеддинги лиц/кадров) — Milvus или FAISS. Храните связь vector_id ↔ Elasticsearch_doc_id.
5. Интерфейс поиска
Сделайте простую веб-страницу: поиск по словам (Elasticsearch), фильтр по времени/камере, поиск по картинке (клик на превью — получить эмбеддинг, найти похожие через Milvus). Для предпросмотра извлекайте видеофрагменты через FFmpeg по timestamp.
Пример расчёта: хранение и нагрузка
Допустим, 4 камеры, 1080p@25fps, 3 месяца архива:
- Кодируем H.264 ~2 Mbps на камеру → 2 Mb/s × 4 = 8 Mb/s ≈ 3.6 GB/сутки.
- За 90 дней ≈ 324 GB.
Метаданные: если одно JSON ~2 KB на событие, 1000 событий/день → 2 MB/день → копейки по сравнению с видео.
Оборудование и производительность
- CPU подойдёт для небольших сетапов. Для YOLO/CLIP нужен GPU (NVIDIA с CUDA).
- Для 4–8 потоков разумный сервер: GPU 8–12 GB, 32–64 GB RAM, быстрые SSD для индексов.
Юридика и безопасность
- Храните логи доступа и разграничивайте права.
- В России действуют требования к персональным данным и видеонаблюдению в отдельных сферах. Оповещение сотрудников/посетителей и сроки хранения важны.
- Шифруйте резервные копии и ставьте бэкап политики.
Чек‑лист перед запуском
- Есть доступ к RTSP/HTTP потоку камеры.
- Сервер с FFmpeg и Python (или контейнерами).
- Выбраны модели детекции и распознавания.
- Elasticsearch или OpenSearch развернуты, тестовые индексы созданы.
- Milvus/FAISS запущены, есть процесс загрузки эмбеддингов.
- UI/API умеют искать по времени и по картинке.
- Определены правила хранения, шифрование и бэкап.
Сравнение быстрых сценариев
| Цель | Минимальное решение | Расширенное |
| Поиск по слову (табличка, речь) | FFmpeg → Tesseract/Vosk → Elasticsearch | + улучшенные модели OCR, постобработка |
| Поиск похожих лиц | face_recognition → FAISS | + InsightFace, Milvus, масштабирование |
| Поиск по образу (пример кадра) | CLIP эмбеддинги → FAISS | + fine-tune, векторный фильтр по времени |
Где взять оборудование и готовые системы
Если нужна камера, регистратор или готовый VMS, смотрите каталог решений: https://y-ss.ru/catalog/sistemy_videonablyudeniya/ и общий каталог https://y-ss.ru/catalog/. Там есть камеры, NVR и периферия, которые легко интегрировать в описанную схему.
Небольшая мысль в конце
Начните с одной камеры и базовой цепочки: захват → ключевые кадры → Elasticsearch. Когда понимание появится, добавляйте модели и векторный поиск. Так вы увидите, что реально важно в вашей системе, и не потратите ресурсы зря.