Ever wondered how to create your own scalable wireless camera system with more than one location monitored? Well here's my working project!
This project requires you to know lots of knowledge, but if you just want to copy and replicate my work to try it on your own, that's okay too (just leave my name as credit though). For this project, I was the lead manager, developer, and planner. My friend helped as well and we delivered an amazing demonstration and presentation to our peers for my graduate level class (taking for undergraduate level though)! I received an A on this project and decided to share it because although it's pretty unique and awesome, I used this project to sharpen and strengthen my skills for my other personal projects. Although I would mark this project as an intermediate level, the number of hours I spent on this was a lot (since I also had to think about how to put this together, what technologies to use, what parts, and such), so I will mark it as advanced, but any expert would consider this probably at best in the intermediate level.
Cost of Production:
The cost of this project could have definitely been lower. If I could re-do it, I would have opted for a cheaper sensor than the PixyCam and used something less expensive and more reliable at detecting a change in the scene. I could have also used different libraries in the Python code for basic I/O (input/output), but I did what I planned. You could also use a cheaper micro-computer like the raspberry-pi, but I wanted to try the BeagleBoneBlack Wireless because it has like zero popularity!
Alternatively, I could have also used OpenCV! However, the amount of processing power and such with memory was really pushing the limit and sometimes I get a memory segmentation fault. However, I'm really positive that you can get OpenCV to work if done correctly. You also must use Python3 though, not Python2.
The goal for this project was to create a product which could compete against other security cameras on the market. What's good about mine is that you can easily add more devices without any issues to scale and create more nodes for monitoring! My project relies 100% on a wi-fi connection though and I use the Cloud for a real-time database and storage. The user can also view the images on the local device and even SSH to their device remotely if something broke!
Basically, my project has the basic core functionality working, but you can polish it up more to be an effective security camera and actually use it! Below will be a demonstration video, my report, tips, and of course the source code.
What You Will Need:
There aren't many parts that are needed for you to have your own working system.
1x Any Android Smartphone with Nougat (or maybe 5.0+)
1x 3x USB Hub
1x BeagleBoneBlack Wireless
1x WebCam (must work with current drivers on your Linux distro of choice)
1x PixyCam (or other sensor or WebCam and OpenCV)
1x Box or some encasement
The video below is more like a walk-through on how the product works.
Schematics and Diagram and Notes:
Really it's just USB and simple wiring so no need, lol!
Here are some notes that I used for documentation for grading purposes.
There is too much code.
You can find all my code on my (Royce's) Github:
The code uses my authentication keys provided from Google.
They are included in these files, but please use and make your
own which can be from the Google developer console.
Code in Java, Android Studio:
You will need to have Android Studio with SDK 26+ and API support for 23+
on Phone OS (Nougat).
Code in Python3, used PyCharm and Vi (Linux):
We used Debian Stretch, I believe it is the August or September release img.
In order to run this code you need Python3.5+ and all the modules and libraries
on your local system, as you see in the import portion of the code. You will also
need to have the driver support for PixyCam installed, numpy, and other dependencies.
You will need a suitable webcam, pixycam, and usb hub.
You can then run the code on the BeagleBoneBlack Wireless remotely or by using a monitor
and running it, of course, you must, have a, WI-FI connection.
You can see more of how it works in the video demonstration.
The source code is on my GitHub account and you can view all the files. I even left some API keys, but it's okay because they are all trial keys! You should configure and create your own API keys from the technologies I used so you can have your own obviously.
One thing to note is that there is some front-end eye-candy issue. I mean it's nothing serious, but the created unique IDs for each key (for the NoSQL database) was generated by my own keys in Python3, so sometimes they aren't listed in order, but that's a really easy fix!
To fix this, I could do it, but maybe later. Just make a new field for the photos and related properties and get a data snapshot of each photo, or you can store a count variable to the user and increment that number and use it as a number to the key ID so that they appear in order on the application. If you don't know what I'm talking about, basically the photos and such on the app will appear mix-ed up and not ordered in correct picture taken date.
In the report you can find more information and it also has references to some important and vital resources to understanding and getting this project or product to work!
I hope you enjoyed this article and this amazing project I have made! I wish you a Happy New Year!