LeRobot documentation

Kamera

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Kamera

LeRobot menyediakan beberapa opsi untuk perekaman video:

KelasKamera yang Didukung
OpenCVCameraTelepon, laptop bawaan, webcam USB
ZMQCameraKamera yang terhubung ke jaringan
RealSenseCameraIntel RealSense (dengan kedalaman)
Reachy2CameraKamera robot Reachy 2

Untuk detail kompatibilitas OpenCVCamera, lihat Ikhtisar I/O Video dengan OpenCV.

Temukan kamera Anda

Setiap kamera memerlukan pengenal unik untuk diinstansiasi, sehingga Anda dapat membedakan antara beberapa perangkat yang terhubung.

OpenCVCamera dan RealSenseCamera mendukung auto-discovery. Jalankan perintah di bawah ini untuk menampilkan daftar perangkat yang tersedia beserta identifikatornya. Perhatikan bahwa identifikator ini dapat berubah setelah komputer Anda di-reboot atau kamera dicolok ulang, tergantung pada sistem operasi Anda.

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

Outputnya akan terlihat seperti ini jika Anda memiliki dua kamera yang terhubung:

--- 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 ...)

Saat menggunakan kamera Intel RealSense di macOS, Anda mungkin mendapatkan error ini: Error finding RealSense cameras: failed to set power state. Hal ini dapat diatasi dengan menjalankan perintah yang sama dengan izin sudo. Perhatikan bahwa penggunaan kamera RealSense di macOS tidak stabil.

ZMQCamera dan Reachy2Camera tidak mendukung auto-discovery. Keduanya harus dikonfigurasi secara manual dengan menyediakan alamat jaringan dan port atau pengaturan robot SDK.

Penempatan kamera dan pencahayaan

Gambar kamera adalah hal yang dipelajari oleh kebijakan Anda, sehingga pengaturan kamera yang baik lebih penting daripada resolusi tinggi:

  • Pencahayaan adegan harus merata. Gunakan cahaya difus yang konsisten dan hindari sinar matahari langsung, pantulan kuat, serta bayangan yang bergerak. Perbedaan pencahayaan antara proses perekaman dan penerapan dapat menyebabkan kebijakan gagal.
  • Perbaiki kamera di tempatnya. Pasang dengan kaku dan jangan pindahkan kamera antara sesi perekaman, atau antara perekaman dan deployment.
  • Rumuskan tugasnya. Objek, gripper, dan target harus terlihat di setidaknya satu kamera. Uji yang baik: apakah Anda bisa melakukan tugas tersebut sendiri hanya dengan melihat gambar dari kamera?
  • Jaga resolusi tetap moderat. 640×480 pada 30 fps sudah cukup untuk sebagian besar tugas dan menjaga proses perekaman serta pelatihan tetap cepat.

Gunakan kamera

Mode akses frame

Semua kelas kamera mengimplementasikan tiga mode akses untuk menangkap frame:

MetodePerilakuBlok?Paling Cocok Untuk
read()Menunggu perangkat keras kamera untuk mengembalikan frame. Dapat memblokir untuk waktu yang lama tergantung pada kamera dan SDK.YaSkrip sederhana, penangkapan berurutan
async_read(timeout_ms)Mengembalikan frame terbaru yang belum dikonsumsi dari thread latar. Memblok hanya jika buffer kosong, hingga timeout_ms. Mengangkat TimeoutError jika tidak ada frame yang tiba.Dengan batas waktuLoop kontrol yang disinkronkan dengan FPS kamera
read_latest(max_age_ms)Melihat frame terbaru di buffer (mungkin sudah kedaluwarsa). Mengangkat TimeoutError jika frame lebih tua dari max_age_ms.TidakVisualisasi UI, pencatatan log, pemantauan

Contoh penggunaan

Contoh berikut menunjukkan cara menggunakan API kamera untuk mengonfigurasi dan menangkap frame dari berbagai jenis kamera.

  • Pengambilan frame yang memblokir dan tidak memblokir menggunakan kamera berbasis OpenCV
  • Pengambilan warna dan kedalaman menggunakan kamera Intel RealSense

Gagal memutuskan koneksi kamera dengan bersih dapat menyebabkan kebocoran sumber daya. Gunakan protokol context manager untuk memastikan pembersihan otomatis:

with OpenCVCamera(config) as camera:
    ...

Anda juga dapat memanggil connect() dan disconnect() secara manual, tetapi selalu gunakan blok finally untuk yang terakhir.

Buka Kamera CV
Kamera 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}")

Bekerja dengan kedalaman

Kamera Intel RealSense dan Reachy 2 dapat menangkap warna dan kedalaman secara serempak. Memanggil read() mengembalikan frame warna sebagai (H, W, 3) uint8. Memanggil read_depth() mengembalikan peta kedalaman sebagai (H, W, 1) uint16, di mana setiap nilai piksel adalah jarak dari sensor yang dinyatakan dalam milimeter. Nilai piksel 0 biasanya berarti “tidak ada pengukuran yang tersedia” (di luar jangkauan, terhalang, atau kepercayaan rendah).

Selama perekaman, loop kontrol memeriksa frame terbaru yang dibuffer secara non-blocking melalui read_latest() (warna) dan read_latest_depth() (kedalaman), lalu menambahkan peta kedalaman sebagai fitur saudara (misalnya front_depth di samping front).

Untuk cara stream kedalaman disimpan dan dikodekan saat merekam dataset, lihat bagian Depth streams pada panduan pengkodean video.

Gunakan kamera ponsel Anda

iPhone & macOS
Kamera virtual OBS

Untuk menggunakan iPhone Anda sebagai kamera di macOS, aktifkan fitur Continuity Camera:

  • Pastikan Mac Anda menjalankan macOS 13 atau lebih baru, dan iPhone Anda menggunakan iOS 16 atau lebih baru.
  • Masuk ke kedua perangkat dengan Apple ID yang sama.
  • Hubungkan perangkat Anda dengan kabel USB atau nyalakan Wi-Fi dan Bluetooth untuk koneksi nirkabel.

Untuk detail lebih lanjut, kunjungi dukungan Apple.

Jika semuanya diatur dengan benar, ponsel Anda akan muncul sebagai kamera OpenCV standar dan dapat digunakan dengan OpenCVCamera.

Update on GitHub