Small businesses have lost most of their customers due to COVID-19 pandemic lockdown and they are at risk of infection. Although it may be tough to fully prevent coronavirus inside small businesses. It may be easier than you think to successfully monitor it. We are fully confident that our product provides a solution to an ongoing issue in our world today.
What it does
CoronaCam is a smart Software that uses cameras in store to detect movement of people and see whether people are maintaining social distancing or not. It also detects whether people are entering the store wearing masks or not. When these violations take place, information is updated into the system. This helps the store owner to detect behavior of people. It also gives an idea to the store owner about creating space in the store so that social distancing can be maintained. Text notifications when a certain amount of social distancing violations occur can be turned on to notify the store owner in real time.
How we built it
Computer Vision is used to detect and recognize people and their distances from one another. In this project, we used sample video clips in store and detected people and their distances from one another using OpenCV. So a server was set up using Python and Flask where the logic and computer vision algorithms were implemented. Another Front End App was created using Vue JS which loads the video and also gets data from video using API. APIs were created in Python End and data was fetched from Front End. We also made use of the Twilio API in order to send the text notifications to the user and used Digital Ocean in order to be able to handle multiple streams of data at the same time.
Challenges we ran into
Algorithms built using Computer Vision take up a lot of memory, so our loaded video was running really slow as it was detecting the frames and analyzing people and distance from one another. Another challenge we faced was the communication between Front End (Vue JS App) and Back End (Python App) because getting both of those to work in unison took a bit of time. We explored a variety of approaches at first including using a database and using a video stream instead of preloaded videos, but we realized that we did not need a full database since it was only one table that did not have much data and the video stream was extremely slow on our machines, so we had to pivot some design choices in those aspects. Lastly, the distance violation calculation was also troublesome. It did not return value for violating social distancing for each person once rather the count kept on increasing as long as two people were together.
Accomplishments that we're proud of
Most of all, we are proud that we managed to create a full stack application that uses complex machine learning algorithms, a visually appealing user interface and a backend running in the cloud all in 36 hours time. There were no major bugs in our application by the end which was very impressive considering the complexity of the application and the time constraint we were under. Our project can be expanded and improved with many features in both the front end side and the backend due to our strong choices in the design and the tools we used.
What we learned
All of us learned something new during this hackathon. We learned how OpenCV can be used with python, how to turn a regular application into a flask application, how to connect front end and back end successfully among many other technical skills that will be extremely valuable to us in our careers. More importantly though, we learned the importance of communication and working as a team in order to create fully functional software. Without proper teamwork skills, we would be nowhere near the point we reached after 36 hours of work.
What's next for CoronaCam
We used pre-loaded videos during the hackathon, but the next step for CoronaCam will be to connect to CCTV cameras directly over wifi or wired network. We also would like to provide the user with more complex data and analytics because we only have a few variables and graphs that are changing dynamically based on the videos.