Добавить в корзинуПозвонить
Найти в Дзене
Цифровая Переплавка

📹 WebRTC + GoCV: минимализм для компьютерного зрения

Проект gocv-to-webrtc показывает удивительно простую, но мощную связку: взять поток с веб-камеры, прогнать его через FFmpeg и отправить в браузер по WebRTC. Всё — на Go, без лишних обвязок и сложных фронтендов. В основе лежат четыре компонента: 📸 GoCV — подключается к камере и читает кадры в формате BGR.
🎞 FFmpeg — кодирует их в VP8 (IVF), обеспечивая реальное сжатие «на лету».
🌐 Pion WebRTC — создаёт PeerConnection, принимает/отправляет SDP и стримит видео в браузер.
💻 HTML/JS — минимальная страница с <video> и логикой Offer/Answer. На сервере Go запускает HTTP-эндпоинт /offer, принимает SDP от клиента, отвечает Answer-ом и после ICE-negotiation начинает транслировать VP8 кадры прямо в <video>. Для меня этот проект — не просто демо, а шаблон для настоящих CV-приложений: 🤖 Компьютерное зрение: к GoCV легко подключить каскады Хаара, модели TensorFlow или YOLO. Можно в реальном времени распознавать лица, жесты, объекты и транслировать результат в браузер. 📡 IoT-сценарии: подключить
Оглавление

Проект gocv-to-webrtc показывает удивительно простую, но мощную связку: взять поток с веб-камеры, прогнать его через FFmpeg и отправить в браузер по WebRTC. Всё — на Go, без лишних обвязок и сложных фронтендов.

🧩 Как это работает

В основе лежат четыре компонента:

📸 GoCV — подключается к камере и читает кадры в формате BGR.
🎞
FFmpeg — кодирует их в VP8 (IVF), обеспечивая реальное сжатие «на лету».
🌐
Pion WebRTC — создаёт PeerConnection, принимает/отправляет SDP и стримит видео в браузер.
💻
HTML/JS — минимальная страница с <video> и логикой Offer/Answer.

На сервере Go запускает HTTP-эндпоинт /offer, принимает SDP от клиента, отвечает Answer-ом и после ICE-negotiation начинает транслировать VP8 кадры прямо в <video>.

⚙️ Технические детали

  • Поток кадров из камеры идёт через пайп в FFmpeg:
    ffmpeg -f rawvideo -pixel_format bgr24 -video_size 640x480 -framerate 30 -i pipe:0 \
    -c:v libvpx -b:v 1M -f ivf pipe:1
  • Выход читается ivfreader и превращается в WebRTC-трафик.
  • На фронте достаточно пары строк JS: RTCPeerConnection, recvonly video-track и <video autoplay>.

🚀 Почему это интересно

Для меня этот проект — не просто демо, а шаблон для настоящих CV-приложений:

🤖 Компьютерное зрение: к GoCV легко подключить каскады Хаара, модели TensorFlow или YOLO. Можно в реальном времени распознавать лица, жесты, объекты и транслировать результат в браузер.

📡 IoT-сценарии: подключить камеру Raspberry Pi, передавать поток через WebRTC без тяжёлых серверов.

🎮 Интерактивные сервисы: от телеметрии дронов до браузерных игр с CV-элементами.

Минимум зависимостей: никаких Node.js-сервисов или громоздких фронтовых SDK. Go + FFmpeg + WebRTC.

💡 Мой взгляд

Меня особенно радует архитектура «unix-way»: каждая часть делает свою задачу идеально. GoCV работает с камерой, FFmpeg кодирует, Pion WebRTC доставляет, браузер отображает. Вместо монолита — связка простых и надёжных инструментов.

Такой подход хорош ещё и тем, что даёт разработчику полный контроль. Можно менять кодек, битрейт, частоту кадров, а при желании даже внедрить собственный pipeline обработки изображений.

Если честно, я вижу в этом идеальный старт для небольших стартапов в области CV: минимум кода, максимум гибкости.

📚 Ссылки:
🔗 Репозиторий:
gocv-to-webrtc на GitHub
🔗 GoCV:
gocv.io
🔗 Pion WebRTC:
github.com/pion/webrtc