How AI Diagnoses Cannabis Plant Diseases: PlantLab's 31-Condition Model
The short version
Most plant diagnosis tools give you a paragraph to read. PlantLab gives your automation system something to act on.
The model covers 31 cannabis conditions and pests at 99.1% balanced accuracy. Balanced means every class counts equally – a system that nails common deficiencies but misses rare pests does not score well. The output is structured JSON that Home Assistant, Node-RED, or a custom controller can read and act on without a person in the loop.
Why generic AI fails
The first time I tried AI for plant diagnosis, I uploaded a photo to ChatGPT. It told me I had a calcium deficiency. It was light burn. The two look nothing alike if you know what you are looking at, but ChatGPT was never trained specifically on plant images. It is a convincing generalist, and when it does not know, it guesses.
That is what most “AI plant diagnosis” apps actually do. Wrap a general-purpose language model, send your photo with a prompt, return whatever comes back. The output is confident, plausible, and sometimes wrong, and a new grower has no easy way to tell which time is which. It is also something you can do yourself for free, which makes paying for the service hard to justify.
The deeper problem is that even when these tools are right, they hand you prose. Useful for a person reading a screen. Useless for an automation system that needs to decide whether to adjust pH, run a fan, or send you an alert.
What PlantLab detects
The model covers 31 cannabis conditions and pests across four families.
Nutrient issues: nitrogen, phosphorus, potassium, calcium, magnesium, iron, boron, manganese, and zinc deficiencies, plus nitrogen toxicity.
Diseases: powdery mildew, bud rot, root rot, pythium, rust fungi, septoria, and mosaic virus.
Pests: spider mites, thrips, aphids, whiteflies, fungus gnats, caterpillars, leafhoppers, leaf miners, and mealybugs.
Environmental: light burn, light deficiency, heat stress, overwatering, and underwatering.
Every class scores above 95% detection accuracy, including the rarer ones.
What you get back
{
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"schema_version": "2.0.0",
"success": true,
"is_cannabis": true,
"is_healthy": false,
"growth_stage": "flowering",
"conditions": [
{ "class_id": "bud_rot", "confidence": 0.92 }
],
"pests": [],
"reliability_score": 0.88
}
Not a paragraph for a person to read and interpret. A machine-readable signal. Your controller sees 92% confidence on bud rot in a flowering plant and can ramp airflow, send an alert, or log the event – keeping you informed without forcing you to step in every time.
reliability_score is a separate trust signal on top of per-class confidence. It estimates whether the entire diagnosis holds up on this specific image, which is most useful on the hard cases – mixed symptoms, lookalike conditions, edge-case growth stages. There is more on it in How PlantLab Knows When It Might Be Wrong.
What's new in this release
The previous version of the model covered 24 conditions. This release brings it to 31. The additions came from what growers actually run into and ask about.
Bud rot is one of the worst things that can happen during flowering. Dense colas plus humid air invite Botrytis, and by the time you can see it with the naked eye, it has often already spread.
Heat stress causes leaf curling, foxtailing, and bleaching that new growers often confuse with nutrient issues. Splitting it into its own class prevents the misdiagnosis.
Fungus gnats are usually the first pest a new indoor grower meets. Caterpillars, leafhoppers, and leaf miners are common outdoor threats. Mealybugs are less common but brutal once they take hold. All five now have dedicated detection.
Boron, manganese, and zinc deficiencies fill out the micronutrient coverage. Less common than the macros, but harder to spot by eye because their symptoms overlap with other conditions.
A diagnosis that surprised me
I sent a sample of recent images through the live service to spot-check it against my own intuition.
One result stood out. The photo was a plant that looked underwatered – drooping, leaves curling, the classic signs. The model called it overwatered. I was ready to write that off as wrong, then I went back through earlier photos. The plant had been chronically overwatered for weeks. That ongoing stress had caused nutrient lockout, which then progressed into something that looked like underwatering. The model caught the underlying cause. Without that, I would have treated the symptom and made the problem worse.
What's next
A few things in the queue.
Multiple concurrent conditions in one image. Plants can have spider mites and a calcium deficiency at the same time. Today the API returns the primary diagnosis. Multi-label output is on the way.
Step-by-step automation guides. Home Assistant, Node-RED, and others – walkthroughs for wiring PlantLab into the stack you already run.
More real-world data. Photos from real tents, at real angles, in real lighting, sharpen the model on the conditions it actually sees – not just the clean reference shots.
PlantLab is free to try at plantlab.ai. The API returns structured JSON for every diagnosis – plug it into your automation stack and let your grow room see for itself.
Related reading: – Why I Built PlantLab – The origin story – How PlantLab Knows When It Might Be Wrong – The reliability_score field and schema 2.0 – Nitrogen Deficiency in Cannabis: A Visual Guide – Detailed guide for the most common deficiency – Yellow Leaves, Seven Suspects – Specific nutrient identification – API Documentation