Repository files navigation

Smart IoT System for Fruit Quality Detection Using Deep Learning

An end-to-end, ultra-low-cost IoT computer vision system designed to automate fruit quality inspection. This project proves that highly accurate, multi-object enterprise-grade AI inspection can be achieved on budget edge hardware (a $15 camera) without heavy local GPU processing.


🚀 Project Overview

Fruit spoilage is a critical challenge in agricultural supply chains. Existing automated solutions often rely on expensive industrial cameras or struggle with overlapping fruits. This project provides a decentralized, low-cost system capable of multi-object detection and real-time quality classification.

The entire ecosystem is controlled via an asynchronous Telegram Bot interface, allowing users to trigger hardware captures remotely and receive immediate, annotated quality reports directly to their phones or desktops.


✨ Key Features & Performance

Initial iterations utilizing MobileNetV2 struggled to localize and separate multiple fruits in a single frame. The architecture was pivoted to a custom YOLOv8 Nano model trained on a manually cleaned dataset of 8 distinct classes of fresh and spoiled fruits.

To overcome cloud latency and timeouts, the PyTorch .pt weights were optimized into the ONNX format. This eliminated framework overhead and reduced inference latency on a free-tier cloud CPU from over 15 seconds down to just 3-4 seconds.

MetricScore
mAP@5098.97%
Precision98.17%
Recall97.79%
Inference Speed3-4 seconds (Cloud CPU)

Data & Labels

LabelsTraining Batch 0

Evaluation Metrics

Training HistoryConfusion MatrixValidation Predictions


🛠️ Technology Stack

ComponentTechnologies Used
HardwareESP32-CAM Development Board, OV2640 2MP Camera Sensor
Deep LearningYOLOv8 Nano (trained on Intel Arc A750 GPU), ONNX Runtime
BackendPython 3.10, FastAPI, Uvicorn, OpenCV, httpx, asyncio
Cloud InfrastructureHugging Face Spaces (Free Tier CPU)
User InterfaceTelegram Bot API
Edge FirmwareC++ (Arduino IDE), WiFiClientSecure, HTTPClient

⚙️ System Architecture

The operational flow is designed asynchronously to prevent blocking and handle hardware timeouts:

  1. The user sends a /capture command via the Telegram Bot.
  2. The FastAPI backend receives the command and sets a state trigger flag.
  3. The ESP32-CAM (polling every 2 seconds) detects the flag, wakes up, clears stale buffers, and captures a QVGA image.
  4. The edge device compresses the frame to JPEG and pushes the payload via HTTP POST to the cloud.
  5. The ONNX-optimized YOLOv8 engine processes the image and calculates confidence scores.
  6. OpenCV draws bounding boxes, formats a Markdown statistical summary, and pushes the final report back to the user.

💻 Installation & Setup Guide

1. Model & Software Environment

To run this project on a local machine (Windows, Mac, or Linux), follow these steps:

  • Download Python 3.10 or newer (ensure you check "Add python.exe to PATH" during installation on Windows).
  • Download the dataset from Mendeley: Rotten Fruit Detector Dataset (v3).
  • Open your terminal and create an isolated virtual environment:
# Windows
python -m venv venv
venv\Scripts\activate
# Mac/Linux
python3 -m venv venv
source venv/bin/activate
  • Install the required AI packages (this installs ultralytics, opencv-python, and onnxruntime):
pip install -r requirements.txt
  • Test the model on a local image (the --show flag will pop up a window with bounding boxes):
python predict.py "1.jpg" --show

2. Hardware Pipeline (ESP32-CAM)

To connect the physical camera to your network:

  • Plug the ESP32-CAM into your computer using an ESP32-CAM-MB micro-USB shield.
  • Open the Arduino IDE.
  • Update the Wi-Fi credentials (SSID and Password) to your local router in the ESP-32_Flash_File.cpp file.
  • Flash the code to the board.

3. Telegram Bot Configuration

To set up your own remote UI:

  • Open Telegram and search for "BotFather".
  • Send the /newbot command and provide a name and username (e.g., Rotten Fruit Detector).
  • Copy the generated BOT TOKEN.
  • Install the specific bot libraries in your environment:
pip install python-telegram-bot inference pillow

🚧 Limitations & Future Work

  • Cloud Sleep States: The current deployment relies on the Hugging Face Free Tier, which imposes a "cold start" sleep state after 48 hours of inactivity. Future iterations will migrate to a dedicated DigitalOcean App Platform container to eliminate this delay.
  • Network Dependency: The system strictly requires a 2.4GHz Wi-Fi connection, making deep-field agricultural deployment challenging. Future hardware will integrate a custom PCB with a battery management system and a GSM/LTE module for remote operation.
  • Dataset Expansion: The model will be continuously trained on expanded datasets to include more regional fruit classifications.

👥 Project Team

This architecture scales directly to conveyor-belt sorting systems and cold-chain logistics monitoring at a fraction of traditional costs. None of this was possible without the dedication of the team.

Supervised by: Sayefa Arafah Arpona (Lecturer, Department of CSE, Bangladesh University of Business and Technology)

R&D by:Sohel Rana, Faysal Islam Fahad, Naushin Sultana MiMi, and Mst. Milhan Jannat Jerin.

About

Our goal was simple but ambitious: build a system that automatically detects whether fruits are fresh or rotten using nothing more than a budget IoT camera and a cloud-hosted AI model.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Smart IoT System for Fruit Quality Detection Using Deep Learning

