Who Forgot to Upload an Avatar or Uploaded a Non-Human Face on Slack?

While most of us enjoy the casual work environment that Slack offers, including the fun avatars we upload, sometimes not everyone is on board, and some might even forget to upload their avatar. I was recently tasked with a fun and intriguing project: to identify who didn’t upload a Slack avatar or uploaded a non-human face. This was just a one-time request, but for me, it turned out to be an exciting journey into the world of face detection technologies. (All lab data is there: https://github.com/gonchik/face_recognition_slack)

The Face Detection Showdown

To get the job done, I decided to compare three different libraries: face_recognitiondlib, and opencv-python (commonly abbreviated as cv2). Each of these libraries has its strengths, and I was curious to see which one would perform best in accurately detecting human faces in Slack avatars.

face_recognition

The face_recognition library is known for its simplicity and high accuracy for face detection and recognition tasks. It’s a great out-of-the-box solution if you’re looking for something that’s easy to use and delivers results. Despite being a strong contender, I noticed that it might occasionally misidentify non-human images as valid avatars.

dlib

Next up was dlib, a robust machine learning toolkit that contains a variety of algorithms designed for real-world problems — including face recognition. What stood out to me was its higher accuracy; dlib was the clear winner in avoiding false positives and correctly identifying human faces.

opencv-python (cv2)

Finally, I tested out opencv-python, a library that’s packed with computer vision capabilities. While it’s a powerhouse for many different applications, in terms of face detection for Slack avatars, it didn’t quite match up to dlib during my testing.

The Winner: dlib

After comparing the three, I found that dlib provided the most accurate results for our Slack avatar cleanup. It consistently identified human faces without being tricked by non-human elements, making it the perfect choice for this task.

Try It Yourself!

For those interested in testing these libraries, you can use the Python script provided earlier. Swap out the face detection modules in the script to compare the performance of face_recognition, dlib, and opencv-python. Here’s how to get started:

1. Install each library according to its documentation.

2. Place a collection of your Slack avatar images in a folder.

3. Run the script, changing the face detection call to the library you’re testing.

It’s that simple! Look at this

import dlib
import os
import argparse


def is_human_face_dlib(image_path):
# Load a pre-trained face detection model
detector = dlib.get_frontal_face_detector()
# Load the image
image = dlib.load_rgb_image(image_path)
# Perform face detection
detected_faces = detector(image, 1)
# Check if any faces are detected
return len(detected_faces) > 0


# Example usage
def validate_avatars(directory_path):
for filename in os.listdir(directory_path):
if filename.lower().endswith('.png'):
image_path = os.path.join(directory_path, filename)
if is_human_face_dlib(image_path):
# print(f"A human face has been detected in {filename}")
pass
else:
email = filename[:-4]
if email.__contains__('@'):
print(f"No human face detected in {email}")


if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Validate Slack avatars for human face presence.")
parser.add_argument('--avatar-dir', required=True, help='Path to the directory with avatar images')
args = parser.parse_args()
if args.avatar_dir:
avatars_path = args.avatar_dir
else:
# Replace with the path where your avatars are located
avatars_path = 'avatars'
validate_avatars(avatars_path)

all code is there: https://github.com/gonchik/face_recognition_slack

then you can detect like this avatars :)

Final Thoughts

This quirky request revealed that even through a seemingly trivial task, there is a lot to learn. The differences in performance and accuracy among face detection libraries are substantial, and choosing the right one can significantly impact your results. Whether you’re cleaning up Slack avatars or developing a sophisticated facial recognition system, understanding the capabilities of your tools is key to success.

Let’s be honest, no one wants to see a cat where they expect a colleague. 😉

Comments

Popular posts from this blog

Overview and practical use cases with open source tracing tool for Java Apps. Glowroot. Installation

How only 2 parameters of PostgreSQL reduced anomaly of Jira Data Center nodes

Atlassian Community, let's collaborate and provide stats to vendors about our SQL index usage