CS 663 Computer Vision • Project 1

Plant Disease Detection Using Mobile Images and Video

Module 5: Temporal Video Streams, DeepSORT Tracking & Multi-View Fusion

By Mahitha Rangineni • M.S. Computer Science • California State University, East Bay

Video and Multi-View Plant Disease Analysis

Relying on a single photo can be risky in outdoor conditions. A temporary shadow, wind blur, or sunlight glare can make an otherwise healthy leaf look diseased, or cause the model to miss subtle symptoms.

A video records multiple frames from slightly different angles as the user moves around the plant. Combining observations across several frames makes the final diagnosis much more reliable [5].

Key Steps in Video-Based Monitoring

Pipeline Overview

Video → Frame Extraction → YOLO Leaf Detection → DeepSORT Tracking → Best View Selection → Segmentation → Consensus Diagnosis [5].

Video-based plant disease analysis pipeline showing frame extraction, tracking, segmentation, and diagnosis
Figure 4: Video Processing and Leaf Tracking Architecture How mobile video, DeepSORT tracking, and multi-frame decision making work together in field plant monitoring.
Image created by the author with AI-assisted visualization.

Single-Image vs. Video Analysis

Feature Single-Image Analysis Video & Multi-View
Reliability Can fail due to single-frame blur or glare More reliable; combines results from multiple frames
Occlusion Hidden symptoms stay hidden Camera movement reveals different angles
Leaf Tracking No tracking across time DeepSORT assigns unique leaf IDs
Computation Low (one-time inference) Higher (processes multiple frames)

Algorithm 2: Multi-Frame Majority Voting

A simple and effective way to combine predictions across video frames is majority voting. When a tracked leaf is seen across several frames, the model predicts a label for each frame. The final diagnosis is simply the label that appears most often.

Python 3 multi_frame_voting.py
# Multi-Frame Majority Voting Algorithm
# Input: List of predictions across 10 video frames for a single tracked leaf

from collections import Counter

# Simulated 10 frame predictions for a tracked leaf:
frame_predictions = [
    "Leaf Spot",
    "Leaf Spot",
    "Healthy",      # Frame affected by sunlight glare
    "Leaf Spot",
    "Leaf Spot",
    "Healthy",      # Frame blurred by wind motion
    "Leaf Spot",
    "Leaf Spot",
    "Leaf Spot",
    "Healthy"       # Frame taken at a steep angle
]

# Count the frequency of each predicted label
vote_counts = Counter(frame_predictions)

# Select the label with the highest vote count
final_prediction = vote_counts.most_common(1)[0][0]

print("Frame predictions:", frame_predictions)
print("Vote counts:", dict(vote_counts))
print("Final prediction:", final_prediction)

Inputs & Outputs

Input: 10 sequential frame predictions with 3 noisy frames.

Output: Vote counts: {'Leaf Spot': 7, 'Healthy': 3} → Final prediction: Leaf Spot

Practical Value

Noisy frames caused by glare or blur are outvoted by the majority, preventing false diagnoses.

How It Works

  1. Extract frames for a tracked leaf.
  2. Run the disease model on each frame.
  3. Tally how many times each class was predicted.
  4. Select the disease class with the most votes.
Audio Guide

Module Narration

A 1–2 minute audio discussion of frame processing, DeepSORT tracking, and multi-frame majority voting.

🎧
Audio Narration (audio/video-audio.mp3) Audio recording scheduled. The media player will activate automatically once the audio file is uploaded to the repository.