An end-to-end, ultra-low-cost IoT computer vision system designed to automate fruit quality inspection. This project proves that highly accurate, multi-object enterprise-grade AI inspection can be achieved on budget edge hardware (a $15 camera) without heavy local GPU processing.


🚀 Project Overview

Fruit spoilage is a critical challenge in agricultural supply chains. Existing automated solutions often rely on expensive industrial cameras or struggle with overlapping fruits. This project provides a decentralized, low-cost system capable of multi-object detection and real-time quality classification.

The entire ecosystem is controlled via an asynchronous Telegram Bot interface, allowing users to trigger hardware captures remotely and receive immediate, annotated quality reports directly to their phones or desktops.


✨ Key Features & Performance

Initial iterations utilizing MobileNetV2 struggled to localize and separate multiple fruits in a single frame. The architecture was pivoted to a custom YOLOv8 Nano model trained on a manually cleaned dataset of 8 distinct classes of fresh and spoiled fruits.

To overcome cloud latency and timeouts, the PyTorch .pt weights were optimized into the ONNX format. This eliminated framework overhead and reduced inference latency on a free-tier cloud CPU from over 15 seconds down to just 3-4 seconds.

MetricScore
mAP@5098.97%
Precision98.17%
Recall97.79%
Inference Speed3-4 seconds (Cloud CPU)

Data & Labels

LabelsTraining Batch 0

Evaluation Metrics

Training HistoryConfusion MatrixValidation Predictions


🛠️ Technology Stack

ComponentTechnologies Used
HardwareESP32-CAM Development Board, OV2640 2MP Camera Sensor
Deep LearningYOLOv8 Nano (trained on Intel Arc A750 GPU), ONNX Runtime
BackendPython 3.10, FastAPI, Uvicorn, OpenCV, httpx, asyncio
Cloud InfrastructureHugging Face Spaces (Free Tier CPU)
User InterfaceTelegram Bot API
Edge FirmwareC++ (Arduino IDE), WiFiClientSecure, HTTPClient

⚙️ System Architecture

The operational flow is designed asynchronously to prevent blocking and handle hardware timeouts:

  1. The user sends a /capture command via the Telegram Bot.
  2. The FastAPI backend receives the command and sets a state trigger flag.
  3. The ESP32-CAM (polling every 2 seconds) detects the flag, wakes up, clears stale buffers, and captures a QVGA image.
  4. The edge device compresses the frame to JPEG and pushes the payload via HTTP POST to the cloud.
  5. The ONNX-optimized YOLOv8 engine processes the image and calculates confidence scores.
  6. OpenCV draws bounding boxes, formats a Markdown statistical summary, and pushes the final report back to the user.

💻 Installation & Setup Guide

1. Model & Software Environment

To run this project on a local machine (Windows, Mac, or Linux), follow these steps:

  • Download Python 3.10 or newer (ensure you check "Add python.exe to PATH" during installation on Windows).
  • Download the dataset from Mendeley: Rotten Fruit Detector Dataset (v3).
  • Open your terminal and create an isolated virtual environment:
# Windows
python -m venv venv
venv\Scripts\activate
# Mac/Linux
python3 -m venv venv
source venv/bin/activate
  • Install the required AI packages (this installs ultralytics, opencv-python, and onnxruntime):
pip install -r requirements.txt
  • Test the model on a local image (the --show flag will pop up a window with bounding boxes):
python predict.py "1.jpg" --show

2. Hardware Pipeline (ESP32-CAM)

To connect the physical camera to your network:

  • Plug the ESP32-CAM into your computer using an ESP32-CAM-MB micro-USB shield.
  • Open the Arduino IDE.
  • Update the Wi-Fi credentials (SSID and Password) to your local router in the ESP-32_Flash_File.cpp file.
  • Flash the code to the board.

3. Telegram Bot Configuration

To set up your own remote UI:

  • Open Telegram and search for "BotFather".
  • Send the /newbot command and provide a name and username (e.g., Rotten Fruit Detector).
  • Copy the generated BOT TOKEN.
  • Install the specific bot libraries in your environment:
pip install python-telegram-bot inference pillow

🚧 Limitations & Future Work

  • Cloud Sleep States: The current deployment relies on the Hugging Face Free Tier, which imposes a "cold start" sleep state after 48 hours of inactivity. Future iterations will migrate to a dedicated DigitalOcean App Platform container to eliminate this delay.
  • Network Dependency: The system strictly requires a 2.4GHz Wi-Fi connection, making deep-field agricultural deployment challenging. Future hardware will integrate a custom PCB with a battery management system and a GSM/LTE module for remote operation.
  • Dataset Expansion: The model will be continuously trained on expanded datasets to include more regional fruit classifications.

👥 Project Team

This architecture scales directly to conveyor-belt sorting systems and cold-chain logistics monitoring at a fraction of traditional costs. None of this was possible without the dedication of the team.

Supervised by: Sayefa Arafah Arpona (Lecturer, Department of CSE, Bangladesh University of Business and Technology)

R&D by:Sohel Rana, Faysal Islam Fahad, Naushin Sultana MiMi, and Mst. Milhan Jannat Jerin.

About

Our goal was simple but ambitious: build a system that automatically detects whether fruits are fresh or rotten using nothing more than a budget IoT camera and a cloud-hosted AI model.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Smart IoT System for Fruit Quality Detection Using Deep Learning

