Разработка мобильного приложения для садоводов/огородников
Представьте: садовод загружает фото подозрительного пятна на листе помидора — через секунду приложение выдаёт диагноз (фитофтора, 87% уверенности) и рекомендует обработку медным купоросом. Всё это без интернета, на даче в глубинке. Реализовать такое на iOS и Android — задача, где каждая деталь решает: от выбора модели машинного обучения до фоновой синхронизации.
Мы создаём приложения, в которых CV-модели, погодные триггеры и офлайн-режим работают как единый механизм. За плечами — 6 лет мобильной разработки и 50+ проектов в AgriTech. Сложность не в отдельных компонентах, а в их бесшовной интеграции: датчик дождя через OpenWeatherMap, локальная база на SQLite, распознавание с помощью CoreML или TFLite — и всё это должно стабильно работать на устройствах пятилетней давности.
Как работает распознавание растений?
Центральная фича — определение растений и болезней по фото. Два подхода: облачный API (Plant.id, PlantNet) или on-device модель (CoreML/TFLite). Сравним:
| Параметр | Cloud API (Plant.id / PlantNet) | On-device (CoreML / TFLite) |
|---|---|---|
| Точность | 85–95% | 70–80% |
| Скорость | 1–3 секунды (зависит от сети) | 0.2–0.5 секунды |
| Интернет | Требуется | Не требуется |
| Стоимость | Платная подписка ($0.01–0.10 за запрос) | Бесплатно (только разработка) |
| Офлайн | Нет | Да |
On-device распознавание работает в 5 раз быстрее облачного — 0.2 с против 1–3 с — но точность ниже на 15–20%. Для дачи без интернета это единственный вариант.
Plant.id API отдаёт название, болезни с confidence score и рекомендации по лечению. Фото кодируется в base64, отправляется POST-запросом, ответ содержит suggestions с probability. Важно: API требует хорошо освещённый снимок листа или цветка — фото общего плана даёт низкую точность. Мы обязательно обучаем пользователя правильной съёмке.
struct PlantIdentificationRequest: Encodable { let images: [String] // base64 let modifiers: [String] // ["crops_fast", "similar_images"] let plant_language: String // "ru" let plant_details: [String] // ["common_names", "url", "description", "treatment"] } On-device вариант использует модели от iNaturalist или обученные на датасете PlantVillage (54 000 изображений, 38 классов болезней листьев). Точность ниже облака на 15–20%, но зато полностью офлайн.
Почему важна интеграция с погодой?
Звучит просто, но главная ошибка — ставить уведомления с фиксированным временем и удивляться, почему пользователи жалуются на пропущенные поливы. Проблема: уведомления не пересчитываются при изменении осадков.
Правильная логика: каждое утро запрашиваем прогноз погоды через OpenWeatherMap API или Apple WeatherKit. Если прогнозируется дождь > 5 мм — пропускаем полив и отменяем уведомление через UNUserNotificationCenter.removePendingNotificationRequests. Это требует фоновой задачи: BGAppRefreshTask на iOS или WorkManager на Android.
На Android используем WorkManager с PeriodicWorkRequest и NetworkType.CONNECTED constraint. Не AlarmManager напрямую — на Android 12+ требуется SCHEDULE_EXACT_ALARM permission, которое пользователи редко дают.
Экономия времени на ручном планировании полива — до 2 часов в неделю. Снижение затрат на воду за счёт умного учёта осадков — до 30% в сезон.
Что входит в работу
Заказывая разработку под ключ, вы получаете:
- Архитектуру и выбор стека (iOS/Android/кроссплатформа)
- Интеграцию всех API (погода, распознавание)
- Офлайн-базу растений с кэшированием изображений
- Настройку пуш-уведомлений и фоновых задач
- Документацию по эксплуатации и ссылки на доступы
- Помощь с публикацией в App Store и Google Play
- Гарантию на код — 3 месяца бесплатной поддержки
Офлайн и база растений
Локальная база растений (название, описание, правила ухода, календарь посева) хранится в SQLite. Для 500–1000 записей используем Room на Android, Core Data или GRDB на iOS. Изображения кешируются при первом просмотре с LRU-политикой (Kingfisher на iOS, Coil на Android).
Дача без интернета — реальность. Все базовые функции (добавление растения, просмотр советов, выставление напоминаний) работают без сети. Синхронизация при восстановлении соединения — через очередь отложенных операций.
Погодная интеграция
OpenWeatherMap — стандарт для таких приложений: бесплатный тариф покрывает 1000 запросов в день. WeatherKit на iOS (с новейших версий) точнее и не требует собственного ключа, но доступен только на Apple платформах. Для огородного приложения важна не только температура, но и humidity, uvi, rain (осадки за 1 и 3 часа) — эти поля доступны в current эндпоинте OWM.
Процесс работы
- Аналитика — определяем набор фич: какие растения (только огород или сад+комнатные), нужна ли социальная составляющая, требуется ли офлайн-база болезней.
- Проектирование — создаём архитектуру, выбираем стек (нативный или кроссплатформа).
- Разработка — офлайн-база → добавление растений → расписание полива с уведомлениями → погодная интеграция → распознавание. Распознавание — последним, так как API-ключи и тарификация требуют согласования.
- Тестирование — покрываем основную логику unit-тестами, проводим полевые испытания на реальных устройствах.
- Деплой — публикация в сторах, настройка мониторинга Crashlytics и аналитики.
Получите консультацию по вашему проекту — мы поможем выбрать оптимальный стек и оценить сроки.
Ориентиры по срокам
| Конфигурация | Сроки |
|---|---|
| База + расписание + погода | 5–7 недель |
| С распознаванием растений/болезней | 9–12 недель |
| Полный функционал (офлайн + социальная сеть) | 12–16 недель |
Чтобы оценить ваш проект, свяжитесь с нами — мы подготовим точную смету и предложим оптимальное решение. Гарантируем прохождение App Store Review и Google Play Review с первого раза.







