I've always loved making silly projects. It is even better when I get to use my skills. I created a Convolutional Neural Network using Keras. I trained it on the Labeled Faces in the Wild dataset. Obviously, that dataset does not have pictures of my face in it. In order to make a quick binary classifier of my face. I simply took all the photos from that dataset and put them into a "Not_Mark_Fajet" folder. I then took about 500 photos of myself, some new, some old. In order to adjust for a class imbalance, I genereated thousands of "new" images by doing random crops, rotations, and zooms on these photos. None of the photos seen on this website were used in the training set.
After implementing and training the model in Keras using python, I saved the model and I am using it with TensorFlow.js. When a user clicks the "Let's find out" button, the browser is running the calculation by grabbing the image from the html and passing it through the neural network.
I have plans to improve this in the future. One of the things I wish to do is make a model to find faces before identifying. Collecting data on faces was an issue as I had to manually crop photos to squares containing my face. This work can and should be automated, extending the application of the models to not only tell if a face is mine, but being able to tell if and which face is mine in a photo with multiple faces.
In addition, I understand that there are many facial recognition systems that exist that are not built on thousands of photos of a single person's face. I'd like to explore creating a model trained to identify the similarities between faces in order to determine if a new face is mine based on how similar it is to a small set of my faces it has seen.