An end-to-end, ultra-low-cost IoT computer vision system designed to automate fruit quality inspection. This project proves that highly accurate, multi-object enterprise-grade AI inspection can be achieved on budget edge hardware (a $15 camera) without heavy local GPU processing.


🚀 Project Overview

Fruit spoilage is a critical challenge in agricultural supply chains. Existing automated solutions often rely on expensive industrial cameras or struggle with overlapping fruits. This project provides a decentralized, low-cost system capable of multi-object detection and real-time quality classification.

The entire ecosystem is controlled via an asynchronous Telegram Bot interface, allowing users to trigger hardware captures remotely and receive immediate, annotated quality reports directly to their phones or desktops.


✨ Key Features & Performance

Initial iterations utilizing MobileNetV2 struggled to localize and separate multiple fruits in a single frame. The architecture was pivoted to a custom YOLOv8 Nano model trained on a manually cleaned dataset of 8 distinct classes of fresh and spoiled fruits.

To overcome cloud latency and timeouts, the PyTorch .pt weights were optimized into the ONNX format. This eliminated framework overhead and reduced inference latency on a free-tier cloud CPU from over 15 seconds down to just 3-4 seconds.

MetricScore
mAP@5098.97%
Precision98.17%
Recall97.79%
Inference Speed3-4 seconds (Cloud CPU)

Data & Labels

LabelsTraining Batch 0

Evaluation Metrics

Training HistoryConfusion MatrixValidation Predictions


🛠️ Technology Stack

ComponentTechnologies Used
HardwareESP32-CAM Development Board, OV2640 2MP Camera Sensor
Deep LearningYOLOv8 Nano (trained on Intel Arc A750 GPU), ONNX Runtime
BackendPython 3.10, FastAPI, Uvicorn, OpenCV, httpx, asyncio
Cloud InfrastructureHugging Face Spaces (Free Tier CPU)
User InterfaceTelegram Bot API
Edge FirmwareC++ (Arduino IDE), WiFiClientSecure, HTTPClient

⚙️ System Architecture

The operational flow is designed asynchronously to prevent blocking and handle hardware timeouts:

  1. The user sends a /capture command via the Telegram Bot.
  2. The FastAPI backend receives the command and sets a state trigger flag.
  3. The ESP32-CAM (polling every 2 seconds) detects the flag, wakes up, clears stale buffers, and captures a QVGA image.
  4. The edge device compresses the frame to JPEG and pushes the payload via HTTP POST to the cloud.
  5. The ONNX-optimized YOLOv8 engine processes the image and calculates confidence scores.
  6. OpenCV draws bounding boxes, formats a Markdown statistical summary, and pushes the final report back to the user.

💻 Installation & Setup Guide

1. Model & Software Environment

To run this project on a local machine (Windows, Mac, or Linux), follow these steps:

  • Download Python 3.10 or newer (ensure you check "Add python.exe to PATH" during installation on Windows).
  • Download the dataset from Mendeley: Rotten Fruit Detector Dataset (v3).
  • Open your terminal and create an isolated virtual environment:
# Windows
python -m venv venv
venv\Scripts\activate
# Mac/Linux
python3 -m venv venv
source venv/bin/activate
  • Install the required AI packages (this installs ultralytics, opencv-python, and onnxruntime):
pip install -r requirements.txt
  • Test the model on a local image (the --show flag will pop up a window with bounding boxes):
python predict.py "1.jpg" --show

2. Hardware Pipeline (ESP32-CAM)

To connect the physical camera to your network:

  • Plug the ESP32-CAM into your computer using an ESP32-CAM-MB micro-USB shield.
  • Open the Arduino IDE.
  • Update the Wi-Fi credentials (SSID and Password) to your local router in the ESP-32_Flash_File.cpp file.
  • Flash the code to the board.

3. Telegram Bot Configuration

To set up your own remote UI:

  • Open Telegram and search for "BotFather".
  • Send the /newbot command and provide a name and username (e.g., Rotten Fruit Detector).
  • Copy the generated BOT TOKEN.
  • Install the specific bot libraries in your environment:
pip install python-telegram-bot inference pillow

🚧 Limitations & Future Work

  • Cloud Sleep States: The current deployment relies on the Hugging Face Free Tier, which imposes a "cold start" sleep state after 48 hours of inactivity. Future iterations will migrate to a dedicated DigitalOcean App Platform container to eliminate this delay.
  • Network Dependency: The system strictly requires a 2.4GHz Wi-Fi connection, making deep-field agricultural deployment challenging. Future hardware will integrate a custom PCB with a battery management system and a GSM/LTE module for remote operation.
  • Dataset Expansion: The model will be continuously trained on expanded datasets to include more regional fruit classifications.

👥 Project Team

This architecture scales directly to conveyor-belt sorting systems and cold-chain logistics monitoring at a fraction of traditional costs. None of this was possible without the dedication of the team.

Supervised by: Sayefa Arafah Arpona (Lecturer, Department of CSE, Bangladesh University of Business and Technology)

R&D by:Sohel Rana, Faysal Islam Fahad, Naushin Sultana MiMi, and Mst. Milhan Jannat Jerin.

About

Our goal was simple but ambitious: build a system that automatically detects whether fruits are fresh or rotten using nothing more than a budget IoT camera and a cloud-hosted AI model.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Smart IoT System for Fruit Quality Detection Using Deep Learning

An end-to-end, ultra-low-cost IoT computer vision system designed to automate fruit quality inspection. This project proves that highly accurate, multi-object enterprise-grade AI inspection can be achieved on budget edge hardware (a $15 camera) without heavy local GPU processing.


🚀 Project Overview

Fruit spoilage is a critical challenge in agricultural supply chains. Existing automated solutions often rely on expensive industrial cameras or struggle with overlapping fruits. This project provides a decentralized, low-cost system capable of multi-object detection and real-time quality classification.

The entire ecosystem is controlled via an asynchronous Telegram Bot interface, allowing users to trigger hardware captures remotely and receive immediate, annotated quality reports directly to their phones or desktops.


✨ Key Features & Performance

Initial iterations utilizing MobileNetV2 struggled to localize and separate multiple fruits in a single frame. The architecture was pivoted to a custom YOLOv8 Nano model trained on a manually cleaned dataset of 8 distinct classes of fresh and spoiled fruits.

To overcome cloud latency and timeouts, the PyTorch .pt weights were optimized into the ONNX format. This eliminated framework overhead and reduced inference latency on a free-tier cloud CPU from over 15 seconds down to just 3-4 seconds.

MetricScore
mAP@5098.97%
Precision98.17%
Recall97.79%
Inference Speed3-4 seconds (Cloud CPU)

Data & Labels

LabelsTraining Batch 0

Evaluation Metrics

Training HistoryConfusion MatrixValidation Predictions


🛠️ Technology Stack

ComponentTechnologies Used
HardwareESP32-CAM Development Board, OV2640 2MP Camera Sensor
Deep LearningYOLOv8 Nano (trained on Intel Arc A750 GPU), ONNX Runtime
BackendPython 3.10, FastAPI, Uvicorn, OpenCV, httpx, asyncio
Cloud InfrastructureHugging Face Spaces (Free Tier CPU)
User InterfaceTelegram Bot API
Edge FirmwareC++ (Arduino IDE), WiFiClientSecure, HTTPClient

⚙️ System Architecture

The operational flow is designed asynchronously to prevent blocking and handle hardware timeouts:

  1. The user sends a /capture command via the Telegram Bot.
  2. The FastAPI backend receives the command and sets a state trigger flag.
  3. The ESP32-CAM (polling every 2 seconds) detects the flag, wakes up, clears stale buffers, and captures a QVGA image.
  4. The edge device compresses the frame to JPEG and pushes the payload via HTTP POST to the cloud.
  5. The ONNX-optimized YOLOv8 engine processes the image and calculates confidence scores.
  6. OpenCV draws bounding boxes, formats a Markdown statistical summary, and pushes the final report back to the user.

💻 Installation & Setup Guide

1. Model & Software Environment

To run this project on a local machine (Windows, Mac, or Linux), follow these steps:

  • Download Python 3.10 or newer (ensure you check "Add python.exe to PATH" during installation on Windows).
  • Download the dataset from Mendeley: Rotten Fruit Detector Dataset (v3).
  • Open your terminal and create an isolated virtual environment:
# Windows
python -m venv venv
venv\Scripts\activate
# Mac/Linux
python3 -m venv venv
source venv/bin/activate
  • Install the required AI packages (this installs ultralytics, opencv-python, and onnxruntime):
pip install -r requirements.txt
  • Test the model on a local image (the --show flag will pop up a window with bounding boxes):
python predict.py "1.jpg" --show

2. Hardware Pipeline (ESP32-CAM)

To connect the physical camera to your network:

  • Plug the ESP32-CAM into your computer using an ESP32-CAM-MB micro-USB shield.
  • Open the Arduino IDE.
  • Update the Wi-Fi credentials (SSID and Password) to your local router in the ESP-32_Flash_File.cpp file.
  • Flash the code to the board.

3. Telegram Bot Configuration

To set up your own remote UI:

  • Open Telegram and search for "BotFather".
  • Send the /newbot command and provide a name and username (e.g., Rotten Fruit Detector).
  • Copy the generated BOT TOKEN.
  • Install the specific bot libraries in your environment:
pip install python-telegram-bot inference pillow

🚧 Limitations & Future Work

  • Cloud Sleep States: The current deployment relies on the Hugging Face Free Tier, which imposes a "cold start" sleep state after 48 hours of inactivity. Future iterations will migrate to a dedicated DigitalOcean App Platform container to eliminate this delay.
  • Network Dependency: The system strictly requires a 2.4GHz Wi-Fi connection, making deep-field agricultural deployment challenging. Future hardware will integrate a custom PCB with a battery management system and a GSM/LTE module for remote operation.
  • Dataset Expansion: The model will be continuously trained on expanded datasets to include more regional fruit classifications.

👥 Project Team

This architecture scales directly to conveyor-belt sorting systems and cold-chain logistics monitoring at a fraction of traditional costs. None of this was possible without the dedication of the team.

Supervised by: Sayefa Arafah Arpona (Lecturer, Department of CSE, Bangladesh University of Business and Technology)

R&D by:Sohel Rana, Faysal Islam Fahad, Naushin Sultana MiMi, and Mst. Milhan Jannat Jerin.

About

Our goal was simple but ambitious: build a system that automatically detects whether fruits are fresh or rotten using nothing more than a budget IoT camera and a cloud-hosted AI model.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Smart IoT System for Fruit Quality Detection Using Deep Learning

An end-to-end, ultra-low-cost IoT computer vision system designed to automate fruit quality inspection. This project proves that highly accurate, multi-object enterprise-grade AI inspection can be achieved on budget edge hardware (a $15 camera) without heavy local GPU processing.


🚀 Project Overview

Fruit spoilage is a critical challenge in agricultural supply chains. Existing automated solutions often rely on expensive industrial cameras or struggle with overlapping fruits. This project provides a decentralized, low-cost system capable of multi-object detection and real-time quality classification.

The entire ecosystem is controlled via an asynchronous Telegram Bot interface, allowing users to trigger hardware captures remotely and receive immediate, annotated quality reports directly to their phones or desktops.


✨ Key Features & Performance

Initial iterations utilizing MobileNetV2 struggled to localize and separate multiple fruits in a single frame. The architecture was pivoted to a custom YOLOv8 Nano model trained on a manually cleaned dataset of 8 distinct classes of fresh and spoiled fruits.

To overcome cloud latency and timeouts, the PyTorch .pt weights were optimized into the ONNX format. This eliminated framework overhead and reduced inference latency on a free-tier cloud CPU from over 15 seconds down to just 3-4 seconds.

MetricScore
mAP@5098.97%
Precision98.17%
Recall97.79%
Inference Speed3-4 seconds (Cloud CPU)

Data & Labels

LabelsTraining Batch 0

Evaluation Metrics

Training HistoryConfusion MatrixValidation Predictions


🛠️ Technology Stack

ComponentTechnologies Used
HardwareESP32-CAM Development Board, OV2640 2MP Camera Sensor
Deep LearningYOLOv8 Nano (trained on Intel Arc A750 GPU), ONNX Runtime
BackendPython 3.10, FastAPI, Uvicorn, OpenCV, httpx, asyncio
Cloud InfrastructureHugging Face Spaces (Free Tier CPU)
User InterfaceTelegram Bot API
Edge FirmwareC++ (Arduino IDE), WiFiClientSecure, HTTPClient

⚙️ System Architecture

The operational flow is designed asynchronously to prevent blocking and handle hardware timeouts:

  1. The user sends a /capture command via the Telegram Bot.
  2. The FastAPI backend receives the command and sets a state trigger flag.
  3. The ESP32-CAM (polling every 2 seconds) detects the flag, wakes up, clears stale buffers, and captures a QVGA image.
  4. The edge device compresses the frame to JPEG and pushes the payload via HTTP POST to the cloud.
  5. The ONNX-optimized YOLOv8 engine processes the image and calculates confidence scores.
  6. OpenCV draws bounding boxes, formats a Markdown statistical summary, and pushes the final report back to the user.

💻 Installation & Setup Guide

1. Model & Software Environment

To run this project on a local machine (Windows, Mac, or Linux), follow these steps:

  • Download Python 3.10 or newer (ensure you check "Add python.exe to PATH" during installation on Windows).
  • Download the dataset from Mendeley: Rotten Fruit Detector Dataset (v3).
  • Open your terminal and create an isolated virtual environment:
# Windows
python -m venv venv
venv\Scripts\activate
# Mac/Linux
python3 -m venv venv
source venv/bin/activate
  • Install the required AI packages (this installs ultralytics, opencv-python, and onnxruntime):
pip install -r requirements.txt
  • Test the model on a local image (the --show flag will pop up a window with bounding boxes):
python predict.py "1.jpg" --show

2. Hardware Pipeline (ESP32-CAM)

To connect the physical camera to your network:

  • Plug the ESP32-CAM into your computer using an ESP32-CAM-MB micro-USB shield.
  • Open the Arduino IDE.
  • Update the Wi-Fi credentials (SSID and Password) to your local router in the ESP-32_Flash_File.cpp file.
  • Flash the code to the board.

3. Telegram Bot Configuration

To set up your own remote UI:

  • Open Telegram and search for "BotFather".
  • Send the /newbot command and provide a name and username (e.g., Rotten Fruit Detector).
  • Copy the generated BOT TOKEN.
  • Install the specific bot libraries in your environment:
pip install python-telegram-bot inference pillow

🚧 Limitations & Future Work

  • Cloud Sleep States: The current deployment relies on the Hugging Face Free Tier, which imposes a "cold start" sleep state after 48 hours of inactivity. Future iterations will migrate to a dedicated DigitalOcean App Platform container to eliminate this delay.
  • Network Dependency: The system strictly requires a 2.4GHz Wi-Fi connection, making deep-field agricultural deployment challenging. Future hardware will integrate a custom PCB with a battery management system and a GSM/LTE module for remote operation.
  • Dataset Expansion: The model will be continuously trained on expanded datasets to include more regional fruit classifications.

👥 Project Team

This architecture scales directly to conveyor-belt sorting systems and cold-chain logistics monitoring at a fraction of traditional costs. None of this was possible without the dedication of the team.

Supervised by: Sayefa Arafah Arpona (Lecturer, Department of CSE, Bangladesh University of Business and Technology)

R&D by:Sohel Rana, Faysal Islam Fahad, Naushin Sultana MiMi, and Mst. Milhan Jannat Jerin.

About

Our goal was simple but ambitious: build a system that automatically detects whether fruits are fresh or rotten using nothing more than a budget IoT camera and a cloud-hosted AI model.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Smart IoT System for Fruit Quality Detection Using Deep Learning

