Console 43

LibrePhotos, PoliceSettlements, and CompreFace

Sponsorships

If you, or someone you know, is interested in sponsoring the newsletter, please reach out at console.substack@gmail.com


CompreFace

CompreFace is a free and open-source facial recognition system.

language: Python, stars: 900, watchers: 37, forks: 47, issues: 11

last commit: March 02, 2021, first commit: September 16, 2019

https://twitter.com/exadel

police-settlements

Police-settlements is a FiveThirtyEight/The Marshall Project effort to collect comprehensive data on police misconduct settlements from 2010–19.

language: R, stars: 107, watchers: 10, forks: 9, issues: 0

last commit: February 22, 2021, first commit: February 22, 2021

https://twitter.com/datadhrumil

librephotos

LibrePhotos is a self-hosted alternative to Google Photos.

language: Python, stars: 2114, watchers: 49, forks: 76, issues: 86

last commit: February 27, 2021, first commit: May 23, 2017

glci

glci allows you to test your Gitlab CI Pipelines changes locally using Docker.

language: JavaScript, stars: 430, watchers: 9, forks: 14, issues: 7

last commit: March 02, 2021, first commit: February 17, 2021

https://twitter.com/_damnhotuser


Help Wanted

If you’re interested in posting a help wanted ad for your project to thousands of open-source developers, send an email to console.substack@gmail.com


An Interview With Sergii of CompreFace

Hey Sergii! Let’s start with your background. Where have you worked in the past?

I’ve been working for Exadel for more than 8 years where I started as Junior Developer and am now Tech Lead/AI Practice Lead. 

You’re working on CompreFace at Exadel, why was CompreFace started?

We just formed the Artificial Intelligence and Data Science Community at Exadel and wanted to try out some interesting technologies. At the same time, Exadel was solving a problem that the company has a lot of experience with (AI) but couldn’t show it because most of our projects are under NDA. So, we were trying to find a project that was:

  1. Interesting for developers

  2. Easy to understand and show to potential clients

  3. Would add value to Exadel as a whole 

This wasn’t an easy task. We created a list of ideas and after several weeks of debates, we landed on the idea of a face recognition solution. Soon after, Exadel created the AI Practice.  One of the functions of which is to show the world Exadel’s AI solutions. We decided that the best way to show CompreFace is to open-source our facial recognition system.

Are there any overarching goals of CompreFace that drive design or implementation, and if so, what trade-offs have been made in CompreFace as a consequence of these goals?

The main goal of CompreFace is to make face recognition more accessible to a wide variety of developers. This means that CompeFace should be easy to use by non-machine learning developers and should not depend on the programming language chosen. In other words, CompreFace should work with “add face” and “recognize face” concepts. To achieve this goal CompreFace needed to:

  1. Store embeddings (the results from the neural network) in a database

  2. Provide a REST API for all face recognition operations

The choice here was to put everything in Docker containers, as it would not only allow us to meet these requirements but also to easily add more functionality and make it extendable and scalable. 

The consequence here is that even though Docker is very popular, there are some developers that don’t have it installed yet, so they will have to install Docker first. Of course, for those who already have Docker installed, CompreFace can be installed in one command.

What is the most challenging problem that’s been solved in CompreFace, so far?

At the beginning of the project, there was a period when there was no Python developer on our team, so we decided to make the Python part of the application as simple as possible and moved everything we could to a Java server. We decided to work with the database only from the Java server, but that meant we had to actually recognize faces from embeddings in Java as well.

CompreFace uses euclidean distance for face recognition, and there are tons of examples using different libraries of how to calculate it in Python. But after research, I realized that there are no examples and there is no good choice for linear algebra in Java. After many failures, I managed to implement it using the ND4J library (part of Deeplearning4j), so it has the same performance as the fastest Python implementations. The implementation can be found here.

What was the most surprising thing you learned while working on CompreFace?

Probably that face recognition is not a solved problem. Every few months there are new algorithms that come about that are better than the previous. 

