top of page

Программное обеспечение AgroScope

Это модуль интеллектуального анализа снимков с БПЛА, созданный для агромониторинга. Наше ПО автоматически определяет состояние посевов, выделяет зоны засухи, оценивает равномерность вегетации и формирует удобные карты для агрономов, фермеров и банков.

Данные, которые анализирует ИИ-модуль

Параметр

​​

  ExG (Excess Green)

 

  NDVI / GNDVI

 

  Контуры рядков

 

  Сегментация культур

 

  Аномалии пикселей

Что означает

​​

  Уровень зелёности растений

  Индексы вегетации и биомассы

 

  Геометрическая структура посевов

 

  Разделение почвы и растительности

 

  Локальные отклонения в                                       распределении    зелёности

Как используется

​​

  Диагностика засухи и стресса

  Точная оценка здоровья культур

 

  Поиск разрывов и слабых зон в рядках

 

  Корректный расчёт площади культур и масок          анализа

  Выявление болезней, вредителей и очаговых        повреждений

Как работает система

Здесь мы базово описываем ключевые модули программного комплекса AgroScope — от обработки изображений до вычисления индексов растительности и построения карт риска.

Загрузка снимка и предварительная очистка

img = cv2.imread(image_path)
img = cv2.resize(img, (1920, 1080))

# подавление шума
blur = cv2.GaussianBlur(img, (5, 5), 0)

# перевод в HSV для последующей фильтрации по цвету
hsv = cv2.cvtColor(blur, cv2.COLOR_BGR2HSV)

# выделение диапазонов зелёных оттенков
lower = np.array([25, 40, 40])
upper = np.array([90, 255, 255])
mask_green = cv2.inRange(hsv, lower, upper)

Расчёт индекса зелёности и нормализация

B, G, R = cv2.split(img)
exg = 2 * G - R - B

# масштабирование значений в диапазон 0–255
exg_norm = cv2.normalize(exg, None, 0, 255, cv2.NORM_MINMAX)
exg_norm = exg_norm.astype("uint8")

# бинарная маска для областей со сниженной зелёностью
_, stress_mask = cv2.threshold(exg_norm, 70, 255, cv2.THRESH_BINARY_INV)

Построение карты засухи и тепловой визуализации

# тепловая карта для визуализации состояния поля
heatmap = cv2.applyColorMap(exg_norm, cv2.COLORMAP_JET)

# выделение контуров потенциальных проблемных зон
contours, _ = cv2.findContours(stress_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

for c in contours:
    area = cv2.contourArea(c)
    if area > 500:  # отбрасываем шум
        cv2.drawContours(heatmap, [c], -1, (0, 0, 255), 2)
 

Выделение объектов и генерация итогового отчёта

results = []

for c in contours:
    x, y, w, h = cv2.boundingRect(c)
    severity = np.mean(exg_norm[y:y+h, x:x+w])
    results.append({
        "bbox": (x, y, w, h),
        "severity": float(severity)
    })

# экспорт отчёта
with open("report.json", "w") as f:
    json.dump({"stress_zones": results}, f, indent=4)
 

Визуализация алгоритма

bottom of page