About Parkerr
Parkerr is a open source parking browser application that enables you monitor parking spots using a webcam, cellphone camera, or any virtual webcam. The tool uses computer vision object detection to operate and all the computation is processed inside browser utilizing TensorFlow.js. Communication between a remote cellphone and the browser is enabled through WebRTC (PeerJS uses PeerServer for session metadata and candidate signaling. as well as Google Stun servers)
Built with
- TensorFlow.js
- NextJS
- WebRTC (PeerJS)
- YOLO7-tfjs
- tailwindcss
- React Recoil
F.A.Q
Under the hood, Parkerr uses tensorflow.js a javascript library to run machine learning models entirely in the browser. Parkerr uses YOLO7 (You Only Look Once v7) a real-time object detection computer vision model. YOLO is fast, accurate models and simple to train. My implementation with Parkerr involves mapping the model's output to a custom data structure and integrating it into the application's data pipeline and state to be suitable for a parking app.
Parkerr currently implements remote communication through a P2P solution using PeerJS, a javascript library that implements a WebRTC configuration using PeerServer Cloud services and Google stuns servers.
Parkerr can take webcam footage or remote video communication through another device that has a built-in camera and modern browser.
Other than site website analytics, none. Parkerr processes all of the video footage on the client side and all remote communication is p2p and private.
The auto-detect feature works by collecting a snapshot of all of the detected vehicles for a few seconds and then suppresses all of the vehicles that have not been in a consistent position. If you were to try and use the auto-detect feature on an empty parking lot no selections will be made, if attempted on a full parking lot then all the parking spaces will be marked.
Yes! That is possible and was implemented, Originally the architecture of this project, I created a flask server that receives base64/blobs from the client and processes the input using yolo3 model with OpenCV, works fine on a small scale but needs additional configuration and refactoring for larger scales. Such as a server with a powerful GPU and autoscaling.
human, bicycle, car, motorcycle, airplane, bus, train, truck, boat, traffic light, fire hydrant, stop sign, parking meter, bench, bird, cat, dog, horse, sheep, cow, elephant, bear, zebra, giraffe, backpack, umbrella, handbag, tie, suitcase, frisbee, skis, snowboard, sports ball, kite, baseball bat, baseball glove, skateboard, surfboard, tennis racket, bottle, wine glass, cup, fork, knife, spoon, bowl, banana, apple, sandwich, orange, broccoli, carrot, hot dog, pizza, donut, cake, chair, couch, potted plant, bed, dining table, toilet, tv, laptop, mouse, remote, keyboard, cell phone, microwave, oven, toaster, sink, refrigerator, book, clock, vase, scissors, teddy bear, hair drier, toothbrush.
Instructions
Navigate to the "Vision" page, press the designated remote button, use your mobile device to scan the QR code. Once the page is loaded, locate and press the "Call" button and allow access to your phone's camera when prompted.
1. Make sure phone is streaming video in landscape mode
2. Change your phone settings that your phone screen doesn't autolock to ensure a continutes video stream.
3. You may need to press the call button a few times to establish the connection.
If your IP/CCTV cameras not are not directly connected to your computer Stream their video footage using OBS Window Capture feature and create a virtual webcam on your PC.
If your IP/CCTV camera is on your local network Set your OBS video capture setings to a local ip address. Tutorial videoOpen the vision page, press the webcam button, allow webcam access, and point it wherever you desire.
Processing: Run the TFJS object detection model toogler
Show Boxes: Visually render the bbox on the detected items toogler
Vehicle Only: Only detect vehicles toogler)
Detection Threshold: The minimum score for a detection to be valid
IOU Threshold: The threshold for the Intersection over Union\Jaccard index between bboxes
Render Rate: Render a frame X many secounds, 2 being the slowest and 0.01 is the fastest
Special Thanks
- Hugo zanini, for porting YOLO7 to tfjs and for sharing his code.
- Jason Mayes, for advice and guidance.
- The tensorflow Community.