An end-to-end, ultra-low-cost IoT computer vision system designed to automate fruit quality inspection. This project proves that highly accurate, multi-object enterprise-grade AI inspection can be achieved on budget edge hardware (a $15 camera) without heavy local GPU processing.


🚀 Project Overview

Fruit spoilage is a critical challenge in agricultural supply chains. Existing automated solutions often rely on expensive industrial cameras or struggle with overlapping fruits. This project provides a decentralized, low-cost system capable of multi-object detection and real-time quality classification.

The entire ecosystem is controlled via an asynchronous Telegram Bot interface, allowing users to trigger hardware captures remotely and receive immediate, annotated quality reports directly to their phones or desktops.


✨ Key Features & Performance

Initial iterations utilizing MobileNetV2 struggled to localize and separate multiple fruits in a single frame. The architecture was pivoted to a custom YOLOv8 Nano model trained on a manually cleaned dataset of 8 distinct classes of fresh and spoiled fruits.

To overcome cloud latency and timeouts, the PyTorch .pt weights were optimized into the ONNX format. This eliminated framework overhead and reduced inference latency on a free-tier cloud CPU from over 15 seconds down to just 3-4 seconds.

MetricScore
mAP@5098.97%
Precision98.17%
Recall97.79%
Inference Speed3-4 seconds (Cloud CPU)

Data & Labels

LabelsTraining Batch 0

Evaluation Metrics

Training HistoryConfusion MatrixValidation Predictions


🛠️ Technology Stack

ComponentTechnologies Used
HardwareESP32-CAM Development Board, OV2640 2MP Camera Sensor
Deep LearningYOLOv8 Nano (trained on Intel Arc A750 GPU), ONNX Runtime
BackendPython 3.10, FastAPI, Uvicorn, OpenCV, httpx, asyncio
Cloud InfrastructureHugging Face Spaces (Free Tier CPU)
User InterfaceTelegram Bot API
Edge FirmwareC++ (Arduino IDE), WiFiClientSecure, HTTPClient

⚙️ System Architecture

The operational flow is designed asynchronously to prevent blocking and handle hardware timeouts:

  1. The user sends a /capture command via the Telegram Bot.
  2. The FastAPI backend receives the command and sets a state trigger flag.
  3. The ESP32-CAM (polling every 2 seconds) detects the flag, wakes up, clears stale buffers, and captures a QVGA image.
  4. The edge device compresses the frame to JPEG and pushes the payload via HTTP POST to the cloud.
  5. The ONNX-optimized YOLOv8 engine processes the image and calculates confidence scores.
  6. OpenCV draws bounding boxes, formats a Markdown statistical summary, and pushes the final report back to the user.

💻 Installation & Setup Guide

1. Model & Software Environment

To run this project on a local machine (Windows, Mac, or Linux), follow these steps:

  • Download Python 3.10 or newer (ensure you check "Add python.exe to PATH" during installation on Windows).
  • Download the dataset from Mendeley: Rotten Fruit Detector Dataset (v3).
  • Open your terminal and create an isolated virtual environment:
# Windows
python -m venv venv
venv\Scripts\activate
# Mac/Linux
python3 -m venv venv
source venv/bin/activate
  • Install the required AI packages (this installs ultralytics, opencv-python, and onnxruntime):
pip install -r requirements.txt
  • Test the model on a local image (the --show flag will pop up a window with bounding boxes):
python predict.py "1.jpg" --show

2. Hardware Pipeline (ESP32-CAM)

To connect the physical camera to your network:

  • Plug the ESP32-CAM into your computer using an ESP32-CAM-MB micro-USB shield.
  • Open the Arduino IDE.
  • Update the Wi-Fi credentials (SSID and Password) to your local router in the ESP-32_Flash_File.cpp file.
  • Flash the code to the board.

3. Telegram Bot Configuration

To set up your own remote UI:

  • Open Telegram and search for "BotFather".
  • Send the /newbot command and provide a name and username (e.g., Rotten Fruit Detector).
  • Copy the generated BOT TOKEN.
  • Install the specific bot libraries in your environment:
pip install python-telegram-bot inference pillow

🚧 Limitations & Future Work

  • Cloud Sleep States: The current deployment relies on the Hugging Face Free Tier, which imposes a "cold start" sleep state after 48 hours of inactivity. Future iterations will migrate to a dedicated DigitalOcean App Platform container to eliminate this delay.
  • Network Dependency: The system strictly requires a 2.4GHz Wi-Fi connection, making deep-field agricultural deployment challenging. Future hardware will integrate a custom PCB with a battery management system and a GSM/LTE module for remote operation.
  • Dataset Expansion: The model will be continuously trained on expanded datasets to include more regional fruit classifications.

👥 Project Team

This architecture scales directly to conveyor-belt sorting systems and cold-chain logistics monitoring at a fraction of traditional costs. None of this was possible without the dedication of the team.

Supervised by: Sayefa Arafah Arpona (Lecturer, Department of CSE, Bangladesh University of Business and Technology)

R&D by:Sohel Rana, Faysal Islam Fahad, Naushin Sultana MiMi, and Mst. Milhan Jannat Jerin.

About

Our goal was simple but ambitious: build a system that automatically detects whether fruits are fresh or rotten using nothing more than a budget IoT camera and a cloud-hosted AI model.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Smart IoT System for Fruit Quality Detection Using Deep Learning

