What Camera Source Types Does the Multi-Cam Face Tracker Support?

The Multi-Cam Face Tracker supports local webcams via device indices, local video files through file system paths, and network streams via RTSP or HTTP URLs, all unified through OpenCV's VideoCapture interface.

The Multi-Cam Face Tracker is an open-source computer vision application designed to process multiple video inputs simultaneously for face detection and tracking. Configuring diverse camera sources properly is critical for deploying the system across different environments. According to the source code in core/camera_manager.py, the system leverages OpenCV's flexible input handling to support virtually any video source that OpenCV can decode.

How the Camera Manager Handles Source Types

The CameraManager class determines the input type dynamically when initializing each camera. In core/camera_manager.py (lines 41-43), the system inspects the source field from the YAML configuration and automatically converts numeric strings to integers while leaving other strings unchanged:

source = int(cam_config.source) if str(cam_config.source).isdigit() else cam_config.source
cap = cv2.VideoCapture(source)

This implementation delegates source interpretation directly to OpenCV's VideoCapture, which natively handles device indices, file paths, URLs, and GStreamer pipelines.

Supported Camera Source Types

The Multi-Cam Face Tracker accommodates four primary input categories through the configuration file:

Local Webcams and Capture Devices Specify the device index as a numeric string (e.g., "0" for the first webcam, "1" for the second). The system converts these to integers that OpenCV interprets as direct hardware references.

Video Files Provide absolute or relative file paths to supported video formats (MP4, AVI, MKV, etc.). The system processes these frame-by-frame identical to live camera feeds, enabling testing with pre-recorded footage.

Network Streams (IP Cameras) Enter RTSP or HTTP URLs such as rtsp://192.168.1.100:554/stream or http://camera.local/video.mjpg. This enables integration with IP cameras, CCTV systems, and streaming servers without additional drivers.

GStreamer Pipelines Advanced users can supply complete GStreamer pipeline strings for custom video processing chains, such as "gst-launch-1.0 v4l2src ! videoconvert ! appsink".

Configuration and Implementation Examples

YAML Configuration for Multiple Source Types

Define diverse camera sources in your camera_config.yaml file. While this file is not present in the repository by default, the manager expects this structure:

cameras:
  - id: 1
    name: "Built-in webcam"
    source: "0"
    enabled: true
    resolution:
      width: 1280
      height: 720
    fps: 30

  - id: 2
    name: "Sample video file"
    source: "/home/user/videos/demo.mp4"
    enabled: true
    resolution:
      width: 640
      height: 480
    fps: 25

  - id: 3
    name: "IP camera (RTSP)"
    source: "rtsp://192.168.1.100:554/stream1"
    enabled: true
    resolution:
      width: 1920
      height: 1080
    fps: 30

Programmatic Camera Initialization

As implemented in ui/main_window.py, instantiate the manager and start capture sessions:

from core.camera_manager import CameraManager

# Initialize manager with configuration file

cam_manager = CameraManager('config/camera_config.yaml')

# Start all enabled cameras (webcam, file, or network)

cam_manager.start_all_cameras()

# Retrieve latest frame from camera ID 2

frame = cam_manager.get_frame(2)
if frame is not None:
    # Process frame for face detection

    pass

Runtime Source Switching

Modify camera sources dynamically without restarting the application:


# Stop the specific camera

cam_manager.stop_camera(3)

# Update configuration with new RTSP URL

cam_manager.cameras[3].source = "rtsp://192.168.1.101:554/altstream"

# Restart camera with new source

cam_manager.start_camera(3)

Summary

  • The Multi-Cam Face Tracker uses core/camera_manager.py to abstract video input handling through OpenCV's VideoCapture API.
  • Supported camera source types include integer device indices for webcams, file system paths for video files, and network URLs for IP cameras.
  • The system automatically converts numeric strings to integers while passing URL strings directly to OpenCV, supporting RTSP, HTTP, and GStreamer pipelines.
  • Configuration occurs via YAML files, with full programmatic control available through the CameraManager class methods.
  • Runtime source switching is supported, enabling dynamic reconfiguration of IP camera endpoints without application restarts.

Frequently Asked Questions

Can I use multiple USB webcams simultaneously?

Yes. Assign each webcam a unique device index (e.g., "0", "1", "2") in the YAML configuration. Ensure your system has sufficient USB bandwidth and that the operating system recognizes each device independently. OpenCV will access each index as a separate capture device.

Does the tracker support IP cameras and CCTV systems?

Absolutely. The system accepts RTSP and HTTP URLs in the source field, making it compatible with most modern IP cameras, network video recorders (NVRs), and streaming servers. Simply specify the full URL including the protocol and port number.

What video file formats are compatible?

Any format supported by your system's FFmpeg or OpenCV installation will work, including MP4, AVI, MOV, and MKV. The file path is passed directly to cv2.VideoCapture, which handles all decoding internally using available codecs.

How do I change camera sources without restarting the application?

Use the stop_camera() method to halt the current stream, update the source attribute on the camera configuration object, then call start_camera() to reinitialize with the new input. This workflow is particularly useful for switching between different RTSP streams or replacing a failed camera endpoint.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →