---
# System prepended metadata

title: Alphabet Classifier

---

# Alphabet Classifier

Image classifier for three alphabets(A,T,O), using multilayer perceptron model. 

## Getting Started

## Prerequisites

OpenCV is required to generate inpute vectors for training and testing. *How to install-*
```
pip install opencv-python
```

#### The Dataset
The dataset contains (15x100) binary matrix, made by flattening (10x10) alphabet images. There is pre-generated dataset, **"dataset.npy"** and along with it **"targets.npy"** for 15 images that are inside "/inputs".

#### Generating the dataset
Generating the dataset for any three alphabets:
```
#create_dataset.py
images, targets = generate(folderpath)
```
images is (numofimages x 100) matrix
targets is (number of images x 3 x 1) matrix for 3 alphabets

### Training the network
trainmodel1.py and trainmodel2.py are used to train 1 and 2 hidden layer perceptron model.

*trainmodel1.py* - Contains (100 x 50 x 3) nodes, 100 being the input layer of feature vectors, hidden layer containing 50 nodes, and 3 output nodes generating 1 for every particular image, for my example-
A=\[1,0,0]
O=\[0,0,1]
T=\[0,1,0]
It generates weight matrices (100 x 50), (50 x3) and two bias vectors (1 x 50), (1 x 3). 

*trainmodel1.py* - Contains (100 x 50 x 16 x 3) nodes, 100 being the input layer of feature vectors, hidden layer containing 50 nodes and 16 nodes, and 3 output nodes generating 1 for every particular image.
It generates weight matrices (100 x 50), (50 x16), (16 x 3) and three bias vectors (1 x 50), (1 x 16), (1 x 3).

**Activation function used for every node is sigmoid.
Learning rate = 0.001
Epochs=trained with learningrate=0.001
Error calculated using Mean Squared Error**

The above outputs are stored in "inputs#", where # is model number.

## Running the tests
Use main.py

### Getting weights

Loading weights and target:
```
weights, bias= get_model(model_number)
```

### Getting testset

Randomly an alphabet image is selected from "/folderpath" and feature vector(1 x 100) is generated for it. 

```
feature_vec, image_name=get_testset("folderpath")
```
### Running the model
output is (1 x 3) vector:
```
output=run_model(modelnumber, weights, bias, input)
```
The output generated and corresponding image_name is printed as output.

A=[1,0,0]
O=[0,0,1]
T=[0,1,0]
These are the ideal values for images of alphabets A, T, O.

### Example outputs
##### MODEL1

|![](https://i.imgur.com/kVh9Wsn.jpg)|![](https://i.imgur.com/JvWueen.png)|
| -------- | -------- |
|![](https://i.imgur.com/ZUkMShB.jpg)|![](https://i.imgur.com/mR1ULWS.png)|
|![](https://i.imgur.com/oN4VeEo.jpg)|![](https://i.imgur.com/bHnmPBf.png)|
|![](https://i.imgur.com/SbNgg56.jpg)|![](https://i.imgur.com/SvrmRuF.png)|
|![](https://i.imgur.com/F3rgGZV.jpg)|![](https://i.imgur.com/pvfexwQ.png)|
|![](https://i.imgur.com/BJvBRO7.jpg)|![](https://i.imgur.com/4Mk57cV.png)|

#### MODEL2

|![](https://i.imgur.com/TlMK9tU.jpg)|![](https://i.imgur.com/3RS0cHs.png)|
| -------- | -------- |
|![](https://i.imgur.com/Ut5Z2y0.jpg)|![](https://i.imgur.com/R2KSDHq.png)|
|![](https://i.imgur.com/vSGztMD.jpg)|![](https://i.imgur.com/XktuzBr.png)|
|![](https://i.imgur.com/DSwzYHA.jpg)|![](https://i.imgur.com/BHq0e4x.png)|
|![](https://i.imgur.com/380JRy6.jpg)|![](https://i.imgur.com/SnBgj31.png)|

## Built With

* [OpenCV](https://opencv.org/) - Image operations.
* [Maven](https://numpy.org/) - Matrix operations.

## Authors

* **Abhishek Kumar Yadav** - *Initial work* - [abhk943](https://github.com/abhk943)


## Acknowledgments

* [NNandDeepLearning](http://neuralnetworksanddeeplearning.com/chap2.html) - Contains a simple article on error back propagation.