An end-to-end, ultra-low-cost IoT computer vision system designed to automate fruit quality inspection. This project proves that highly accurate, multi-object enterprise-grade AI inspection can be achieved on budget edge hardware (a $15 camera) without heavy local GPU processing.


🚀 Project Overview

Fruit spoilage is a critical challenge in agricultural supply chains. Existing automated solutions often rely on expensive industrial cameras or struggle with overlapping fruits. This project provides a decentralized, low-cost system capable of multi-object detection and real-time quality classification.

The entire ecosystem is controlled via an asynchronous Telegram Bot interface, allowing users to trigger hardware captures remotely and receive immediate, annotated quality reports directly to their phones or desktops.


✨ Key Features & Performance

Initial iterations utilizing MobileNetV2 struggled to localize and separate multiple fruits in a single frame. The architecture was pivoted to a custom YOLOv8 Nano model trained on a manually cleaned dataset of 8 distinct classes of fresh and spoiled fruits.

To overcome cloud latency and timeouts, the PyTorch .pt weights were optimized into the ONNX format. This eliminated framework overhead and reduced inference latency on a free-tier cloud CPU from over 15 seconds down to just 3-4 seconds.

MetricScore
mAP@5098.97%
Precision98.17%
Recall97.79%
Inference Speed3-4 seconds (Cloud CPU)

Data & Labels

LabelsTraining Batch 0

Evaluation Metrics

Training HistoryConfusion MatrixValidation Predictions


🛠️ Technology Stack

ComponentTechnologies Used
HardwareESP32-CAM Development Board, OV2640 2MP Camera Sensor
Deep LearningYOLOv8 Nano (trained on Intel Arc A750 GPU), ONNX Runtime
BackendPython 3.10, FastAPI, Uvicorn, OpenCV, httpx, asyncio
Cloud InfrastructureHugging Face Spaces (Free Tier CPU)
User InterfaceTelegram Bot API
Edge FirmwareC++ (Arduino IDE), WiFiClientSecure, HTTPClient

⚙️ System Architecture

The operational flow is designed asynchronously to prevent blocking and handle hardware timeouts:

  1. The user sends a /capture command via the Telegram Bot.
  2. The FastAPI backend receives the command and sets a state trigger flag.
  3. The ESP32-CAM (polling every 2 seconds) detects the flag, wakes up, clears stale buffers, and captures a QVGA image.
  4. The edge device compresses the frame to JPEG and pushes the payload via HTTP POST to the cloud.
  5. The ONNX-optimized YOLOv8 engine processes the image and calculates confidence scores.
  6. OpenCV draws bounding boxes, formats a Markdown statistical summary, and pushes the final report back to the user.

💻 Installation & Setup Guide

1. Model & Software Environment

To run this project on a local machine (Windows, Mac, or Linux), follow these steps:

  • Download Python 3.10 or newer (ensure you check "Add python.exe to PATH" during installation on Windows).
  • Download the dataset from Mendeley: Rotten Fruit Detector Dataset (v3).
  • Open your terminal and create an isolated virtual environment:
# Windows
python -m venv venv
venv\Scripts\activate
# Mac/Linux
python3 -m venv venv
source venv/bin/activate
  • Install the required AI packages (this installs ultralytics, opencv-python, and onnxruntime):
pip install -r requirements.txt
  • Test the model on a local image (the --show flag will pop up a window with bounding boxes):
python predict.py "1.jpg" --show

2. Hardware Pipeline (ESP32-CAM)

To connect the physical camera to your network:

  • Plug the ESP32-CAM into your computer using an ESP32-CAM-MB micro-USB shield.
  • Open the Arduino IDE.
  • Update the Wi-Fi credentials (SSID and Password) to your local router in the ESP-32_Flash_File.cpp file.
  • Flash the code to the board.

3. Telegram Bot Configuration

To set up your own remote UI:

  • Open Telegram and search for "BotFather".
  • Send the /newbot command and provide a name and username (e.g., Rotten Fruit Detector).
  • Copy the generated BOT TOKEN.
  • Install the specific bot libraries in your environment:
pip install python-telegram-bot inference pillow

🚧 Limitations & Future Work

  • Cloud Sleep States: The current deployment relies on the Hugging Face Free Tier, which imposes a "cold start" sleep state after 48 hours of inactivity. Future iterations will migrate to a dedicated DigitalOcean App Platform container to eliminate this delay.
  • Network Dependency: The system strictly requires a 2.4GHz Wi-Fi connection, making deep-field agricultural deployment challenging. Future hardware will integrate a custom PCB with a battery management system and a GSM/LTE module for remote operation.
  • Dataset Expansion: The model will be continuously trained on expanded datasets to include more regional fruit classifications.

👥 Project Team

This architecture scales directly to conveyor-belt sorting systems and cold-chain logistics monitoring at a fraction of traditional costs. None of this was possible without the dedication of the team.

Supervised by: Sayefa Arafah Arpona (Lecturer, Department of CSE, Bangladesh University of Business and Technology)

R&D by:Sohel Rana, Faysal Islam Fahad, Naushin Sultana MiMi, and Mst. Milhan Jannat Jerin.

About

Our goal was simple but ambitious: build a system that automatically detects whether fruits are fresh or rotten using nothing more than a budget IoT camera and a cloud-hosted AI model.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Smart IoT System for Fruit Quality Detection Using Deep Learning

