Harness the power of neural networks to recognize American Sign Language (ASL) digits with this high-performance C implementation. This project utilizes a custom dataset based on MNIST to train and test a neural network capable of identifying hand gestures, providing a foundation for future development in the realm of gesture recognition and human-computer interaction.
- Overview
- Motivation
- Features
- Getting Started
- Usage
- Project Structure
- Technical Details
- Contributing
- License
- Acknowledgements
This project showcases how fundamental machine learning techniques can be implemented in C to solve real-world problems, specifically recognizing ASL digits. By leveraging a lightweight neural network framework, this project is designed to be both efficient and extensible, making it suitable for embedded systems and low-power devices.
As a computer scientist passionate about aerial robotics, IoT, and the broader scope of intelligent automation, this project is a stepping stone towards more sophisticated systems that can interact seamlessly with human operators. The goal is to explore how efficient algorithms can be deployed on constrained hardware to perform complex tasks, paving the way for innovations in smart homes, autonomous vehicles, and beyond.
- Custom Neural Network: Built from scratch using C, providing an in-depth understanding of neural network mechanics.
- Optimized for Performance: Code is fine-tuned for speed and memory efficiency, making it suitable for deployment on embedded systems.
- Educational Value: Offers a clear and concise implementation for those looking to understand the inner workings of neural networks in a low-level language.
- Modular Codebase: Easily extendable to accommodate more complex neural network architectures or additional features such as real-time gesture recognition.
- C compiler (e.g.,
gcc
) - Make utility (
make
) - Git (to clone the repository)
-
Clone the repository:
git clone https://github.com/Mustafa-khann/MNIST-Sign-Language-Recognizer-in-C.git cd MNIST-Sign-Language-Recognizer-in-C
-
Build the project:
make
-
Download and Prepare the Dataset:
- Obtain the MNIST-like dataset for ASL digits.
- Place the dataset files in the
data/
directory. - Ensure the dataset is formatted correctly to match the expected input format of the program.
After building the project and setting up the dataset, execute the following command to start the recognition process:
./sign_language_recognizer
- Modify the source code to adjust parameters such as learning rate, number of epochs, etc.
- The current implementation uses a simple neural network architecture; feel free to expand and experiment with different models.
- src/: Contains the source code files.
- include/: Header files defining functions and structures.
- data/: Directory where the MNIST-like dataset should be placed.
- bin/: Compiled binaries.
- Makefile: Script for building the project.
Contributions are welcome! If you have ideas to improve the project, whether through optimizing the existing code or adding new features, feel free to fork the repository and submit a pull request. Please ensure your contributions align with the overall project goals and adhere to the existing coding style.
- Fork the repository.
- Create a new branch:
git checkout -b feature-branch-name
- Make your changes.
- Commit your changes:
git commit -m 'Description of changes'
- Push to the branch:
git push origin feature-branch-name
- Open a pull request.
This project is licensed under the MIT License - see the LICENSE file for details.
- MNIST Dataset: Thanks to Yann LeCun and others who have made the MNIST dataset widely available for educational and research purposes.
- Inspiration: This project was inspired by the need to make machine learning accessible and understandable through a practical application in C.
- Make sure to include a
LICENSE
file in your repository if you haven't already. ThisREADME.md
assumes you will use the MIT License. - You might want to expand sections such as Usage and Contributing as the project evolves, especially if new features are added or the setup process changes.
- The Acknowledgements section is great for giving credit and can be expanded to include more influences or resources you used.
Let me know if you need more customization or if there's anything else you want to add!