LeRobot documentation

Camera

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Camera

LeRobot cung cấp nhiều tùy chọn cho việc thu video:

LớpCamera được hỗ trợ
OpenCVCameraĐiện thoại, laptop tích hợp sẵn, webcam USB
ZMQCameraCamera kết nối mạng
RealSenseCameraIntel RealSense (có chiều sâu)
Reachy2CameraCamera của robot Reachy 2

Để biết chi tiết về tính tương thích với OpenCVCamera, hãy xem Tổng quan về I/O video với OpenCV.

Tìm camera của bạn

Mỗi camera cần một định danh duy nhất để được khởi tạo, cho phép bạn phân biệt giữa nhiều thiết bị đã kết nối.

OpenCVCamera và RealSenseCamera hỗ trợ tự động phát hiện thiết bị. Chạy lệnh bên dưới để liệt kê các thiết bị khả dụng cùng định danh của chúng. Lưu ý rằng các định danh này có thể thay đổi sau khi khởi động lại máy tính hoặc cắm lại camera, tùy thuộc vào hệ điều hành của bạn.

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

Đầu ra sẽ trông giống như sau nếu bạn kết nối hai camera:

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

Khi sử dụng camera Intel RealSense trên macOS, bạn có thể gặp lỗi này: Error finding RealSense cameras: failed to set power state. Bạn có thể khắc phục bằng cách chạy cùng lệnh đó với quyền sudo. Lưu ý rằng việc sử dụng camera RealSense trên macOS không ổn định.

ZMQCamera và Reachy2Camera không hỗ trợ tự động phát hiện. Bạn phải cấu hình thủ công bằng cách cung cấp địa chỉ mạng và cổng hoặc cài đặt SDK của robot.

Vị trí đặt camera và ánh sáng

Hình ảnh từ camera là thứ mà chính sách của bạn học từ đó, vì vậy một bố trí camera tốt quan trọng hơn độ phân giải cao:

  • Chiếu sáng đều cho toàn cảnh. Sử dụng ánh sáng khuếch tán, đồng nhất và tránh ánh nắng trực tiếp, phản xạ mạnh và bóng đổ di chuyển. Sự khác biệt về ánh sáng giữa lúc ghi hình và triển khai có thể khiến chính sách thất bại.
  • Cố định các camera tại chỗ. Gắn chúng thật chắc chắn và không di chuyển giữa các phiên ghi hình, hoặc giữa lúc ghi hình và triển khai.
  • Định nghĩa bài toán. Đối tượng, gắp và đích đến phải hiển thị được trên ít nhất một camera. Một bài kiểm tra tốt: bạn có thể tự thực hiện bài toán chỉ bằng cách nhìn vào hình ảnh từ camera không?
  • Giữ độ phân giải ở mức vừa phải. 640×480 ở 30 fps là đủ cho hầu hết các tác vụ và giúp quá trình ghi hình cũng như huấn luyện diễn ra nhanh hơn.

Sử dụng camera

Chế độ truy cập khung

Tất cả các lớp camera đều triển khai ba chế độ truy cập để thu thập khung hình:

Phương phápHành viCác khối?Phù hợp nhất cho
read()Chờ phần cứng camera trả về một khung hình. Có thể bị chặn trong thời gian dài tùy thuộc vào camera và SDK.CóCác script đơn giản, bắt đầu tuần tự
async_read(timeout_ms)Trả về khung hình chưa được tiêu thụ gần nhất từ luồng nền. Chỉ bị chặn nếu bộ đệm trống, tối đa timeout_ms. Ném TimeoutError nếu không có khung hình nào đến.Với một thời gian chờVòng lặp điều khiển đồng bộ với FPS của camera
read_latest(max_age_ms)Xem khung gần nhất trong bộ đệm (có thể đã cũ). Gây ra TimeoutError nếu khung cũ hơn max_age_ms.KhôngTrực quan hóa giao diện người dùng, ghi log, giám sát

Ví dụ sử dụng

Các ví dụ sau cho thấy cách sử dụng API camera để cấu hình và chụp khung hình từ các loại camera khác nhau.

  • Chụp khung hình đồng bộ và không đồng bộ bằng camera dựa trên OpenCV
  • Chụp màu và độ sâu bằng camera Intel RealSense

Việc ngắt kết nối camera không sạch sẽ có thể gây rò rỉ tài nguyên. Hãy sử dụng giao thức trình quản lý ngữ cảnh để đảm bảo dọn dẹp tự động:

with OpenCVCamera(config) as camera:
    ...

Bạn cũng có thể gọi connect() và disconnect() thủ công, nhưng luôn luôn sử dụng khối finally cho lệnh sau.

Mở Camera 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}")

Làm việc với độ sâu

Camera Intel RealSense và Reachy 2 có thể ghi nhận cả màu sắc và độ sâu đồng bộ. Gọi read() sẽ trả về khung hình màu dưới dạng (H, W, 3) uint8. Gọi read_depth() sẽ trả về bản đồ độ sâu dưới dạng (H, W, 1) uint16, trong đó giá trị của mỗi pixel là khoảng cách từ cảm biến được biểu diễn bằng milimét. Giá trị pixel là 0 thường có nghĩa là “không có phép đo khả dụng” (ngoài phạm vi, bị che khuất, hoặc độ tin cậy thấp).

Trong quá trình ghi hình, vòng lặp điều khiển đọc các khung hình mới nhất trong bộ đệm một cách không chặn thông qua read_latest() (màu) và read_latest_depth() (độ sâu), thêm bản đồ độ sâu như một đặc trưng anh em (ví dụ front_depth bên cạnh front).

Để biết cách lưu trữ và mã hóa các luồng độ sâu khi ghi lại một bộ dữ liệu, hãy xem phần Depth streams trong hướng dẫn mã hóa video.

Sử dụng camera trên điện thoại của bạn

iPhone & macOS
Camera ảo OBS

Để sử dụng iPhone của bạn như một camera trên macOS, hãy bật tính năng Continuity Camera:

  • Đảm bảo Mac của bạn đang chạy macOS 13 trở lên và iPhone của bạn đang chạy iOS 16 trở lên.
  • Đăng nhập vào cả hai thiết bị bằng cùng một Apple ID.
  • Kết nối thiết bị của bạn bằng cáp USB hoặc bật Wi-Fi và Bluetooth để kết nối không dây.

Để biết thêm chi tiết, hãy truy cập Apple support.

Nếu mọi thứ được thiết lập đúng, điện thoại của bạn sẽ xuất hiện như một camera OpenCV tiêu chuẩn và có thể được sử dụng với OpenCVCamera.

Update on GitHub