Обновлено: июль 2026. Автор: редакция Зерокодера, практика компьютерного зрения на Python.
Чтобы подключить нейросеть к веб-камере, захватите видеопоток через OpenCV (cv2.VideoCapture(0)), читайте кадры в цикле методом cap.read() и прогоняйте каждый кадр через модель детекции — например YOLO. Модель возвращает координаты найденных объектов (bounding box), которые вы рисуете поверх кадра и показываете через cv2.imshow(). Весь конвейер укладывается в один цикл Python.
from ultralytics import YOLO
import cv2
model = YOLO("yolov8n.pt") # предобученная модель детекции
cap = cv2.VideoCapture(0) # камера с индексом 0
while True:
ret, frame = cap.read()
if not ret:
break
results = model(frame) # инференс по одному кадру
annotated = results[0].plot() # кадр с нарисованными рамками
cv2.imshow("Webcam AI", annotated)
if cv2.waitKey(1) == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
Ниже — из чего собирается этот конвейер, какую модель выбрать под задачу и как удержать приемлемый FPS.
- Захват видео —
cv2.VideoCapture(0)открывает камеру,cap.read()отдаёт кадр как NumPy-массив. - Инференс — каждый кадр прогоняется через нейросеть: YOLO (детекция объектов), MediaPipe (лица, руки, поза) или MobileNet SSD через
cv2.dnn. - Отрисовка — координаты рамок наносятся поверх кадра, окно обновляется в реальном времени.
- Выбор модели — берите готовую предобученную; своя разметка и обучение нужны только под нестандартные классы.
- Производительность — узкое место обычно инференс, а не захват; лёгкие модели и GPU держат real-time.
Как получить видео с веб-камеры через OpenCV
Точка входа для нейросети с камерой — объект VideoCapture (документация OpenCV). Индекс 0 — это первая подключённая камера; для второй камеры или USB-устройства ставьте 1, 2 и так далее. Перед циклом проверяйте cap.isOpened(), иначе на кадре с закрытой камерой программа упадёт.
import cv2
cap = cv2.VideoCapture(0)
if not cap.isOpened():
raise RuntimeError("Камера не открылась")
while True:
ret, frame = cap.read() # ret — успех, frame — сам кадр
if not ret:
break
cv2.imshow("frame", frame)
if cv2.waitKey(1) == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
Разрешение потока читается и меняется через свойства: cap.get(cv2.CAP_PROP_FRAME_WIDTH) и cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640). Уменьшение разрешения — самый дешёвый способ поднять FPS: чем меньше пикселей на входе, тем быстрее и захват, и инференс. Каждый кадр приходит в формате BGR (не RGB) — это классическая ловушка OpenCV, из-за которой модели, ожидающие RGB, выдают мусор. Конвертируйте через cv2.cvtColor(frame, cv2.COLOR_BGR2RGB), если модель обучена на RGB.
Вывод: захват — это несколько строк, но именно здесь закладываются разрешение, цветовой порядок и корректное освобождение камеры.

- Возможность получить Доступ в Нейроклуб на целый месяц
- Как ИИ ускоряет работу и приносит деньги
- За 2 часа вы получите четкий план, как начать работать с ИИ прямо сейчас!
Как прогнать кадр через нейросеть

