|
|
--- |
|
|
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!** π |