Skip to content

Raspberry Pi Camera Plugin Architecture

The Raspberry Pi Camera Plugin enables integration between Raspberry Pi devices with cameras and the CML Reverse Engineering Lab platform. It provides a REST API for remote camera control, image capture, and video streaming to YouTube. See the Raspberry Pi Camera Plugin User Guide for more details.

System diagram

graph TD
    User[User fa:fa-user] -->|Interacts with fa:fa-hand-point-right| MainAPI[Main FastAPI Backend <i class="fa fa-server" style="color:#43a047;"></i>]

    MainAPI -->|API Requests fa:fa-arrow-right|RpiCamAPI[Raspberry Pi Camera API <i class="fab fa-raspberry-pi" style="color:#e91e63;"></i>]
    RpiCamAPI -->|Controls fa:fa-microchip| Camera[Camera Hardware fa:fa-camera-retro]

    RpiCamAPI -->|"Stream (HLS) fa:fa-play-circle"| User
    RpiCamAPI -->|Stream fa:fa-play-circle| YouTube[YouTube API <i class="fab fa-youtube" style="color:#ff0000;"></i>]
    RpiCamAPI -->|Image Capture fa:fa-image| MainAPI
    MainAPI -->|Youtube Integration fa:fa-sign-in-alt| YouTube

    MainAPI -->|Link to Database fa:fa-database| Database[(PostgreSQL <i class="fa fa-database" style="color:#1976d2;"></i>)]

    style User fill:#ffe0b2,stroke:#ff9800,stroke-width:2px;
    style MainAPI fill:#ccebc5,stroke:#43a047,stroke-width:2px;
    style RpiCamAPI fill:#f8bbd0,stroke:#e91e63,stroke-width:2px;
    style Camera fill:#fff9c4,stroke:#fdd835,stroke-width:2px;
    style YouTube fill:#ffe6e6,stroke:#ff0000,stroke-width:2px;
    style Database fill:#bbdefb,stroke:#1976d2,stroke-width:2px;

Interaction flow diagram

sequenceDiagram
    participant User
    participant Backend as Main Backend
    participant YouTubeAPI
    participant RPiCamAPI as Raspberry Pi API
    participant Camera as Camera Hardware

    %% Camera Registration
    User->>Backend: Register camera
    Backend->>Backend: Generate API key
    Backend-->>User: Return camera details & API key

    %% Image Capture Flow
    User->>Backend: Request image capture
    Backend->>RPiCamAPI: Forward request with API key
    RPiCamAPI->>Camera: Control camera
    Camera->>RPiCamAPI: Image data
    RPiCamAPI-->>Backend: Image data & metadata
    Backend->>Backend: Store in database & link to product
    Backend-->>User: Return image

    %% YouTube Streaming Flow
    User->>Backend: Start YouTube recording
    Backend->>YouTubeAPI: Create live event (OAuth)
    YouTubeAPI-->>Backend: Stream key & broadcast info
    Backend->>RPiCamAPI: Start stream with YouTube config
    RPiCamAPI->>Camera: Start recording
    RPiCamAPI->>YouTubeAPI: Direct stream to YouTube
    Backend->>Backend: Save video record in database
    Backend-->>User: Return video details

    %% Local Preview Stream
    User->>Backend: Request preview stream
    Backend->>RPiCamAPI: Start HLS stream
    RPiCamAPI->>Camera: Start streaming
    RPiCamAPI-->>Backend: Stream info
    Backend-->>User: Stream viewer URL
    User->>RPiCamAPI: Direct HLS requests
    RPiCamAPI-->>User: Stream content

    %% Stop Streaming
    User->>Backend: Stop recording/preview
    Backend->>RPiCamAPI: Stop stream
    RPiCamAPI->>Camera: Stop camera