Face recognition, Docker multi-stage builds and JS

18 Oct 2020, 12:10 a.m.

This year has been quite extraordinary for most of us so far. As founder of the Photonix project, I can say that personal life has had to take precedence for the past few months. But little by little, I have been putting a bit more time into development.

Working on a complex project can be overwhelming at times, so I’ve tried to make the development process as public as possible to keep me accountable. I hope you enjoy this update on what’s happened recently and what we’re going to be working on.

Firstly, a thank you

There seems to be real interest in what we have so far and a belief in the path we are taking. I’m really thankful to the words of encouragement I’ve received through GitHub. This means a lot to me and has re-ignited a flame recently in me to go further.

Community suggestions

There have been some great suggestions on where to take the project. A good conversation was around the topic of face detection and recognition AI. The basic workflow would be:

This was something I’d partially researched a couple of years ago so it was good to see others wanted it. It is clear that other open source applications, notably DigiKam, have really focussed on this area in recent releases and we can learn from that.

We plan to have a detailed post about the technicalities of this feature as it emerges.

If you have any thoughts on a specific area of Photonix then please do raise an issue through GitHub — we look forward to discussing it.

Docker production builds

Recently I’ve been putting some development time into making the Docker builds leaner. Docker is the primary mechanism we use to deliver software to the user. Being a photo manager that is primarily server-side software, this should make it easy to install and manage. Docker is also used for setting up a development environment.

Up until recently the focus had been on development rather than production. This is now split into separate builds for dev and production with most of the new stuff in the latter one. Using the Docker multi-stage technique means that once the compiled artefacts are built, they are copied into a completely fresh image. The final image is a lot smaller as it contains no build tools or system development libraries. Additionally, we analysed the Python packages installed to identify parts of them that we're large and unused by us. These are removed at the end of the first stage.

The final image size went from 1.74GB down 48% to 924MB. Looking at compressed images as you would need to pull from Docker Hub, this went from 505MB down 57% to 216MB.

There is still some potential for improvement but I'm quite pleased with how well it worked.

UI / JavaScript focus

There are some upgrades to libraries happening as well as some work to complete around multi-user and onboading. This will guide users better and allow them to setup Photonix in a way that suits their needs.

Once this code is merged I’m going to be seeking help with organising the frontend code, writing tests, and implementing parts of the UI that are currently lacking. If you are a JavaScript expert or know someone that you think would enjoy the challenge then please get in touch.

Thanks for reading and hopefully you want to follow our journey further. I’m excited with where we’ve got to but we’re still only at the start.

Please sign up to the mailing list so we can notify you of our version 1.0 release and other important news. We will not pass your details on to any other party and you can unsubscribe at any time.