LeRobot documentation

Камеры

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.7.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Камеры

LeRobot предлагает несколько вариантов записи видео:

КлассПоддерживаемые камеры
OpenCVCameraТелефон, встроенная в ноутбук камера, USB-веб-камеры
ZMQCameraСетевые камеры
RealSenseCameraIntel RealSense (с глубиной)
Reachy2CameraКамеры робота Reachy 2

Сведения о совместимости с OpenCVCamera приведены в разделе Обзор ввода-вывода видео с OpenCV.

Найдите свою камеру

Каждая камера требует уникального идентификатора для инициализации, что позволяет различать несколько подключенных устройств.

OpenCVCamera и RealSenseCamera поддерживают автоматическое обнаружение устройств. Выполните команду ниже, чтобы получить список доступных устройств и их идентификаторов. Обратите внимание, что эти идентификаторы могут измениться после перезагрузки компьютера или повторного подключения камеры, в зависимости от вашей операционной системы.

lerobot-find-cameras opencv # or realsense for Intel Realsense cameras

Если подключено две камеры, вывод будет примерно таким:

--- Detected Cameras ---
Camera #0:
  Name: OpenCV Camera @ 0
  Type: OpenCV
  Id: 0
  Backend api: AVFOUNDATION
  Default stream profile:
    Format: 16.0
    Width: 1920
    Height: 1080
    Fps: 15.0
--------------------
(more cameras ...)

При использовании камер Intel RealSense в macOS может возникать ошибка: Error finding RealSense cameras: failed to set power state. Чтобы её устранить, выполните ту же команду с правами sudo. Обратите внимание, что использование камер RealSense в macOS нестабильно.

ZMQCamera и Reachy2Camera не поддерживают автоматическое обнаружение. Их необходимо настроить вручную, указав сетевой адрес и порт или параметры SDK робота.

Расположение камеры и освещение

Изображения с камеры — это то, на основе чего обучается ваша политика, поэтому правильная настройка камеры важнее высокого разрешения:

  • Освещайте сцену равномерно. Используйте рассеянный, стабильный свет и избегайте прямого солнечного света, сильных бликов и движущихся теней. Различия в освещении между записью и эксплуатацией могут привести к сбою политики.
  • Закрепите камеры. Установите их жёстко и не перемещайте между сессиями записи, а также между записью и развёртыванием.
  • Определите задачу. Объект, захват и цель должны быть видны как минимум в одной камере. Хороший тест: смогли бы вы выполнить задачу, глядя только на изображения с камер?
  • Держите разрешение умеренным. 640×480 при 30 кадрах в секунду достаточно для большинства задач и позволяет ускорить запись и обучение.

Использование камер

Режимы доступа к кадрам

Все классы камер реализуют три режима доступа для захвата кадров:

МетодПоведениеБлоки?Лучше всего подходит для
read()Ожидает возврата кадра от аппаратного обеспечения камеры. Может блокироваться на длительное время в зависимости от камеры и SDK.ДаПростые скрипты, последовательный захват
async_read(timeout_ms)Возвращает последнюю непрочитанную рамку из фонового потока. Блокируется только при пустом буфере, максимум на timeout_ms. Вызывает TimeoutError, если рамка не поступает.С таймаутомЦиклы управления, синхронизированные с частотой кадров камеры
read_latest(max_age_ms)Просматривает последний кадр в буфере (может быть устаревшим). Вызывает TimeoutError, если возраст кадра превышает max_age_ms.НетВизуализация в интерфейсе, ведение журналов, мониторинг

Примеры использования

Приведённые ниже примеры показывают, как использовать API камеры для настройки и захвата кадров с различных типов камер.

  • Блокирующая и неблокирующая захват кадров с камерой на базе OpenCV
  • Захват цвета и глубины с помощью камеры Intel RealSense

Некорректное отключение камер может привести к утечкам ресурсов. Используйте протокол менеджера контекста для обеспечения автоматической очистки:

with OpenCVCamera(config) as camera:
    ...

Вы также можете вызывать connect() и disconnect() вручную, но для последнего всегда используйте блок finally.

Open CV Camera
Камера Intel Realsense
from lerobot.cameras.opencv import OpenCVCamera, OpenCVCameraConfig
from lerobot.cameras import ColorMode, Cv2Rotation

# Construct an `OpenCVCameraConfig` with your desired FPS, resolution, color mode, and rotation.
config = OpenCVCameraConfig(
    index_or_path=0,
    fps=15,
    width=1920,
    height=1080,
    color_mode=ColorMode.RGB,
    rotation=Cv2Rotation.NO_ROTATION
)

# Instantiate and connect an `OpenCVCamera`, performing a warm-up read (default).
with OpenCVCamera(config) as camera:

    # Read a frame synchronously — blocks until hardware delivers a new frame
    frame = camera.read()
    print(f"read() call returned frame with shape:", frame.shape)

    # Read a frame asynchronously with a timeout — returns the latest unconsumed frame or waits up to timeout_ms for a new one
    try:
        for i in range(10):
            frame = camera.async_read(timeout_ms=200)
            print(f"async_read call returned frame {i} with shape:", frame.shape)
    except TimeoutError as e:
        print(f"No frame received within timeout: {e}")

    # Instantly return a frame - returns the most recent frame captured by the camera
    try:
        initial_frame = camera.read_latest(max_age_ms=1000)
        for i in range(10):
            frame = camera.read_latest(max_age_ms=1000)
            print(f"read_latest call returned frame {i} with shape:", frame.shape)
            print(f"Was a new frame received by the camera? {not (initial_frame == frame).any()}")
    except TimeoutError as e:
        print(f"Frame too old: {e}")

Работа с глубиной

Камеры Intel RealSense и Reachy 2 могут захватывать цветные и глубинные данные синхронно. Вызов read() возвращает кадр color в формате (H, W, 3) uint8. Вызов read_depth() возвращает карту глубины в формате (H, W, 1) uint16, где значение каждого пикселя представляет расстояние от датчика, выраженное в миллиметрах. Значение пикселя 0 обычно означает «измерение недоступно» (вне диапазона, перекрыто или низкая уверенность).

Во время записи контрольный цикл неблокирующе считывает самые свежие кадры из буфера с помощью read_latest() (цвет) и read_latest_depth() (глубина), добавляя карту глубины как соседний признак (например, front_depth рядом с front).

Сведения о том, как потоки глубины хранятся и кодируются при записи набора данных, приведены в разделе Depth streams руководства по кодированию видео.

Используйте камеру вашего телефона

iPhone и macOS
Виртуальная камера OBS

Чтобы использовать iPhone в качестве камеры на macOS, включите функцию Continuity Camera:

  • Убедитесь, что на вашем Mac установлена macOS 13 или более поздняя версия, а на вашем iPhone — iOS 16 или более поздняя версия.
  • Войдите на обоих устройствах с одним и тем же Apple ID.
  • Подключите устройства с помощью USB-кабеля или включите Wi-Fi и Bluetooth для беспроводного соединения.

Для получения подробной информации посетите Apple support.

Если всё настроено правильно, ваш телефон будет отображаться как стандартная камера OpenCV и сможет использоваться с OpenCVCamera.

Update on GitHub