sauron-cv/ROADMAP.md

97 lines
5.2 KiB
Markdown
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