Downloads · 30 days
0
sengtha/iany-crop-v1
iany-crop-v1 is a image classification model from sengtha. Use it when you need a label for an image. It is set up for onnx. The card lists the license as cc-by-4.0.
An on-device crop-health classifier — point a camera at a leaf and get its crop + condition (healthy / disease). A MobileNetV2 trained from open leaf datasets + community photos, exported to ONNX to run in the browser…
Downloads · 30 days
0
Access
Public
Updated Jul 21, 2026
Repo size
9 MB
Likes
0
Public
Click a slice to open those files.
.onnx9 MB · 100%
From the Hugging Face model README
An on-device crop-health classifier — point a camera at a leaf and get its crop + condition (healthy / disease). A MobileNetV2 trained from open leaf datasets + community photos, exported to ONNX to run in the browser via onnxruntime-web. Built for iAny, the offline, on-device Khmer AI platform.
⚠️ Status: Experiment. Try it at iany.app/crop-scan — fully on-device, nothing uploaded. Help improve it by contributing photos at iany.app/crop.
Classifies a single crop leaf into a <crop>_<condition> class, for early, offline triage — "healthy vs a problem" — with advice that can be read aloud in Khmer. It is a suggestion, not an agronomist or a lab.
10 classes (alphabetical — the softmax output order). labels.txt in this repo is authoritative and grows as more crops/conditions are trained.
0 cashew_disease
1 cashew_healthy
2 cassava_disease
3 cassava_healthy
4 maize_disease
5 maize_healthy
6 mango_disease
7 mango_healthy
8 vegetable_disease
9 vegetable_healthy
vegetable bundles tomato/potato/bell-pepper (not distinct iAny crops).
float32, shape [1, 224, 224, 3] (NHWC).[0,255] → [-1,1] (i.e. x/127.5 - 1).iany-waste-v1, so the same runtime serves both.Python (onnxruntime)
import onnxruntime as ort, numpy as np
from PIL import Image
labels = open("labels.txt").read().split()
img = Image.open("leaf.jpg").convert("RGB").resize((224, 224))
x = (np.asarray(img, np.float32) / 127.5 - 1.0)[None] # [1,224,224,3], [-1,1]
sess = ort.InferenceSession("model.onnx")
probs = sess.run(None, {sess.get_inputs()[0].name: x})[0][0]
print(labels[int(probs.argmax())], float(probs.max()))
Browser (onnxruntime-web) — see src/lib/wasteOnnx.ts (generic [-1,1] MobileNetV2 classifier) and src/views/CropScanView.tsx for the live-camera implementation.
v1 is bootstrapped from open datasets (not yet fine-tuned on Cambodian photos):
vegetable (tomato)vegetableBase: MobileNetV2 (ImageNet weights), transfer learning. Full recipe: docs/CROP-MODEL.md.
/crop-scan UI labels this a guess for exactly this reason./crop field photos (and retraining) is what makes it trustworthy — expect the number to drop then, which is the point.Offline crop-health triage + education; the /crop-scan experiment; pre-filling labels in the /crop collector. Not a certified diagnostic or a replacement for an agronomist — present results as guidance and encourage a second opinion for serious decisions.
Released under CC-BY-4.0 — please credit the source datasets (PlantVillage, MangoLeafBD — CC BY 4.0, Cassava, rice sets, iBean per their terms) and iAny. Verify each source dataset's terms before commercial redistribution.
Trained and released by iAny (E-KHMER Technology). Full training + deploy recipe: github.com/sengtha/iAny · docs/CROP-MODEL.md.