Runs 100% in your browser

Solar Panel Dust & Fault
Classification

A computer vision system that looks at a photo of a solar panel and tells you what's wrong with it — dust, bird droppings, snow cover, electrical or physical damage — then shows its reasoning with a heatmap. No server, no upload to anywhere: the trained model downloads once and every prediction runs directly on your device.

6
Condition classes
EfficientNetV2-S
Backbone
CAM
Explainability
In-browser
Inference (ONNX)

Try it yourself

Upload a panel photo, get a real prediction

This is the actual trained model, exported to run in the browser — not a mockup and not a call to a server. Your photo never leaves your device.

Loading model…
☀️
Click to upload or drag a photo here
JPG, PNG, or WEBP
Upload a solar panel photo to see the predicted condition and its explanation heatmap.
Downloading model…
Predicted condition
No photo handy? Try a sample —

How this works: the trained model (~80MB, EfficientNetV2-S) downloads once directly from this page and runs fully client-side with onnxruntime-web — nothing is sent to a server. The first load takes a little while depending on your connection; your browser caches it after that, and every prediction after the first runs in a couple of seconds.

Under the hood

How a photo becomes a diagnosis

Four stages run every time an image is uploaded, entirely inside your browser tab.

01 · INPUT
Upload & preprocess
Image is drawn to a canvas, resized to 224×224, and normalized with ImageNet statistics — the exact transform used during training.
02 · INFERENCE
EfficientNetV2-S forward pass
A fine-tuned EfficientNetV2-S backbone, exported to ONNX, runs entirely on-device via WebAssembly and outputs probabilities across all 6 condition classes.
03 · EXPLAIN
Class-activation heatmap
The model's final feature maps are combined with its classifier weights to build a class-activation map, showing which regions of the panel drove the prediction — computed in JavaScript, no server round-trip.
04 · OUTPUT
Result + confidence
The predicted class, confidence score, top-3 probabilities, and the heatmap overlay are all rendered back in real time.

What it detects

Six surface conditions

Trained to distinguish six visually distinct panel states — the categories that matter most for maintenance decisions.

Clean
No visible obstruction or damage — panel is operating at expected efficiency.
Dusty
Surface dust buildup reducing light absorption — the most common maintenance trigger.
🐦
Bird-drop
Localized bird droppings, which create hotspot risk if left uncleaned.
❄️
Snow-Covered
Snow accumulation blocking light — typically resolves on its own but worth flagging.
Electrical-damage
Discoloration or burn patterns consistent with cell or wiring faults — needs a technician.
🔨
Physical-Damage
Cracks or impact damage to the glass or frame — a structural, not cosmetic, issue.

Not just a label — a reason

A raw class prediction isn't enough for a decision-support tool. A technician needs to know where on the panel the model is looking before trusting the call.

Every prediction is paired with a class-activation heatmap, built by combining the network's final feature maps with its classifier weights — highlighting exactly which pixels pushed the prediction toward its answer.

This turns the model from a black box into something a human can sanity-check at a glance, which is exactly what a prototype decision-support tool needs to be trustworthy in the field.

Built with

Tech stack

Trained in PyTorch, exported to ONNX, running entirely client-side with onnxruntime-web.

🐍 Python 🔥 PyTorch 🖼️ torchvision EfficientNetV2-S ONNX onnxruntime-web Class-Activation Mapping Vanilla JS + Canvas

Explore more

See the rest of what I've built