|
--- |
|
license: apache-2.0 |
|
pipeline_tag: image-classification |
|
--- |
|
# Devanagari Character Recognition |
|
|
|
[**<span style="color:red">Want to try this model? Click here!</span>**](https://huggingface.co/spaces/krishnamishra8848/devanagari_character_recognition) |
|
|
|
Devanagari Character Recognition Model |
|
This repository contains a TensorFlow-based deep learning model designed for recognizing Devanagari script characters and digits. The model is trained on a dataset containing 46 unique classes, including characters from "क" to "ज्ञ" and digits from ० to ९. It achieves a high validation accuracy of 98.1% and demonstrates robust performance across all classes. |
|
|
|
Model Details |
|
Model Type: Convolutional Neural Network (CNN) |
|
Input Shape: 32x32 grayscale images |
|
Number of Classes: 46 (36 characters + 10 digits) |
|
Framework: TensorFlow |
|
File: saved_model.keras |
|
|
|
Performance Metrics |
|
Metric Value |
|
Validation Accuracy 98.1% |
|
Validation Loss 0.0777 |
|
Macro Precision 98% |
|
Macro Recall 98% |
|
Macro F1-score 98% |
|
|
|
Strengths: |
|
High precision and recall across most classes, especially for digits (०–९). |
|
Robust generalization for complex characters like त्र and ज्ञ. |
|
Weaknesses: |
|
Slightly lower recall for characters like छ and थ, likely due to similarity with other classes. |
|
Minor misclassifications in noisy or poorly written input images. |
|
|
|
How to Contribute |
|
If you'd like to contribute: |
|
|
|
Improve the model architecture or hyperparameters. |
|
Add new features, such as support for vowels or additional classes. |
|
Report issues or bugs. |
|
Feel free to open a pull request or create an issue! |
|
|
|
```python |
|
# Example Code: You can test our model in Google Colab or Any where you want |
|
import requests |
|
from tensorflow.keras.models import load_model |
|
|
|
# Download the model from Hugging Face |
|
url = "https://huggingface.co/krishnamishra8848/Devanagari_Character_Recognition/resolve/main/saved_model.keras" |
|
model_path = "saved_model.keras" |
|
|
|
response = requests.get(url) |
|
with open(model_path, "wb") as f: |
|
f.write(response.content) |
|
|
|
# Load the model |
|
model = load_model(model_path) |
|
|
|
# Nepali characters mapping |
|
label_mapping = [ |
|
"क", "ख", "ग", "घ", "ङ", "च", "छ", "ज", "झ", "ञ", |
|
"ट", "ठ", "ड", "ढ", "ण", "त", "थ", "द", "ध", "न", |
|
"प", "फ", "ब", "भ", "म", "य", "र", "ल", "व", "श", |
|
"ष", "स", "ह", "क्ष", "त्र", "ज्ञ", "०", "१", "२", "३", |
|
"४", "५", "६", "७", "८", "९" |
|
] |
|
|
|
# File upload |
|
uploaded = files.upload() |
|
|
|
# Process the uploaded image |
|
for filename in uploaded.keys(): |
|
# Load the image |
|
img = Image.open(filename) |
|
|
|
# Convert the image to grayscale if necessary |
|
img = np.array(img) |
|
if len(img.shape) == 3: # If the image is RGB |
|
img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) |
|
|
|
# Resize to 32x32 |
|
img_resized = cv2.resize(img, (32, 32)) |
|
|
|
# Normalize the pixel values |
|
img_normalized = img_resized.astype("float32") / 255.0 |
|
|
|
# Reshape to match the model's input shape |
|
img_input = img_normalized.reshape(1, 32, 32, 1) |
|
|
|
# Make a prediction |
|
prediction = model.predict(img_input) |
|
predicted_class_index = np.argmax(prediction) |
|
|
|
# Get the predicted Nepali character |
|
predicted_character = label_mapping[predicted_class_index] |
|
print(f"Predicted Character: {predicted_character}") |
|
|
|
|
|
|