LeRobot documentation

Камеры

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