Как работает семантический поиск по видео с gemini и sentrysearch
Представь: у тебя есть тысяча часов видео — допустим, записи с камер наблюдения, стримы или архив обучающих роликов. Тебе нужно найти момент, где человек в красной куртке выходит из подъезда. Или где спикер произносит слово «контракт». Как это сделать?
Раньше — только руками, кадр за кадром. Теперь появился другой путь.
Что изменилось
Google обновила Gemini — свою большую языковую модель — и добавила поддержку встраивания (embeddings) видео. Это означает, что модель теперь умеет превращать видео в вектор — набор чисел, который описывает его содержимое. А векторы можно сравнивать между собой и искать похожие.
До этого embeddings работали с текстом и картинками. С видео — нет. Вернее, были обходные пути: разбить видео на кадры, обработать каждый кадр как картинку, потом как-то склеить результаты. Работало? Работало. Но медленно и с потерями.
Теперь всё меняется.
Sentrysearch: субсекундный поиск
Автор проекта SentrySearch построил демонстрацию того, что теперь возможно. Система берёт видео, отправляет его в Gemini 2 (модель называется gemini-embedding-001), получает векторное представление и складывает в базу данных.
Дальше — магия. Когда ты ищешь «человек в красном», система:
- Превращает твой запрос в вектор
- Сравнивает его со всеми векторами в базе
- Возвращает самые похожие фрагменты
Всё это работает меньше чем за секунду.
КАК РАБОТАЕТ ПОИСК В SENTRYSEARCH
───────────────────────────────────
Запрос ──▶ Gemini API ──▶ Вектор запроса
│
▼
Видео ──▶ Gemini API ──▶ Вектор базы ◀────┐
│ │
▼ │
FAISS / Chroma ◀──────────┘
│
▼
Топ-N результатов ◀── Косинусное сходство
Легенда: API = запрос к внешнему сервису,
FAISS = библиотека для быстрого поиска векторов,
Chroma = векторная база данных
Почему это важно? Потому что раньше «семантический» поиск по видео был скорее теоретической возможностью, чем практическим инструментом. Нужно было обрабатывать каждый кадр отдельно, хранить тысячи векторов на одно видео, надеяться, что модель не потеряет контекст между кадрами.
Теперь один вызов API — и всё видео превращено в компактное представление.
Что внутри
Проект использует несколько интересных решений:
- Gemini Embedding 2 — новая модель Google для создания эмбеддингов (векторных представлений). Она понимает и текст, и изображения, и теперь видео.
- Chroma или FAISS — библиотеки для работы с векторами. Chroma — это база данных, которая умеет хранить эмбеддинги и быстро искать похожие. FAISS (Facebook AI Similarity Search) делает то же самое, но на уровне библиотеки — удобно для экспериментов.
- Streamlit — фреймворк для быстрого создания UI (пользовательского интерфейса). Автор сделал простой интерфейс: загружаешь видео → индексируешь → ищешь → получаешь результат.
Вот пример кода из проекта:
from google import genai
client = genai.Client(api_key="...")
response = client.models.embed_content(
model="gemini-embedding-001",
content=video_file,
task_type="SEMANTIC_SIMILARITY"
)
Четыре строчки кода — и видео превращено в эмбеддинг.
Почему это прорыв
Давай подумаем: что такое традиционный поиск по видео?
Ты можешь искать по названию файла (бесполезно). По тегам (нужно тегать вручную). По OCR (распознавание текста на экране) — неплохо для презентаций, но не для событий.
Семантический поиск работает совсем иначе. Ты говоришь «найди момент, где кто-то спорит с охранником» — и система понимает смысл происходящего. Ей не нужны слова «охранник» или «спор» в кадре. Ей достаточно визуального контекста.
Это меняет несколько индустрий:
- Безопасность: можно найти любое событие за секунды вместо часов просмотра записей.
- Образование: студент ищет «объяснение интегралов» внутри лекции.
- Контент-менеджмент: редакторы находят нужный фрагмент в тысячах часов отснятого материала.
- Соцсети: модерация автоматически находит нарушения без просмотра всех роликов.
Ограничения пока есть
Честности ради: технология молодая.
Во-первых, Gemini 2 платная. Каждый вызов API стоит денег (правда, небольших). Для одного-двух видеокliров это не проблема; для миллиона часов контента — уже надо считать бюджет.
Во-вторых, качество зависит от модели. Если ты ищешь что-то очень специфическое («мужчина в синем свитере слева»), результаты могут быть неточными. Модель пока лучше понимает общие концепции («ссора», «погрузка товаров», «автомобиль паркуется»).
В-третьих, latency. Субсекундный результат автор показывает на демке; в реальном продакшене с сотнями одновременных запросов всё может быть сложнее.
Но направление верное: мы движемся к миру, где находить информацию внутри video так же просто, как гуглить текст.
Что мне это напоминает
Это похоже на момент, когда появился полнотекстовый поиск в базах данных вместо ручного grep’а файлов.txt Разница примерно такая же: от «перебираю всё подряд» к «спрашиваю систему and она понимает».
Только теперь это работает не только для текста документов, но и для визуального контента.
Ссылки
- SentrySearch на GitHub — исходный код проекта