The purpose of this library is to setup a remotely accessible camera that scans a static location for available parking spots and informs the user about it (i.e., you should be able to trigger a camera via phone/email and receive a message/email about whether a given parking area has a free spot available or not)
Install the corresponding conda environment via
conda env create -f environment.yml
(and don't forget to activate it via conda activate cam
)
- Unit tests
Run unit tests via
python -m unittest
Note: if you are using PyCharm, I would recommend to setup the testing environment as is shown here - Integration tests
TBD
Run black code formatting from the project root directory via
black --line-length 120 .
Note: if you are using PyCharm, I would recommend to setup black as is shown here as default code formatter with the additional argument line-length 120
triggered during every save operation.
Black version used in the code is 21.12b0.
This Repo is built for the purpose of remote parking space monitoring and based on 2 main parts (and 4 resulting features)
- Image acquisition part:
- Feature A > Camera setup: Building a camera setup that allows remote access (e.g., via smartphone)
- Feature B > Server setup: Sending the acquired image to a (remote) server
- Computer Vision part:
- Feature C > Parking space detection: Detection of free parking space based on acquired image
- Feature D > Information sharing: Sharing of results (e.g., just sharing raw image and/or Yes-No result of CV algorithm - i.e., yes there is a free parking spot)
Requirements:
- Needs to be accessible remotely (e.g., via smartphone and/or computer) - e.g., send an e-mail to server -> image acquisition is triggered Initial idea of solution:
- Hook up camera to RaspberryPi which is connected to WiFi
- Triggering TBD
- Image needs to be uploaded to server (can be just simple sharing to Laptop in beginning)
- TBD -> Can be done on local machine in beginning; AWS EC2 instance later
- Probably some simple CNN (e.g., from detectron2) - but should be able to fine-tune based on specific scene of interest (which will be static - i.e., always the same)
- Once results are available, should be shared via e-mail - (can be just sharing of the raw image in beginning)
Level 1 | Level 2 | Level 3 | ||||
---|---|---|---|---|---|---|
Feature | Description | Status | Description | Status | Description | Status |
A > Camera setup | Trigger laptop/smartphone camera from device in same WiFi (e.g., via SSH) | - | Trigger laptop/smartphone camera from device outside of network (e.g., via VPN & SSH?) | - | Standalone camera module connected to Wifi (e.g., RaspberryPi) | - |
B > Server setup | tbd: will likely do this last and run computations locally first | - | - | - | - | - |
C > Parking space detection | Yolov4-tiny to infer number of cars in image (and if less than given number -> assume free spot) | ✅ | TBD | - | Fine-tuned CNN predicting whether free parking spot is available (i.e., yes/no vs n_cars) | - |
D > Information sharing | Programmatically send plain-text e-mail to specified address | ✅ | Send attachments (e.g., image) | - | n/a | - |
E > Forecasting | Take multiple images of parking lot over extended period of time and detect patterns (i.e., forecast expected n_cars in parking lot) | - | n/a | - | n/a | - |