Кадр из cap.read() — обычный массив пикселей, который подаётся модели. Дальше расходятся три рабочих пути, и выбор зависит от задачи, а не от моды.
YOLO — детекция объектов «из коробки»
YOLO обрабатывает изображение за один проход через сеть, поэтому она быстрая и подходит для real-time. В экосистеме Ultralytics модель поднимается двумя строками, а на веб-камеру наводится источником source=0 с потоковым режимом stream=True, который отдаёт результаты по одному кадру и не грузит всё в память:
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
results = model(source=0, stream=True) # 0 — индекс камеры
for r in results:
boxes = r.boxes # координаты и уверенность детекций
annotated = r.plot() # кадр с рамками как NumPy-массив
cv2.imshow("YOLO", annotated)
if cv2.waitKey(1) == ord("q"):
break
Суффикс n (nano) в названии — самая лёгкая версия; есть s, m, l, x — тяжелее и точнее. Предобученная модель уже знает 80 классов COCO (человек, машина, собака, телефон и т. д.), поэтому подсчёт людей или транспорта работает без единой строки обучения.
MediaPipe — лица, руки и поза
Если задача не «что за объект», а «где ключевые точки тела», берите MediaPipe от Google. Это набор готовых решений на базе моделей BlazeFace и BlazePose: Face Detection даёт 6 опорных точек лица, Face Mesh — 468 3D-точек, Pose — 33 точки скелета, Hands — 21 точку на кисть. Архитектура MediaPipe устроена умно: детекция запускается один раз, дальше лёгкая модель-трекер ведёт объект по кадрам и повторно детектирует только при падении уверенности — за счёт этого решение держит real-time даже без дискретной видеокарты.
MobileNet SSD через cv2.dnn — без внешних фреймворков
Классический путь на чистом OpenCV: модуль cv2.dnn загружает предобученную сеть Caffe MobileNet SSD (около 21 класса) и работает без TensorFlow и PyTorch. Вариант хорош, когда важна минимальная зависимость и распространение готового бинарника.
Вывод: YOLO — для объектов, MediaPipe — для точек тела и жестов, cv2.dnn — для лёгкого деплоя без тяжёлых фреймворков.
Рабочий пример: захват → инференс → отрисовка bbox
Собираем полный цикл вручную, чтобы видеть каждый шаг — от кадра до нарисованной рамки. Здесь показано, как достать координаты из результата YOLO и нанести прямоугольник и подпись средствами OpenCV, а не только через plot().
from ultralytics import YOLO
import cv2
model = YOLO("yolov8n.pt")
names = model.names
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
results = model(frame, verbose=False)
for box in results[0].boxes:
x1, y1, x2, y2 = map(int, box.xyxy[0]) # углы рамки
cls = int(box.cls[0]) # id класса
conf = float(box.conf[0]) # уверенность
label = f"{names[cls]} {conf:.2f}"
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(frame, label, (x1, y1 - 8),
cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
cv2.imshow("Detections", frame)
if cv2.waitKey(1) == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
Логика применима к любой модели: меняется только строка инференса и способ, которым вы достаёте координаты из ответа. Захват, отрисовка и цикл остаются теми же.
Вывод: bounding box — это четыре числа x1, y1, x2, y2; всё остальное в примере — обвязка OpenCV вокруг них.
Какую модель выбрать: сравнение подходов
Готовых предобученных моделей достаточно почти для любой типовой задачи — обучать своё нужно лишь под редкие классы. Ориентир по выбору:
| Подход | Что делает | Скорость | Когда брать |
|---|---|---|---|
| YOLO (Ultralytics) | Детекция объектов, 80 классов COCO | Высокая, real-time | Подсчёт людей, машин, товаров; трекинг |
| MediaPipe | Лицо, кисти, поза (ключевые точки) | Очень высокая, даже без GPU | Жесты, фитнес, AR-примерка, эмоции |
| MobileNet SSD (cv2.dnn) | Детекция объектов, ~21 класс | Средняя-высокая | Лёгкий деплой без TF/PyTorch |
| Распознавание лиц (face embeddings) | Идентификация «кто это» | Средняя | СКУД, авторизация по лицу |
Внутри YOLO выбор ещё и по размеру: nano-версия летает на CPU, но пропускает мелкие объекты; крупные версии точнее, но требуют GPU для real-time. Практическое правило — начинать с самой лёгкой модели и утяжелять только если точности реально не хватает.
Вывод: сначала определите тип задачи (объекты / точки тела / идентификация), потом — размер модели под ваше железо.
Производительность: как удержать FPS
Узкое место конвейера — почти всегда инференс, а не захват камеры. Реальный FPS зависит от связки «модель × разрешение × железо»: на лёгких моделях и CPU это единицы-десятки кадров в секунду, дискретная видеокарта поднимает планку в разы. Рычаги, которые действительно двигают цифру:
- GPU и PyTorch с CUDA. YOLO на PyTorch автоматически использует видеокарту, если та доступна — это главный ускоритель.
- Разрешение входа. Уменьшите кадр до 640×480 или 416×416 перед инференсом — квадратичная экономия по пикселям.
- Лёгкая модель. nano/small вместо large; MediaPipe вместо тяжёлого детектора, если нужны только точки тела.
- Прореживание кадров. Детектируйте не каждый кадр, а каждый второй-третий, между ними ведите объект трекером — MediaPipe так и устроен внутри.
- Батчинг и async. Захват в одном потоке, инференс в другом, чтобы камера не простаивала во время предсказания.
Если вы осваиваете Python и компьютерное зрение прикладно, такой конвейер — хороший учебный проект: он собирается за вечер и сразу показывает результат на экране. На курсах Зерокодера по нейросетям и Python подобные разборы идут на реальных задачах, а не на «Hello World».
Вывод: сначала измерьте FPS, потом крутите разрешение и размер модели — оптимизировать вслепую бессмысленно.
Практические кейсы
Что реально собирают на связке «камера + нейросеть»:
- Подсчёт людей. YOLO детектирует класс person, счётчик считает пересечения виртуальной линии — база для аналитики проходимости в ретейле.
- Распознавание жестов. MediaPipe Hands отдаёт 21 точку кисти; по их взаимному положению определяются согнутые и разогнутые пальцы — управление без пульта, счёт пальцев, язык жестов.
- Контроль доступа. Распознавание лиц по эмбеддингам сверяет лицо в кадре с базой — вход по лицу вместо пропуска.
- Видеонаблюдение с реакцией. Детекция появления человека или оставленного предмета в зоне — умная охрана вместо записи «в стол».
- Анализ движений и позы. MediaPipe Pose с 33 точками скелета — контроль техники в фитнесе, эргономика рабочего места, реабилитация.
Вывод: тип модели диктует кейс — детекция считает объекты, ключевые точки читают тело и жесты, эмбеддинги идентифицируют личность.
FAQ
Нужна ли видеокарта, чтобы подключить нейросеть к камере?
Нет. Лёгкие модели (YOLO nano, MediaPipe) работают на обычном CPU в реальном времени. GPU нужен для тяжёлых моделей или высокого разрешения, где важна максимальная точность.
Обязательно ли обучать свою нейросеть?
Нет. Предобученные модели уже знают типовые классы: YOLO — 80 классов COCO, MobileNet SSD — около 21. Своё обучение нужно только под нестандартные объекты, которых нет в готовых наборах.
Чем YOLO отличается от MediaPipe?
YOLO отвечает на вопрос «какие объекты в кадре и где» (рамки вокруг предметов). MediaPipe отвечает «где ключевые точки лица, рук и тела» (скелет и landmarks). Для подсчёта предметов берут YOLO, для жестов и позы — MediaPipe.
Почему кадр с камеры выглядит с неправильными цветами в модели?
OpenCV отдаёт кадры в порядке BGR, а большинство моделей ждут RGB. Конвертируйте кадр через cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) перед подачей в сеть.
Как поднять FPS, если видео тормозит?
Уменьшите разрешение входного кадра, возьмите более лёгкую модель, включите GPU и детектируйте не каждый кадр, а через один-два, ведя объект трекером между детекциями.
Итог
Нейросеть с камерой — это цикл из трёх шагов: захват кадра через cv2.VideoCapture, инференс готовой модели и отрисовка результата поверх кадра. OpenCV даёт видеопоток, YOLO или MediaPipe — распознавание, а выбор модели определяется задачей и доступным железом. Начните с лёгкой предобученной модели, измерьте FPS и наращивайте сложность только под реальную нехватку точности.
- Выполним базовые задачи на российских нейросетях и посмотрим на результаты!
- Файл-инструкцию «Как сделать нейро-фотосессию из своего фото бесплатно, без иностранных карт и прочих сложностей»
- Покажем 10+ способов улучшить свою жизнь с ИИ каждому — от ребенка и пенсионера до управленца и предпринимателя
- Возможность получить Доступ в Нейроклуб на целый месяц
- Как ИИ ускоряет работу и приносит деньги
- За 2 часа вы получите четкий план, как начать работать с ИИ прямо сейчас!