스마트 인디아 해커톤을 위해 오프라인 AI 작물 병해 식별기를 만들었다

발행: (2026년 6월 11일 AM 05:02 GMT+9)
4 분 소요
원문: Dev.to

출처: Dev.to

🌐 실시간 데모: https://dev48v.infy.uk/solve/day3-crop-disease.html

SolveFromZero 3일 차 — 실제 해커톤 과제를 골라서 동작하는 솔루션을 출시한다. 오늘의 문제는 스마트 인디아 해커톤에서 매년 반복되는 과제다: 인도 농작물 손실의 35%가 진단되지 않은 병 때문에 발생하고, 마을 농업 확장 담당관이 모든 농장을 직접 방문할 수 없다.

해결책: 농부가 병든 잎을 사진 찍으면 AI가 질병과 치료법을 힌디어 또는 마라티어로 알려주는 모바일 앱. ₹6,000 안드로이드 폰에서도 완전 오프라인으로 동작한다.


제한 조건

하드웨어

₹6,000 안드로이드 폰, 2 GB RAM

네트워크

시골 지역의 불안정한 2G

모델 크기

다음 코드가 들어갈 수 있을 정도여야 함

const img = new Image();
img.src = URL.createObjectURL(e.target.files[0]);
await img.decode();

const tensor = tf.browser.fromPixels(img)
  .resizeBilinear([224, 224])
  .toFloat().div(255).expandDims();

const probs = await model.predict(tensor).data();
const top = probs.indexOf(Math.max(...probs));

console.log(CLASSES[top], probs[top]);

5단계 — 치료법 조회 + 힌디어 음성

const REMEDIES = {
  "tomato_late_blight": {
    treatment: "Spray 2g/L Mancozeb every 7 days for 3 weeks.",
    hindi: "मैनकोज़ेब 2 ग्राम/लीटर पानी में मिलाकर 7 दिन में छिड़काव करें।"
  },
  // ... 38 entries
};

const r = REMEDIES[CLASSES[top]];

const utter = new SpeechSynthesisUtterance(r.hindi);
utter.lang = "hi-IN";
speechSynthesis.speak(utter);

많은 농부가 글자를 읽지 못한다. 음성 출력이 “재미있는 데모”와 “실제로 배포 가능한 도구”를 가르는 차이다.


오프라인 우선 PWA (핵심 포인트)

시골 마을은 2G가 끊기기 쉽다. 앱은 최초 설치 이후 네트워크 없이도 동작해야 한다.

// service-worker.js
self.addEventListener("install", e => {
  e.waitUntil(
    caches.open("crop-v1").then(cache =>
      cache.addAll([
        "/", "/index.html", "/app.js",
        "/model/model.json",
        "/model/weights.bin"  // 3.5 MB
      ])
    )
  );
});

첫 방문 이후 앱과 모델이 캐시된다. 비행기 모드에서도 동작한다. 이것이 앱을 실제로 배포 가능하게 만드는 요소다.


지금 바로 사용해 보기

시뮬레이션된 4‑leaf 분류기와 9단계 이해 과정을 제공하는 3계층 페이지:

https://dev48v.infy.uk/solve/day3-crop-disease.html


이것으로 열 수 있는 가능성

같은 파이프라인(소형 CNN + 조회 테이블 + 음성)으로 다음 분야에 적용 가능:

문제모델 교체
가축 질병 식별PlantDoc 스타일 가축 데이터셋
잡초 식별DeepWeeds 데이터셋
토양 색 → 영양 결핍맞춤형 데이터셋 + 간단 분류기
해충 식별IP102 데이터셋

CNN + 오프라인 PWA + 다국어 음성 = 어떤 시골 마을 AI 배포에도 사용할 수 있는 템플릿.


SolveFromZero 다음 단계

4일 차: GitHub 저장소 건강 점수 측정기 (Devpost). GitHub URL을 붙여넣으면 별 개수, 최신 커밋, 이슈/PR 비율 등을 기반으로 건강 점수를 반환한다.

🌐 모든 문제 보기: https://dev48v.infy.uk/solvefromzero.php

0 조회
Back to Blog

관련 글

더 보기 »

Eidentic 소개

Today we're releasing Eidentic, an open-source TypeScript SDK for building AI agents with self-improving memory and the production fundamentals built in — not b...

Typescript의 타입

Introdução Tipos são uma forma de definir a “forma” ou o contrato dos dados que estamos usando no código. Pensando em Javascript puro, ele é dinâmico: você pode...