Core Concepts

The whole project is based on Raspberry pis. Of course you could probably run the exact same thing under any ARM cpu, but since I had the pis available, this was the easiest way for me to do it. 

Raspberries can run an Ubuntu linux flavor distribution, it is well maintained and frequently upgraded (maybe too frequently) but all in all, the community is great and there is an amazing depth of resources. The documentation of the ecosystem is also excellent, making it much easier to solve issues and bugs. 

Programming language here has been python for necessary libraries and ease of use reasons. 

The camera module

The Camera uses a lite distribution of raspberry os with no graphical interface and most bells and whistles missing. In my case the picamera2 library was also missing and had to be added after burning the image to the card.

The whole camera stack is basically just Python. This is the most convenient way to get it running, since all picam libraries are in python. 

There are a few libraries used with the camera app but in general I’ve tried to keep the build extremely minimal due to pi’s limited resources. For every addition to the app, there’s a greater lag between shooting the images and writing to the card. 

Since the project’s final form will be a standalone autonomous camera in the wild, keeping power demand low is fundamental. 

The time lapse module

The time lapse/upload/backup part is your typical raspberry pi 5 with 4Gb of ram, running a standard distribution of Rasbperry pi os with desktop enabled. 

The whole stack here is again just python. The app is basically 3 different parts. 

  1. File downloader/Backup of files
  2. A time lapse video creator using ffmpeg 
  3. Youtube uploader using Google’s API for youtube

Not a lot is used in terms of external libraries, most of it is just basic python use. Again, since computing power is limited, it helps keeping the requirements to the minimum.

The scheduler is just a cron job that’s programmed to run one hour after the camera ends capture. 

In the future, I am planning to implement a basic frontend to be able to monitor the services locally, a simple status check and a start/stop button.