For example:

Most of them are presented at major Computer Vision conferences, like CVPR and ECCV.

With things developing so quickly in this space, how do you stay up to date?

To stay on top of the trends I recommend checking the paperswithcode website, they collect all new research papers and group them by tasks.

What is the release process like for CompreFace?

We automate releases using Jenkins, so probably the release process from a development perspective is not so interesting. We just take the last docker image that went through regression testing and push it to our DockerHub.

But the release process includes not only delivering a product, but also documentation and marketing. I’m a software developer and am not as familiar with marketing stuff, but I realize that without it users won’t find our face recognition system and won’t use it. I hope this next information will be useful for developers who are thinking of starting a new project on GitHub.

Before each release, I:

  1. Prepare release notes to post in the GitHub repository

  2. Prepare a blog post for our blog

  3. Prepare posts for social media (like LinkedIn and Facebook)

  4. Prepare posts for external resources like Reddit and Hacker News

  5. Prepare an email to subscribed users.

Then on the release date, I post everything simultaneously and wait for feedback.

How do you intend on monetizing CompreFace?

At this point, our plan is to use a typical open-source monetization strategy, which is a free product with paid support and services. The offered services include integration, customization, new feature development, training, etc. To reach us you can use the Exadel contact form or email CompreFace.

What is the best way for a new developer to contribute to CompreFace?

First of all, they could contact me personally and just ask, I believe I can find a suitable task for everyone :)

There are different directions where contributors (not only developers) can help:

  1. Just use CompreFace and report ideas and bugs on GitHub

  2. Share their knowledge and experience via posting guides and articles, or just improve our documentation

  3. Create SDKs for their favorite programming language

  4. Integrate CompreFace support to other platforms like Home Assistant or DreamFactory

  5. Contribute code

  6. If you are a machine learning developer and eager to research something, we have interesting topics to dive into, just contact us, I’ll share them with you 

  7. And last, but not least, you can just give a star to our free facial recognition system on GitHub

Where do you see CompreFace heading next?

Right now we are finishing the development of new cool CompreFace features:

  1. Face detection and face verification services

  2. Plugins - age, gender, landmarks, calculator

  3. Adding scalability

  4. Support of InsightFace library and face recognition models

  5. GPU support

  6. And more 

There will be more information after the next release. 

We also received lots of feedback from users, so the next CompreFace improvements could include:

  1. Adding SDKs for the most popular languages (like Python, JS, etc)

  2. Support of ARM processors

  3. Manage face collection from UI

  4. Video support 

  5. Liveness detection (this definitely requires long research)

Any idea on the priority of the SDK support?

Yeah, the biggest priority is Python and Javascript, but it depends more on contributor availability then on our desires :)

Where do you see software development in-general heading next?

Software developers don’t like routine work, so they always try to automate it. This is also what CompreFace is about - every face recognition project requires developers to implement certain features that CompreFace already has. So, CompreFace helps simplify the work of developers. The same will be with other routine tasks, some cool solutions are coming to help automate them.

Where do you see open-source heading next?

More companies realize they have great technologies they created for themselves and it will be a win-win if they share them with everyone. This is why Exadel started to open-source its solution and there are already plenty of repositories in the Exadel GitHub account. I believe we will have even more solutions from Exadel and other companies.

Do you have any suggestions for someone trying to make their first contribution to an open-source project?

I suggest choosing a less popular and mature project, but a project that you are passionate about. Why?  

  1. You will have more joy from contributing to it

  2. It’s easier to find out how to contribute, a project owner is always very happy to find contributors

  3. You will be proud of yourself if you know that the part of the success of the project is your work

And, lastly, don’t hesitate to contact the team and ask how you can help. There are likely plenty of ways to help that you haven’t even thought about.


Like what you saw here? Tell your friends about Console and win free swag!

Refer Friends

Also, don’t forget to subscribe to get a list of new open-source projects curated by an Amazon software engineer directly in your email every week.