YOLOv8 · CNN · Segmentação · PlantVillage Dataset
Pipeline de Visão
Fontes de Imagem
Drones
Imagem aérea 4K, multispectral
Câmera Trator
Visão em tempo real no campo
Satélites
Sentinel-2, Planet Labs
Smartphone
App ZONY no campo pelo produtor
Detecções Simuladas em Tempo Real
LIVECódigo — Detecção YOLOv8
# vision/detect.py
from ultralytics import YOLO
import cv2
model = YOLO("yolov8n.pt") # treinar com PlantVillage
img = cv2.imread("plant.jpg")
results = model(img)
for r in results:
for box in r.boxes:
cls = int(box.cls[0])
conf = float(box.conf[0])
print(f"Detecção: classe={cls}, confiança={conf:.2f}")Classificação CNN — TensorFlow
# vision/classifier.py
import tensorflow as tf
from tensorflow.keras.preprocessing import image
import numpy as np
model = tf.keras.models.load_model("plant_disease_model.h5")
img = image.load_img("leaf.jpg", target_size=(224, 224))
img_array = image.img_to_array(img)
img_array = np.expand_dims(img_array, axis=0) / 255.0
prediction = model.predict(img_array)
classes = ["saudavel", "ferrugem", "manchas", "murcha", "praga"]
print("Diagnóstico:", classes[np.argmax(prediction)])Decisão Automática
# ai/vision_action.py
import requests
def act_on_detection(detection: str, zone: int):
commands = {
"lagarta": ("APLICAR_INSETICIDA", "/spray?product=inseticida"),
"fungo": ("APLICAR_FUNGICIDA", "/spray?product=fungicida"),
"deficiencia_N": ("FERTILIZAR_N", "/fertilize?npk=N"),
"stress_hidrico": ("IRRIGAR", "/irrigate?volume=150"),
"broca": ("APLICAR_INSETICIDA", "/spray?product=inseticida"),
"acaro": ("APLICAR_ACARICIDA", "/spray?product=acaricida"),
}
action, endpoint = commands.get(detection, ("OK", None))
if endpoint:
requests.post(f"http://api:8000{endpoint}&zone={zone}")
return actionPipeline Completo
# ai/vision_pipeline.py — pipeline completo
from vision.detect import detect_yolo
from vision.classifier import classify_disease
from ai.vision_action import act_on_detection
import paho.mqtt.client as mqtt
mqttc = mqtt.Client()
mqttc.connect("mqtt-broker", 1883)
def run_pipeline(image_path: str, zone: int):
# 1. YOLO detecta objetos
detections = detect_yolo(image_path)
for det in detections:
# 2. CNN classifica doença / praga
disease = classify_disease(image_path)
# 3. IA decide ação
action = act_on_detection(disease, zone)
# 4. Publica no MQTT → máquina executa
mqttc.publish(f"field/zone{zone}/action", action)
print(f"Zone {zone} | {disease} → {action}")Integração Máquina
Drone/Câmera captura imagem
campo · 4K · multispectral
YOLOv8 detecta objeto suspeito
vision/detect.py · <100ms
CNN classifica doença/praga
vision/classifier.py · 224×224
IA decide ação correta
ai/vision_action.py
MQTT publica comando
field/zone1/action
Pulverizador aplica produto
CAN 0x100 → implemento
🌱 Cada Planta Monitorada
"Detectar, Classificar, Agir — em milissegundos, no campo."
— ZONY AgroVision AI™