ArturoBurela / DeepParking

Find vacant parking spots in indoor and outdoor locations

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

๐Ÿš˜ DeepParking

Find the closest vacant parking spot, every time.

DeepParking is an open-source solution for detecting vacant parking spots in indoor parking garages, and delivering real-time notifications to nearby drivers. Low-cost cameras are mounted throughout garages and mapped to locations of available parking spaces. State-of-the-art deep learning algorithms detect occupied spaces, and write the results to a Redis cache. As drivers enter the garage, they are routed to closest available free parking space.

With DeepParking, you'll never have to waste time hunting for a parking spot again!


๐Ÿ“– Technical Stack

DeepParking prides itself on being a 100% open-source solution, from algorithm to web application.

Web Application

Angular version 6.0.8.

Deep Learning: Object Detection

Leverages the state-of-the-art YOLO v3 real-time object detection system.

Backends

Written in Python 3.6.5 using Flask

Persistent Store

Redis - A blazing fast in-memory database with disk persistence.

Scalable Deployment

Docker, Kubernetes


๐Ÿ“น Hardware Configuration

For optimal results with DeepParking, we recommend using a camera configuration similar to the one shown below. No more than five parking spots should be visible for any single captured frame; a single camera with one degree of rotation can be used to monitor 10 parking spots. It is recommended that an image for each 5-space frame is captured every 15 to 20 seconds.

Estimated cost for 100-car garage: $150


Usage

DeepPark is made up of the following components:

  • Camera Gateway API - Receives images from cameras, performs vacant spot analysis on the images and pushes the results to Redis
  • Spots API - External facing API that is used by the Web App to provide vacant parking spots info
  • Web App - A web application for drivers that shows information about vacant parking spots
  • Redis - stores results about parking areas, cameras and vacant spots for realtime querying

In order to set-up an environment locally, edit the area.json file that contains metadata about the parking lot and start a local Redis instance.
Run the Python setup script:

$ python3 ./setup/setup_area.py --redis-host=localhost

The same script can be run on any accessible redis host to set-up the environment.

Running on Kubernetes

DeepPark runs natively on Kubernetes. To install DeepPark, simply run:

$ kubectl create -f ./setup/kubernetes

Thats it! Wait for the following deployments to appear as running:

  • camera-gateway-deployment
  • camera-tester-deployment
  • redis-deployment
  • spots-deployment

Setup the parking lot on Redis

Forward traffic from the Redis service:

$ kubectl port-forward svc/redis-svc 6379:6379

Edit the area.json to your liking and run the setup script:

$ python3 ./setup/setup_area.py --redis-host=localhost

Deploying the driver app

Grab the Spots API External IP:

$ kubectl get svc spots-api-svc

Take the Area ID you created earlier and edit the API_URL and AREA_ID env variables in setup/kubernetes/driver_app. Deploy the app:

$ kubectl create -f ./setup/kubernetes/driver_app

Wait for the External IP to show up:

$ kubectl get svc driverapp-svc

Point your mobile device browser to the IP address.

Running the Camera Tester

DeepPark allows you to mimic a camera by running a simple web app locally that sends images to the Camera Gateway API. Simply open camera_tester/index.html on a local device (or behind an SSL public internet endpoint) and input the following values in the UI:

  • Camera Gateway Address - The public ip of the Camera Gateway API
  • Area ID - The Area ID you created in setup/area.json
  • Camera ID - The ID of the camera you will be sending photos as, created in setup/area.json

Get the Camera Gateway External IP with:

$ kubectl get svc camera-gateway-svc

Note: The Camera Gateway API uses port 8080.

Done!


๐Ÿ‘ Project Team

  • Haishi Bai (Principal Software Engineer, Office of the Azure CTO)
  • Yaron Schneider (Senior Software Engineer, Office of the Azure CTO)
  • Paige Bailey (Senior Cloud Developer Advocate, Cloud+AI)

About

Find vacant parking spots in indoor and outdoor locations


Languages

Language:TypeScript 41.1%Language:Python 21.4%Language:HTML 16.7%Language:Dockerfile 7.3%Language:JavaScript 5.1%Language:CSS 4.9%Language:Shell 3.6%