All Projects → Elucidation → Tensorflow_chessbot

Elucidation / Tensorflow_chessbot

Licence: mit
Predict chessboard FEN layouts from images using TensorFlow

Projects that are alternatives of or similar to Tensorflow chessbot

Machine Learning
머신러닝 입문자 혹은 스터디를 준비하시는 분들에게 도움이 되고자 만든 repository입니다. (This repository is intented for helping whom are interested in machine learning study)
Stars: ✭ 705 (+94.75%)
Mutual labels:  jupyter-notebook, tensorflow-tutorials, tensorflow-examples
Daily Deeplearning
🔥机器学习/深度学习/Python/算法面试/自然语言处理教程/剑指offer/machine learning/deeplearning/Python/Algorithm interview/NLP Tutorial
Stars: ✭ 381 (+5.25%)
Mutual labels:  jupyter-notebook, tensorflow-tutorials, tensorflow-examples
Tf tutorial plus
Tutorials for TensorFlow APIs the official documentation doesn't cover
Stars: ✭ 293 (-19.06%)
Mutual labels:  jupyter-notebook, tensorflow-tutorials, tensorflow-examples
Docs
TensorFlow documentation
Stars: ✭ 4,999 (+1280.94%)
Mutual labels:  jupyter-notebook, tensorflow-tutorials, tensorflow-examples
Tensorflow 2.x Tutorials
TensorFlow 2.x version's Tutorials and Examples, including CNN, RNN, GAN, Auto-Encoders, FasterRCNN, GPT, BERT examples, etc. TF 2.0版入门实例代码,实战教程。
Stars: ✭ 6,088 (+1581.77%)
Mutual labels:  jupyter-notebook, tensorflow-tutorials, tensorflow-examples
Tensorflow Brasil
Códigos e materiais sobre TensorFlow em Português
Stars: ✭ 74 (-79.56%)
Mutual labels:  jupyter-notebook, tensorflow-tutorials, tensorflow-examples
Yolov3 Tf2
YoloV3 Implemented in Tensorflow 2.0
Stars: ✭ 2,327 (+542.82%)
Mutual labels:  jupyter-notebook, tensorflow-tutorials, tensorflow-examples
generative-art
🌈🎨 Generative Art is the idea realized as genetic code of artificial events, as construction of dynamic complex systems able to generate endless variations. This is also a nuxt-module (@luxdamore/nuxt-canvas-sketch) - [three.js, tensorflow.js and gsap are not included].
Stars: ✭ 41 (-88.67%)
Mutual labels:  tensorflow-tutorials, tensorflow-examples
content-moderation-image-api
An NSFW Image Classification REST API for effortless Content Moderation built with Node.js, Tensorflow, and Parse Server
Stars: ✭ 50 (-86.19%)
Mutual labels:  tensorflow-tutorials, tensorflow-examples
TF2-GAN
🐳 GAN implemented as Tensorflow 2.X
Stars: ✭ 61 (-83.15%)
Mutual labels:  tensorflow-tutorials, tensorflow-examples
Tensorflow-Wide-Deep-Local-Prediction
This project demonstrates how to run and save predictions locally using exported tensorflow estimator model
Stars: ✭ 28 (-92.27%)
Mutual labels:  tensorflow-tutorials, tensorflow-examples
tensorflow-fifo-queue-example
Example on how to use a Tensorflow Queue to feed data to your models.
Stars: ✭ 39 (-89.23%)
Mutual labels:  tensorflow-tutorials, tensorflow-examples
tf-examples
TensorFlow examples
Stars: ✭ 23 (-93.65%)
Mutual labels:  tensorflow-tutorials, tensorflow-examples
go-mnist-client
TensorFlow serving mnist example client in Go.
Stars: ✭ 16 (-95.58%)
Mutual labels:  tensorflow-tutorials, tensorflow-examples
deep-learning-in-s4tf
Get started with Swift for TensorFlow by examples
Stars: ✭ 31 (-91.44%)
Mutual labels:  tensorflow-tutorials, tensorflow-examples
Dog-or-Cat-TensorflowSharp-Example
An example for TensorflowSharp - classify an image as a dog or cat.
Stars: ✭ 15 (-95.86%)
Mutual labels:  tensorflow-tutorials, tensorflow-examples
Deeppicar
Deep Learning Autonomous Car based on Raspberry Pi, SunFounder PiCar-V Kit, TensorFlow, and Google's EdgeTPU Co-Processor
Stars: ✭ 242 (-33.15%)
Mutual labels:  jupyter-notebook, tensorflow-tutorials
TensorFlow20-Notes
TensorFlow 2.0 Various notes and tutorials
Stars: ✭ 14 (-96.13%)
Mutual labels:  tensorflow-tutorials, tensorflow-examples
tensorflow-practice
Tutorials of Tensorflow for beginners with popular data sets and projects. Let's have fun to learn Machine Learning with Tensorflow.
Stars: ✭ 93 (-74.31%)
Mutual labels:  tensorflow-tutorials, tensorflow-examples
Docs L10n
Translations of TensorFlow documentation
Stars: ✭ 262 (-27.62%)
Mutual labels:  jupyter-notebook, tensorflow-tutorials

TensorFlow Chessbot - /u/ChessFenBot [◕ _ ◕]* I make FENs

CLI and Bot code lives on the chessfenbot branch

Live demo here using TensorflowJs

TL;DR:

Turn http://i.imgur.com/HnWYt8A.png1nkr4/1p3q1p/pP4pn/P1r5/3N1p2/2b2B1P/5PPB/2RQ1RK1

Prediction

A TensorFlow Convolutional Neural Network algorithm trained on 32x32 grayscale chess tiles predicts chessboards layouts from online chessboard screenshots.

  • 5x5x32 Input Convolution layer
  • 5x5x64 Convolution layer
  • 8x8x1024 Dense Fully Connected layer
  • 1024x13 Dropout + Softmax Readout layer

Yes, using a CNN is kinda overkill, but it is exciting.

Running Tensorflow_Chessbot on images locally and via URLs

On a linux machine which has Tensorflow and SciPy installed

Download the chessfenbot branch somewhere : tensorflow_chessbot/chessfenbot

Alternatively clone the chessfenbot branch

Now, to run pass the following arguments to tensorflow_chessbot.py

$ ./tensorflow_chessbot.py -h
usage: tensorflow_chessbot.py [-h] [--url URL] [--filepath FILEPATH]

Predict a chessboard FEN from supplied local image link or URL

optional arguments:
  -h, --help           show this help message and exit
  --url URL            URL of image (ex. http://imgur.com/u4zF5Hj.png)
  --filepath FILEPATH  filepath to image (ex. u4zF5Hj.png)

By default, it will try and load the URL http://imgur.com/u4zF5Hj.png and make a prediction in it, otherwise, you could pass a local file like so (for example with an image file u4zF5Hj.png located in the same directory):

./tensorflow_chessbot.py --filepath u4zF5Hj.png

Which should output something like:

./tensorflow_chessbot.py --filepath ./u4zF5Hj.png
Setting up CNN TensorFlow graph...
I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 2
I tensorflow/core/common_runtime/direct_session.cc:58] Direct session inter op parallelism threads: 2
Loading model 'saved_models/model_10000.ckpt'
Model restored.
Certainty range [0.999545 - 1], Avg: 0.999977, Overall: 0.998546
Predicted FEN: 11111111/11111p11/11111k1P/11p1111P/1p1p1111/11111111/111K1111/11111111
Certainty: 99.9%
Done

Similarly, a URL can be tested by calling with a URL:

$ ./tensorflow_chessbot.py --url http://imgur.com/u4zF5Hj.png

Reddit Bot

Code lives on the chessfenbot branch

/u/ChessFenBot will automatically reply to reddit /r/chess new topic image posts that contain detectable online chessboard screenshots. A screenshot either ends in .png, .jpg, .gif, or is an imgur link.

It replies with a lichess analysis link for that layout and a predicted FEN.

predictor = ChessboardPredictor()
fen, certainty = predictor.makePrediction('http://imgur.com/u4zF5Hj.png')
print "Predicted FEN: %s" % fen
print "Certainty: %.1f%%" % (certainty*100)
Certainty range [0.999545 - 1], Avg: 0.999977, Overall: 0.998546
Predicted FEN: 8/5p2/5k1P/2p4P/1p1p4/8/3K4/8
Certainty: 99.9%
Done
[Finished in 1.8s]

ChessFenBot automatically replied to this reddit post, it processed the screenshot link url and responded with:

ChessFenBot [◕ _ ◕]* I make FENs


I attempted to generate a chessboard layout from the posted image, with an overall certainty of 99.9916%.

FEN: 1nkr4/1p3q1p/pP4pn/P1r5/3N1p2/2b2B1P/5PPB/2RQ1RK1

Here is a link to a Lichess Analysis - White to play


Yes I am a machine learning bot | How I work | Reply with a corrected FEN or Editor link) to add to my next training dataset

Workflow

There are three ipython notebooks which show the workflow from turning a screenshot of a chessboard into a set of 32x32 grayscale tiles, to generating those tiles for training and testing, and then the actual training and learning of the neural network from those trials using TensorFlow.

  1. tensorflow_compvision.ipynb - Computer Vision
  2. tensorflow_generate_training_data.ipynb - Generating a dataset from set of screenshots of chessboards in known configurations
  3. tensorflow_learn.ipynb - TensorFlow Neural Network Training & Prediction Basic Regression classifier, works for more common lichess.org and chess.com screenshots
  4. tensorflow_learn_cnn.ipynb - TensorFlow Convolutional Neural Network Training & Prediction tested with ~73% success rate on 71 chess subreddit posts

tensorflow_compvision.ipynb - 1. Computer Vision

Here is a screenshot with the detected lines of the chessboard overlaid, showing where we'll cut the image into tiles.

overlay lines


tensorflow_generate_training_data.ipynb - 2. Generating a dataset

Lichess.org provides a URL interface with a FEN string that loads a webpage with that board arrayed. A nice repo called pythonwebkit2png provides a way to render webpages programmatically, allowing us to generate several (80 in thise) random FEN strings, load the URL and take a screenshot all automatically.

random fen

Here is 5 example tiles and their associated label, a 13 length one-hot vector corresponding to 6 white pieces, 6 black pieces, and 1 empty space.

dataset example


tensorflow_learn.ipynb - 3. TensorFlow Neural Network Training & Prediction

We train the neural network on generated data from 80 lichess.org screenshots, which is 5120 tiles. We test it with 5 screenshots (320 tiles) as a quick sanity check. Here is a visualization of the weights for the white King, Queen and Rook.

Some weights

Finally we can make predictions on images passed by URL, the ones from lichess and visually similar boards work well, the ones that are too different from what we trained for don't work, suggesting that getting more data is in order. Here is a prediction on the image for this reddit post

Prediction


tensorflow_learn_cnn.ipynb - TensorFlow Convolutional Neural Network Training & Prediction

Built a slightly larger dataset of ~150 screenshots which is around 9600 tiles which includes randomized FEN diagrams from lichess.org, chess.com, and 2 FEN generated diagram sites.

Tested with ~73% success rate on 71 chess subreddit posts, good enough to make a first draft Reddit bot.


Ideation

Reddit post has an image link (perhaps as well as a statement "white/black to play").

Bot takes the image, uses some CV to find a chessboard on it, splits up into a set of images of squares. These are the inputs to the tensorflow CNN which will return probability of which piece is on it (or empty)

Dataset will include chessboard squares from chess.com, lichess Different styles of each, all the pieces

Generate synthetic data via added noise:

  • change in coloration
  • highlighting
  • occlusion from lines etc.

Take most probable set from TF response, use that to generate a FEN of the board, and bot comments on thread with FEN and link to lichess analysis

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].