sauron-cv/ROADMAP.md

5.2 KiB
Executable File

Sauron Roadmap

Phase 1: Minimum Viable Product

  • Communication protocol
    • Determine how our networking protocol will work
      • Protocol must support sending video at low latency
      • Protocol must be lightweight enough to support at least 480p at 15FPS through an Arduino
      • Protocol must have reasonable handling of packet loss or reordering (if we're using UDP, this is especially important)
    • Determine if compression is viable
      • How expensive is compression on microcontrollers (i.e. Arduino)? Do we get better throughput if we just lower framerates?
    • Account for security features, at least to add in the future (encryption? checksum matching? something to make sure that we don't get man-in-the-middle'd?)
  • sauron-client
    • Baseline Linux client written
      • Can read data from most USB webcam devices (whatever the most standard format is, we go with it)
      • Can transmit data to sauron-server using communication protocol
      • Can read response data and print to console
  • sauron-server
    • Can accept real-time communication from external sources
      • Can read video streams using communication protocol
      • Can execute scripts according to which endpoint the client hits
      • Can gracefully handle lost connection, latency, etc.
    • Can move data into / out of scripts
      • Interprets video stream into single images that scripts can operate on
      • Packages/serializes return data from scripts
      • Handles script errors gracefully
    • Can return serialized data to client
      • Preferably using same data stream
    • Can manage scripts manually through shell interaction / secure file transfer
      • scripts transferred via rsync/SCP are recognized
      • scripts cloned from git are recognized
        • Nice to have: Changes to remote repository are optionally automatically synchronized (either by periodic checks, or by having CI poke the server into updating)
  • sauron-bundle
    • Python
      • Support writing scripts in Python (probably a function in a decorator)
      • Handle converting data into OpenCV-friendly format (NumPy array) automatically
  • Build tools
    • Build process for sauron-server is configured
      • Builds third-party libraries for scripts with hardware acceleration support (has to be configured by user)
    • Build process for sauron-client is configured
      • Nice to have: Building deb packages (I think that's what pi uses?) with support for software encoding is automated
      • Can be built with hardware acceleration support
    • Testing
      • All functionality has appropriate unit testing written

Phase 2

  • Protocol upgrades
    • TBD
  • sauron-client
    • Arduino implementation
      • Can read data from SPI camera
      • Can transmit data using (some common) Wi-Fi module
    • Pi Pico implementation
      • Can read data from SPI camera
      • Can transmit data using (some common) Wi-Fi module
      • Probably written in Rust (idk)
    • Identify other commonly used embedded platforms (for implementation in phase 3)
      • Other camera implementations
      • Other common Wi-Fi modules
  • sauron-server
    • Improve performace as needed
    • Add access control support (IP whitelisting? API tokens?)
    • Add support for extending with optional modules
      • Create a REST API for admin/user interaction
        • tandem with access control support
    • Add support for compiling C++ scripts
  • Optional Web Service Frontends
    • Develop baseline infrastructure for webapps (low-level JS libraries, API interactions, etc.)
    • sauron-admin
      • Users must authenticate using username/password (in existing access control) to access console
      • Authenticated users can manage scripts
        • Users can upload bundle files, or directories in tarball/zip format
        • Users can add new git repository scripts
        • Users can manually pull changes on git repository scripts
      • Authenticated users can manage server configuration
        • Probably just editing config files in a text editor, or provide at least some config in a GUI
    • sauron-liveview
      • Users can see all connected clients
      • Users can view live video from clients
      • Integrated with sauron-admin (if both are installed, admins can view live feed from admin console)
      • Nice to have: Require authentication (this can be turned on/off by admins)
  • sauron-bundle
    • Debug images can be generated and served using liveview frontend
    • C++
      • Support writing scripts in C++
  • Build tools
    • sauron-server build automation
      • Hardware acceleration configuration can be (somewhat) automated for CUDA
    • sauron-client build automation
      • packages for Pi support hardware acceleration
      • packages for other distros being built
      • Nice to have: Automated linting / compile checks for embedded platforms
    • Testing
      • All functionality has appropriate unit testing written

Phase 3

  • TBD