This idea was originally inspired by the lack of general safety measures throughout places like universities. One cannot stop potential danger even in open areas, much less in closed personal areas. Thus, Raven acts as a precautionary check for those that want an extra layer of security, as well as a cool little accessory!
What it does
Paired with a phone application or a browser, it takes in a photo, either uploaded or sent through an inconspicuous camera, to search through a database to determine whether they are deemed a potential danger, taking in their previous actions and potential convictions.
Its main draw however is its high-tech glasses which will automatically make a local server and serve all the clients the data. This means that if on the same network everyone can view the same data!
How we built it
The technology stack can be seen here:
There are 3 main parts to this project: the hardware (camera and EP32 receiver along with its server)/ the node.js backend, and finally the interface of the web program/phone app.
Hardware: Built using an ESP32-S Cam and an FTDI programmer, the ESP32-S board would be checking for a get request on the local host and would then return the image data from the flash memory. In this fashion, the Camera _and _Wifi module could be constantly running while we could be editing and developing the other servers!
The majority of this code was written in C++;
Back End This part was built using AWS (Rekognition and S3) along with Node JS, Express and much more! All the requests between servers were done RESTfully, which means we had a ton of functions just for making sure all the messages were being sent and received. We also had to make sure to reimport the Rekognition collection to make sure all the criminal data was available.
The front end was put together using React Native, which made it easy to translate it to a webpage, Android, or IOS. We did this as to make our program as accessible as possible, we were also hoping to host this part on Heroku so that you! Yes you! could try it... but we ran out of time sadly so it's still on localhost.
Challenges we ran into
CORS, oh my god it was so annoying to finally figure out how to properly pass data to the servers only to get a huge red wall of text telling us that we couldn't. As well it was very hard to synchronously juggle all the API requests to each server while making sure that nothing was being overread. Finally, the writing speeds on the WIFI would vary greatly which would make it hard at the start to know if the ESP32 Server was actually running.
Accomplishments that we're proud of
It was our first time implementing hardware, which was a big source of anxiety, however, we managed to get past it smoothly with almost no problems, which was especially a proud accomplishment. We also tried to extend past our areas of comfort and swapped some roles, which definitely made it harder but made its success even sweeter.
What we learned
Since most of us were not familiar with our respective areas, we were definitely able to familiarize ourselves with ESP32 hardware (and some Ardunio Software), React Native, Node.js, and AWS. As well working with REST for the first time was very interesting as we were all used to websockets! I think we have learned and improved alot in our networking practices.
What's next for Raven
If possible we would like to add more implementations, so that it can run more efficiently, and add more databases to improve the accuracy of danger. As well we would love to fully implement Bluetooth so that you wouldn't need to worry too much about the wifi quality, it would also be cool to train our own offline algorithm so that you wouldn't even need wifi!