Как заставить компьютер видеть и думать: Интеграция OpenCV с LLM

Современный подход к компьютерному зрению, объединяющий скорость классических алгоритмов (OpenCV) и интеллектуальный анализ сцен на основе больших языковых моделей (LLM).

Почему этого недостаточно?

Традиционные системы компьютерного зрения (Computer Vision) часто ограничены. Они могут найти объект (например, коробку), но не понимают контекста. Это современный и мощный подход, который часто называют Vision-Language-Action (VLA). Вы превращаете систему из простого «детектора» (который видит коробку) в «агента» (который понимает, что в коробке лежит опасный предмет и нужно вызвать охрану).

🏗 Схема конвейера (Pipeline)

Вот как выглядит архитектура такой системы:

👁️

OpenCV / YOLO

Локальная и быстрая обработка. Обнаружение объекта, получение его координат $(x, y, w, h)$ и вырезание фрагмента (crop).

🧠

Multimodal LLM

Gemini 1.5 Pro, GPT-4o. Получает картинку + текст. Анализирует контекст.

⚖️

Decision Making

LLM возвращает структурированный ответ (например, в JSON), что нужно сделать.

1. OpenCV / YOLO: Локальная и быстрая обработка.
2. Multimodal LLM: Анализ изображения и текста (Gemini, GPT).
3. Decision Making: Принятие решения на основе анализа.

Этапы реализации

1

Этап обнаружения (OpenCV + YOLO)

Для идентификации объектов лучше всего подходит YOLO (You Only Look Once). Она выдает координаты рамок (Bounding Boxes).

Объект считается найденным в прямоугольнике с координатами:
• Верхний левый угол: (x_min, y_min)
• Нижний правый угол: (x_max, y_max)

Для LLM важно нормализовать эти данные (привести к диапазону [0, 1]), чтобы модель понимала масштаб относительно всего кадра.
2

Подготовка данных для LLM

LLM «дорогие» и «медленные» по сравнению с OpenCV. Поэтому мы не отправляем каждый кадр. Мы отправляем кадр только когда:

  • ✓Появился новый объект.
  • ✓Объект совершил значимое действие.
  • ✓Наступило событие по таймеру.
Пример формирования промпта для LLM

Вы передаете изображение и текст:

"На изображении зафиксированы следующие объекты (в нормализованных координатах): 1. Нож: [0.45, 0.50, 0.55, 0.80] 2. Рука человека: [0.30, 0.40, 0.50, 0.70] Ситуация: рука приближается к ножу. Оцени опасность и верни JSON: {"danger_level": 0-10, "action": "stop/ignore"}"
3

Пример кода (Интеграция OpenCV + LLM)

Допустим, мы используем Gemini 1.5 Flash (она очень быстрая и дешевая для таких задач).

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import cv2
import google.generativeai as genai
import PIL.Image

# Настройка API
genai.configure(api_key="YOUR_API_KEY")
model = genai.GenerativeModel('gemini-1.5-flash')

def analyze_scene(frame, detections):
    # 1. Сохраняем временный файл или конвертируем в PIL
    cv2.imwrite("temp_scene.jpg", frame)
    img = PIL.Image.open("temp_scene.jpg")
    
    # 2. Формируем контекст из того, что нашел OpenCV/YOLO
    prompt = f"Я вижу следующие объекты: {detections}. Проанализируй ситуацию и прими решение."
    
    # 3. Запрос к LLM
    response = model.generate_content([prompt, img])
    return response.text

# Пример имитации работы
cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
    
    # ТУТ ЛОГИКА OPENCV ПО ПОИСКУ ОБЪЕКТОВ
    // Допустим, мы нашли объект "Hand" с координатами [100, 100, 200, 200]
    found_objects = [{"label": "hand", "coords": [0.2, 0.2, 0.4, 0.4]}]
    
    # Если нажата клавиша 'a' (анализ)
    if cv2.waitKey(1) & 0xFF == ord('a'):
        decision = analyze_scene(frame, found_objects)
        print(f"Решение LLM: {decision}")

    cv2.imshow('AI Vision', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'): break
                

Преимущества и ограничения

Эффективность ресурсов

Вы не гоняете тяжелую нейросеть (LLM) 30 раз в секунду. OpenCV делает черновую работу на 60 FPS, а LLM включается как «Верховный судья» раз в несколько секунд.

Мультимодальность

LLM может понять то, что не может YOLO. Например, YOLO скажет: «Я вижу бутылку». LLM добавит: «Это бутылка с чистящим средством, ее нельзя оставлять рядом с ребенком...»

Логика на языке

Вам не нужно писать тысячи строк if/else. Вы просто объясняете модели правила: «Если человек без каски в зоне А — выдай предупреждение».

Сложности, с которыми вы столкнетесь:

  • Latency (Задержка)

    Ответ от облачной LLM идет 1-3 секунды. Для мгновенной остановки станка это не подойдет, но для систем мониторинга или умного дома — отлично.

  • Цена

    Каждый запрос стоит токенов. Поэтому важно отфильтровывать «пустые» кадры с помощью OpenCV (детектор движения).

  • Конфиденциальность

    Отправка кадров в облако. (Решается запуском локальных моделей типа Llava или MoonDream, но для них нужна мощная видеокарта).