An end-to-end, ultra-low-cost IoT computer vision system designed to automate fruit quality inspection. This project proves that highly accurate, multi-object enterprise-grade AI inspection can be achieved on budget edge hardware (a $15 camera) without heavy local GPU processing.


🚀 Project Overview

Fruit spoilage is a critical challenge in agricultural supply chains. Existing automated solutions often rely on expensive industrial cameras or struggle with overlapping fruits. This project provides a decentralized, low-cost system capable of multi-object detection and real-time quality classification.

The entire ecosystem is controlled via an asynchronous Telegram Bot interface, allowing users to trigger hardware captures remotely and receive immediate, annotated quality reports directly to their phones or desktops.


✨ Key Features & Performance

Initial iterations utilizing MobileNetV2 struggled to localize and separate multiple fruits in a single frame. The architecture was pivoted to a custom YOLOv8 Nano model trained on a manually cleaned dataset of 8 distinct classes of fresh and spoiled fruits.

To overcome cloud latency and timeouts, the PyTorch .pt weights were optimized into the ONNX format. This eliminated framework overhead and reduced inference latency on a free-tier cloud CPU from over 15 seconds down to just 3-4 seconds.

MetricScore
mAP@5098.97%
Precision98.17%
Recall97.79%
Inference Speed3-4 seconds (Cloud CPU)

Data & Labels

LabelsTraining Batch 0

Evaluation Metrics

Training HistoryConfusion MatrixValidation Predictions


🛠️ Technology Stack

ComponentTechnologies Used
HardwareESP32-CAM Development Board, OV2640 2MP Camera Sensor
Deep LearningYOLOv8 Nano (trained on Intel Arc A750 GPU), ONNX Runtime
BackendPython 3.10, FastAPI, Uvicorn, OpenCV, httpx, asyncio
Cloud InfrastructureHugging Face Spaces (Free Tier CPU)
User InterfaceTelegram Bot API
Edge FirmwareC++ (Arduino IDE), WiFiClientSecure, HTTPClient

⚙️ System Architecture

The operational flow is designed asynchronously to prevent blocking and handle hardware timeouts:

  1. The user sends a /capture command via the Telegram Bot.
  2. The FastAPI backend receives the command and sets a state trigger flag.
  3. The ESP32-CAM (polling every 2 seconds) detects the flag, wakes up, clears stale buffers, and captures a QVGA image.
  4. The edge device compresses the frame to JPEG and pushes the payload via HTTP POST to the cloud.
  5. The ONNX-optimized YOLOv8 engine processes the image and calculates confidence scores.
  6. OpenCV draws bounding boxes, formats a Markdown statistical summary, and pushes the final report back to the user.

💻 Installation & Setup Guide

1. Model & Software Environment

To run this project on a local machine (Windows, Mac, or Linux), follow these steps:

  • Download Python 3.10 or newer (ensure you check "Add python.exe to PATH" during installation on Windows).
  • Download the dataset from Mendeley: Rotten Fruit Detector Dataset (v3).
  • Open your terminal and create an isolated virtual environment:
# Windows
python -m venv venv
venv\Scripts\activate
# Mac/Linux
python3 -m venv venv
source venv/bin/activate
  • Install the required AI packages (this installs ultralytics, opencv-python, and onnxruntime):
pip install -r requirements.txt
  • Test the model on a local image (the --show flag will pop up a window with bounding boxes):
python predict.py "1.jpg" --show

2. Hardware Pipeline (ESP32-CAM)

To connect the physical camera to your network:

  • Plug the ESP32-CAM into your computer using an ESP32-CAM-MB micro-USB shield.
  • Open the Arduino IDE.
  • Update the Wi-Fi credentials (SSID and Password) to your local router in the ESP-32_Flash_File.cpp file.
  • Flash the code to the board.

3. Telegram Bot Configuration

To set up your own remote UI:

  • Open Telegram and search for "BotFather".
  • Send the /newbot command and provide a name and username (e.g., Rotten Fruit Detector).
  • Copy the generated BOT TOKEN.
  • Install the specific bot libraries in your environment:
pip install python-telegram-bot inference pillow

🚧 Limitations & Future Work

  • Cloud Sleep States: The current deployment relies on the Hugging Face Free Tier, which imposes a "cold start" sleep state after 48 hours of inactivity. Future iterations will migrate to a dedicated DigitalOcean App Platform container to eliminate this delay.
  • Network Dependency: The system strictly requires a 2.4GHz Wi-Fi connection, making deep-field agricultural deployment challenging. Future hardware will integrate a custom PCB with a battery management system and a GSM/LTE module for remote operation.
  • Dataset Expansion: The model will be continuously trained on expanded datasets to include more regional fruit classifications.

👥 Project Team

This architecture scales directly to conveyor-belt sorting systems and cold-chain logistics monitoring at a fraction of traditional costs. None of this was possible without the dedication of the team.

Supervised by: Sayefa Arafah Arpona (Lecturer, Department of CSE, Bangladesh University of Business and Technology)

R&D by:Sohel Rana, Faysal Islam Fahad, Naushin Sultana MiMi, and Mst. Milhan Jannat Jerin.

About

Our goal was simple but ambitious: build a system that automatically detects whether fruits are fresh or rotten using nothing more than a budget IoT camera and a cloud-hosted AI model.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages