| --- |
| license: apache-2.0 |
| --- |
| # ποΈβοΈ Handwritten Digit Recognition Model |
|
|
| ## π Overview |
|
|
| π€ **Model Name:** Handwritten Digit Recognition Model |
|
|
| π§ **Model Type:** Convolutional Neural Network (CNN) |
|
|
| π **Input:** 28x28 grayscale images of handwritten digits (0-9) |
|
|
| π’ **Output:** A 10-dimensional vector representing the probabilities of each digit (0-9) |
|
|
| π― **Purpose:** To classify handwritten digits from images with high accuracy |
|
|
| βοΈ **Download:** Click [here](https://huggingface.co/lizardwine/DigitClassifier/resolve/main/DigitClassifier.keras?download=true) to download |
|
|
| --- |
|
|
| ## π Description |
|
|
| This model is designed to recognize handwritten digits from 0 to 9. It processes input images of size 28x28 pixels and outputs a vector of 10 probabilities, each corresponding to one of the digits. The digit with the highest probability is selected as the predicted class. |
|
|
| --- |
|
|
| ## π Use Cases |
|
|
| 1. **Educational Tools:** π« Helping students learn and practice handwriting recognition. |
| 2. **Digitization Projects:** π Converting handwritten documents into digital format. |
| 3. **Assistive Technology:** π¦Ύ Assisting individuals with disabilities in digit writing. |
|
|
| --- |
|
|
| ## π Performance |
|
|
| π **Accuracy:** ~99% on the MNIST dataset. |
|
|
| π **Latency:** Fast inference time suitable for real-time applications. |
|
|
| --- |
|
|
| ## π οΈ Technical Details |
|
|
| - **Architecture:** Convolutional Neural Network (CNN) |
| - **Layers:** Convolutional layers, pooling layers, fully connected layers |
| - **Activation Functions:** ReLU, Softmax |
|
|
| --- |
|
|
| ## π₯ Input Format |
|
|
| - **Type:** Grayscale image |
| - **Shape:** 28x28 pixels |
| - **Range:** 0-1 (pixel intensity) |
|
|
| --- |
|
|
| ## π€ Output Format |
|
|
| - **Type:** Probability vector |
| - **Shape:** 10-dimensional |
| - **Range:** 0-1 (sum of probabilities equals 1) |
|
|
| --- |
|
|
| ## π§© Model Training |
|
|
| - **Dataset:** MNIST dataset π |
| - **Training Epochs:** 10 |
| - **Batch Size:** 32 |
| - **Optimizer:** Adam |
| - **Learning rate:** 1e-3 |
|
|
| --- |
|
|
| ## π‘ How to Use |
|
|
| 1. **Preprocess the Image:** Resize and normalize the image to 28x28 pixels with values between 0 and 1. |
| 2. **Feed the Image:** Input the preprocessed image into the model. |
| 3. **Interpret the Output:** Analyze the 10-dimensional output vector to find the digit with the highest probability. |
| ### Loading the Model |
|
|
| To use the model, first, load it using Keras. |
|
|
| ```python |
| from keras.models import load_model |
| |
| # Load the pre-trained model |
| model = load_model('path/to/DigitClassifier.keras') |
| ``` |
|
|
| ### Preprocessing the Input |
|
|
| Preprocess the input image to fit the model's requirements. |
|
|
| ```python |
| import numpy as np |
| from keras.preprocessing import image |
| |
| def preprocess_image(img_path): |
| # Load the image |
| img = image.load_img(img_path, color_mode='grayscale', target_size=(28, 28)) |
| # Convert to numpy array |
| img_array = image.img_to_array(img) |
| # Normalize the image |
| img_array = img_array / 255.0 |
| # Reshape to add batch dimension |
| img_array = np.expand_dims(img_array, axis=0) |
| return img_array |
| |
| # Example usage |
| img_path = 'path/to/your/image.png' |
| processed_image = preprocess_image(img_path) |
| ``` |
|
|
| ### Making Predictions |
|
|
| Use the model to predict the digit from the processed image. |
|
|
| ```python |
| # Predict the digit |
| predictions = model.predict(processed_image) |
| |
| # Get the digit with the highest probability |
| predicted_digit = np.argmax(predictions) |
| print(f'The predicted digit is: {predicted_digit}') |
| ``` |
|
|
| ### Full Example |
|
|
| Combining all steps into a single example. |
|
|
| ```python |
| from keras.models import load_model |
| from keras.preprocessing import image |
| import numpy as np |
| |
| # Load the pre-trained model |
| model = load_model('path/to/DigitClassifier.keras') |
| |
| def preprocess_image(img_path): |
| img = image.load_img(img_path, color_mode='grayscale', target_size=(28, 28)) |
| img_array = image.img_to_array(img) |
| img_array = img_array / 255.0 |
| img_array = np.expand_dims(img_array, axis=0) |
| return img_array |
| |
| img_path = 'path/to/your/image.png' |
| processed_image = preprocess_image(img_path) |
| |
| predictions = model.predict(processed_image) |
| predicted_digit = np.argmax(predictions) |
| print(f'The predicted digit is: {predicted_digit}') |
| ``` |
|
|
| --- |
|
|
| ## β οΈ Limitations |
|
|
| - **Handwriting Variability:** Performance may decrease with highly unconventional handwriting. |
| - **Noise:** Model performance can be affected by noisy or poor-quality images. |
|
|
| --- |
|
|
| ## π₯ Contributors |
|
|
| - **Developer:** Lizardwine (x@lizardwine.com) |
| - **Organization:** lizardwine |
| - **Date:** 06/06/2024 |
|
|
| --- |
|
|
| ## π References |
|
|
| - MNIST Dataset: [Link](http://yann.lecun.com/exdb/mnist/) |
| - CNN Architecture: [Link](https://en.wikipedia.org/wiki/Convolutional_neural_network) |
|
|
| --- |
|
|
| π **Thank you for using our Handwritten Digit Recognition Model!** π |