Taking quality pictures of precious moments has always been a challenge for people. Multiple takes with blurry images and closed eyes plague albums everywhere. The inspiration for this project was to increase the productivity of sifting through these albums and capturing theses moments more enjoyable. Vacations are easier to enjoy when you don't have to worry about the quality of your pictures.

What it does is a website that allows users to upload their pictures and uses computer vision to remove duplicates and find the best version of each picture. Users are able to create an account and upload photos which we then run through our algorithms to determine the best take among duplicates and display their improved album.


The frontend was built using Vue with vanilla css.

The backend is a go webserver that interacts with a postgresql database. The image analysis was done using gocv - an opencv wrapper for go.


This was the first time anyone on our team used Go so it took a long time for us to properly understand how the Go environment works and how to organize our project in modules. We initially tried to use opencv on a macbook pro however we had some compatibility issues due to the m1 chip so we were forced to develop all of the computer vision on the digital ocean server. This was also the first time using opencv and so it took a while to understand just how opencv matrices and channels work so that we can implement our various algorithms.


Implemented various computer vision algorithms such as blur detection using laplace variance, image similarity detection by calculating a hash for each image and comparing the hashes using Hamming distance and an algorithm that detects if eyes are open or closed in an image using haar cascade classifiers.

Next steps

The computer vision algorithms can be optimised even further to eliminate inaccuracies and to work on multiple more factors such as lighting to determine the best take.

There are also a lot of optimizations that can be done when transferring files, such as compressing the contents of the zip files before transferring to improve wait times.

Built With

Share this project: