Skip to content

A simple image classification project for recognizing different types of fruits using ML.NET. The model is trained with a dataset of labeled fruit images and uses a pre-trained deep learning model for transfer learning

License

Notifications You must be signed in to change notification settings

luangrezende/fruit-recognition-net-ml

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🍎 Fruit Recognition ML

Build Status Release Downloads

.NET ML.NET GPU Platform

High-performance GPU-accelerated machine learning for fruit classification

FeaturesQuick StartDocumentationPerformanceContributing

Features

Performance

  • 95%+ accuracy on balanced datasets
  • GPU acceleration with CUDA support
  • Fast inference - 394+ images/second
  • 12-second training on RTX 4090

Technical

  • ML.NET 4.0 with SDCA algorithm
  • Anti-overfitting measures
  • Cross-platform (Windows/Linux)
  • Self-contained executables

Flexible Data

  • 8 image formats supported
  • Recursive folder scanning
  • Any directory structure
  • Automatic class detection

Easy to Use

  • No dependencies required
  • JSON configuration
  • Batch processing
  • Professional logging

Quick Start

Option 1: Pre-built Releases

# 1. Download from releases
curl -L https://github.com/luangrezende/fruit-recognition-net-ml/releases/download/v1.0.0/fruit-recognition-training-win-x64.zip

# 2. Extract and run
./fruit-recognition-training    # Train your model
./fruit-recognition-testing     # Make predictions

Option 2: Build from Source

git clone https://github.com/luangrezende/fruit-recognition-net-ml.git
cd fruit-recognition-net-ml/src
dotnet restore
dotnet build --configuration Release

Project Structure

fruit-recognition-net-ml/
├── 📂 src/
│   ├── Fruit.Recognition.MachineLearning.Domain/     # Core ML models
│   ├── Fruit.Recognition.MachineLearning.Training/   # Training app
│   ├── Fruit.Recognition.MachineLearning.Testing/    # Testing app
│   ├── data/
│   │   ├── training/    # Your training images
│   │   └── test/        # Images for testing
│   └── models/       # Trained ML models
└── .github/         # CI/CD workflows

Supported Fruits

Fruit Status Notes
🍎 Apples ✅ Built-in Red, Green, Yellow varieties
🍌 Bananas ✅ Built-in Various ripeness stages
🍊 Oranges ✅ Built-in Multiple sizes and types
🍇 Custom ✅ Flexible Add any fruit by creating folders

Configuration

Training Configuration (click to expand)
{
  "ModelConfiguration": {
    "ImageWidth": 128,
    "ImageHeight": 128,
    "TestFraction": 0.3,
    "ValidationFraction": 0.2,
    "UseGpu": true,
    "FallbackToCpu": false,
    "Architecture": "Anti-Overfitting-SDCA"
  },
  "PathConfiguration": {
    "DatasetPath": "..\\data\\training",
    "ModelOutputPath": "..\\models\\fruit-recognition-model.zip"
  }
}
Testing Configuration (click to expand)
{
  "PathConfiguration": {
    "ModelPath": "..\\models\\fruit-recognition-model.zip",
    "TestImagesPath": "..\\data\\test"
  }
}

Usage

Training a Model

cd src/Fruit.Recognition.MachineLearning.Training
dotnet run

What happens:

  1. Scans training directory recursively
  2. Loads and validates all images
  3. Trains GPU-optimized model
  4. Saves model for predictions
  5. Shows accuracy metrics

Making Predictions

cd src/Fruit.Recognition.MachineLearning.Testing
dotnet run

What happens:

  1. Loads the trained model
  2. Processes test images
  3. Classifies with confidence scores
  4. Displays batch results

Performance

Metric Value
Accuracy 95.4%
Training Time ~12 seconds
Inference Speed 394+ images/sec
Dataset Size 4,637 images
Hardware RTX 4090, 32GB RAM

System Requirements

Minimum

  • Windows 10/11 x64 or Linux x64
  • 4GB RAM
  • 1GB free disk space

Recommended (GPU Training)

  • NVIDIA RTX 3060+
  • 8GB+ RAM
  • CUDA 12.x toolkit
  • SSD storage

Development

# Restore dependencies
dotnet restore src/Fruit.Recognition.MachineLearning.sln

# Build solution
dotnet build src/Fruit.Recognition.MachineLearning.sln --configuration Release

# Run training
dotnet run --project src/Fruit.Recognition.MachineLearning.Training

# Run testing
dotnet run --project src/Fruit.Recognition.MachineLearning.Testing

Troubleshooting

GPU Issues
# Check CUDA installation
nvcc --version
nvidia-smi

# Enable CPU fallback
"FallbackToCpu": true
Low Accuracy
  • Add more training images (100+ per fruit)
  • Balance dataset between classes
  • Increase image resolution
  • Check for mislabeled images

CI/CD Pipeline

This project uses GitHub Actions for:

  • Continuous Integration
  • Cross-platform builds
  • Automated releases
  • Documentation updates

Create a Release

git tag v1.0.0
git push origin v1.0.0

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contributing

  1. Fork the repository
  2. Create your feature branch
  3. Commit your changes
  4. Push to the branch
  5. Open a Pull Request

Support

Issues Discussions Wiki


Built with ❤️ using ML.NET 4.0 and .NET 8

If this project helped you, please consider giving it a star!

About

A simple image classification project for recognizing different types of fruits using ML.NET. The model is trained with a dataset of labeled fruit images and uses a pre-trained deep learning model for transfer learning

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages