Projects - Also on Medium

close

Chessboard recognition with convolutional neural network

Creating a full custom dataset and training a neural network.

GitHub of the project The program has 4 steps as we can see on the picture.

  1. Take a photo of the current chessboard. Using the chessboard from the dataset
  2. Resize the photo to a perfect square on the chessboard. Using another project available on github, using heatmap to replace the board correctly.
  3. Using a convolutional neural network to get the class of the piece on every cell. Cut the board in 64 cells thanks to the perfect square. Get the piece on every cells. Allow the user to modify a piece if one is incorrect (>99% accuracy).
  4. Use an API to ask one of the best AI which move to play. Translate the board from a 2D array to Forsyth–Edwards Notation (FEN) so that Stockfish's api can understand. Receive information and propose to the user the best move.
This was done using Keras and Tensorflow frameworks in Python. The entire data pipeline was done from scratch.
close

Neural networks and genetic algorithms

GitHub of the project This project combines neural networks (NNs) to genetic algorithms, in a 2D car race environnement. Here, NNs don't learn by backpropagation according to their errors. Instead, a lot of agents are "playing" for multiple generations. The best agents are then chosen to be kept in the next generations. This goes for some time until we reach a stage where some agents are capable of fully driving the road without ever crashing. Moreover, they learned to drive faster and faster because the generations had a time limit, so only the fastest agents could be selected for the next generation. The user can select a car to have a deeper view of how the car is driven, as the full neural network architecture will be shown and the decisions in real-time are visible through the neurons' activations and the final output. Made using Python for an easy playing environment setup. No ML library was used, the entire neural network architecture was done from scratch.

close

Price comparator of multiple stores

Web-scraping and analysis

For multiple stores of different brands, scraping was done on their respective website and comparison between shelves, so that items of same type were grouped. The project was realised over weeks, so the evolution of the mean prices could be analysed, as seen on the graphs. This allows to find the best supermarket for each type of product one could need, and optimize the global cost of groceries.

close

End-to-end encrypted messaging application

Cryptography and java's bouncycastle

This project is able to connect multiple users with each others to communicate while being fully protected from eavesdropping, either from the server or any other player. This was done using java's bouncycastle library and asymmetric encryption, where the client only knows its own private key and communicates the public key to any other client requiring to communicate. The client saves a keystore locally to have its key and any other client's public keys also saved, so it doesn't ask the server anymore.

close

Keylogger

Cybersecurity and python

This project is a fast keylogger running in background and well hidden from the target. Once started for the first time, it will hide in user's machine and make itself auto-run at every startup of the machine. During its lifetime, it will detect all user's keystroke, analyse and rewrite user's final text, for example by deleting the last character when backspace key is hit, or re-positioning the cursor when left and right keys are hit. Every N characters saved, the program will connect to an outside server to send the current dump of text and continues the job.

close

Pathfinding visualization

This project aims to show how different pathfinding algorithms behave when looking for a point on a 2D plan. The plan is drawable by the user manually, or a maze can also be generated by a maze generating algorithm. Once everything is set, the user can choose one of the algorithm and see how it tries to find the target.

close

Unity

This project was done at first to simulate and control a robotic arm around multiple axis of rotations. Once the calculations and algorithms were written, it was then transformed into a writing pen on a board and a soccer player, all controlled by the initial controls of the arm.

close

C++ custom HTTP server

HTTP protocol, fast request parsing

GitHub of the project This project is a complete HTTP server from scratch, handling and responding to all requests, following the HTTP protocol. It uses follows a whitelist principle, which makes only hardcoded URIs to be served. These paths are written in a file. For more efficiency in the file retrieval process, the content is encoded in a trie (a tree without repeating previous tokens). For any upcoming request, the program tries to find the URI in it before accepting the request.

close

Federated Learning

Privacy Preserving

Medium of the project This project follows and implements this paper, which presents a method for privacy preserving federated learning, using homomorphic encryption. This kind of encryption allows computations on it. Thanks to that, federated learning principles can continue and weights from all participants are computed together. A very interesting mix of cryptography, machine learning and distributed systems. The program is done in Golang, with one part focused on clients' representation over the network, and one other part on weights packets computation. The actual neural network part is not done in the project, as it should be framework agnostic.

close

Tweets sentiment analysis

Using Natural Language Processing and Machine Learning

GitHub of the project This project follows and implements this report, which presents multiple techniques for analysing sentiments in a tweet. The entire lifecycle of a ML project is covered, from the data exploration, a baseline method setting, the preprocessing of the data and the word embeddings, up to the different type and architectures of neural networks used in the project. In the end, the highest accuracy of 88% is reached using a transformer (BERT).