This project is to create a web API for computer vision (CV) that runs on Raspberry PI 4 with 4gb RAM (8gb if needed) and doesn't require external services for runtime tasks.
- API layer requires HTTPS and stand-alone authentication (certificate, password, token ... pick one)
* preferred method is a certificate
* nice-to-have - localhost calls bypass authentication
- API to query detected/recognized objects, their type and their positions in the image.
* if there are no objects, the API should wait for X seconds before returning an empty result (long polling)
* detection + API response in less than 100ms is ideal, less than 200ms is acceptable. The faster - the better.
- API to return the current image from the camera
- concurrent requests should wait for a detection/recognition in progress, not start a new one for every call
- API to return the position(s) and size(s) of a predefined object, some calibration target, along with a number (or other known distinguishing feature) in it. For example, an A4 printed QR code with a number in the middle.
- APIs to read and write the rPi digital pins and return their value
- CV must detect faces, humans, cars, animals and QR codes
* nice to have - if human faces can be recognized without significant loss of performance
* nice to have - if a QR code is detected to return its decoded contents
- CV must be able to handle multiple objects in the same scene. If that matters for latency, humans and human faces are a priority
- CV must be able to use either a rPi camera or a USB one, whatever is plugged into the system at reboot
- CV that also works with IR cameras, as well as normal ones, is preferred
- Latency is most important. If you've done CV on rPi and can demonstrate the CV latency your bid will be preferred.
* once a detection occurs there will be subsequent queries to determine positional changes. Can latency be optimized in this situation?
- All source code will be reviewed, it must be readable, of reasonable quality, and at least somewhat documented.
- not required, but preferred if the web API shell is written in .NET Core
- the code must be able to run for extended periods of time without performance degradation (memory leaks etc)
- documentation for updating the AI models used
- documentation for all steps needed to setup a brand new device