Вот несколько методов работы с камерами в Linux, а также примеры кода:
-
Библиотека OpenCV.
OpenCV – это популярная библиотека компьютерного зрения, обеспечивающая обширную поддержку камер. Вот пример захвата видео с камеры с помощью OpenCV в Python:import cv2 # Open the default camera cap = cv2.VideoCapture(0) while True: # Capture frame-by-frame ret, frame = cap.read() # Display the resulting frame cv2.imshow('Camera', frame) # Break the loop on 'q' key press if cv2.waitKey(1) & 0xFF == ord('q'): break # Release the camera and close the window cap.release() cv2.destroyAllWindows() -
Video4Linux (V4L):
Video4Linux — это API ядра, обеспечивающий поддержку устройств видеозахвата. Вы можете использовать пакетv4l-utilsдля взаимодействия с камерами. Вот пример захвата видео с помощью инструмента командной строкиv4l2-ctl:v4l2-ctl --list-devices # List available video devices v4l2-ctl --device=/dev/video0 --stream-mmap --stream-count=100 --stream-to=output.raw -
GStreamer:
GStreamer — это мультимедийная платформа, поддерживающая захват и обработку данных с камеры. Вот пример захвата видео с помощью инструмента командной строкиgst-launch-1.0:gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! autovideosink -
libuvc:
libuvc — это кроссплатформенная библиотека для USB-видеоустройств. Вот пример захвата видео с использованием libuvc в C:#include <stdio.h> #include <libuvc/libuvc.h> int main() { uvc_context_t *ctx; uvc_device_t *dev; uvc_device_handle_t *devh; uvc_stream_ctrl_t ctrl; // Initialize the context uvc_init(&ctx, NULL); // Find the camera uvc_find_device(ctx, &dev, 0, 0, NULL); // Open the device uvc_open(dev, &devh); // Start the video stream uvc_get_stream_ctrl_format_size(devh, &ctrl, UVC_FRAME_FORMAT_YUYV, 640, 480, 30); uvc_start_streaming(devh, &ctrl, NULL); // Capture frames uvc_frame_t *frame; while (1) { uvc_stream_ctrl_t ctrl; uvc_stream_open_ctrl(devh, &ctrl); uvc_stream_get_frame(devh, &frame, 0); // Process the frame here uvc_stream_close(devh); } // Stop the video stream uvc_stop_streaming(devh); // Close the device and release the context uvc_close(devh); uvc_unref_device(dev); uvc_exit(ctx); return 0; }