Недавно к нам обратился стартап с трекером активности для собак. Ошейник собирал данные с акселерометра (MPU-6050), но сырые данные не давали ответа — активный пёс или отдыхает. Наша команда спроектировала мобильное приложение под iOS и Android, которое классифицирует поведение через Core ML и TensorFlow Lite. За 8 недель мы внедрили BLE-синхронизацию, дашборд с трендами и геофенсинг. Гарантируем стабильную работу при любой нагрузке — опыт более 5 лет в подобных проектах. Свяжитесь с нами для оценки вашего проекта.
Реализация мониторинга активности питомца: от данных к выводам
Классификация поведения питомца по данным инерциальных датчиков — ключевая задача. Мы используем комбинацию акселерометра и гироскопа с частотой 50 Гц. На устройстве применяется машинное обучение: Core ML на iOS, TensorFlow Lite на Android. Модель обрабатывает окна по 2.5 секунды и выдает один из шести классов активности.
Как классифицировать активность по данным с трекера?
Процесс классификации включает следующие шаги:
- Сбор данных с акселерометра (ADXL345) с частотой 50 Гц.
- Накопление окна из 125 семплов (2.5 секунды).
- Извлечение признаков (среднее, дисперсия, энергия).
- Передача признаков в модель Core ML или TensorFlow Lite.
- Получение предсказания класса.
Наши инженеры оптимизировали окно со скользящим шагом 25 семплов (50% перекрытие) для плавного детектирования переходов между активностями.
class PetActivityClassifier { private let model: PetActivityMLModel private var window: [[Double]] = [] private let windowSize = 125 private let strideSize = 25 // 50% перекрытие func processSample(x: Double, y: Double, z: Double) -> ActivityClass? { window.append([x, y, z]) guard window.count >= windowSize else { return nil } let input = try? MLMultiArray(shape: [1, NSNumber(value: windowSize), 3], dataType: .double) for (i, sample) in window.enumerated() { input?[i * 3] = NSNumber(value: sample[0]) input?[i * 3 + 1] = NSNumber(value: sample[1]) input?[i * 3 + 2] = NSNumber(value: sample[2]) } window.removeFirst(strideSize) guard let modelInput = input, let prediction = try? model.prediction(input: modelInput) else { return nil } return ActivityClass(rawValue: prediction.classLabel) } } Для мобильных устройств мы конвертируем модель из TensorFlow в Core ML через coremltools с поддержкой FP16 и int8 квантизации. На Android используется NNAPI делегат для аппаратного ускорения. Это снижает время инференса до 5-10 мс на одном окне, что позволяет обрабатывать данные в реальном времени без влияния на UI-поток.
Синхронизация данных с трекера по BLE и LTE
| Протокол | Частота синхронизации | Потребление батареи | Задержка |
|---|---|---|---|
| BLE | При приближении (несколько раз в день) | Низкое (1-2 мАч за сессию) | 1-5 секунд |
| LTE-M (CAT-M1) | Каждые 1-5 минут | Среднее (100-500 мАч в день) | < 1 секунды |
Для BLE используем GATT с Indicate Characteristic и MTU 512. На Android запрашиваем MTU через gatt.requestMtu(512), на iOS — через peripheral.maximumWriteValueLength(for: .withResponse). LTE-трекеры работают через REST API с JSON-пакетами.
Трекер накапливает агрегаты активности (минутные сводки) и синхронизирует по BLE при приближении телефона. Протокол: GATT с Indicate Characteristic — трекер уведомляет о готовности данных, приложение читает пакетами по 20 байт (MTU по умолчанию). Для ускорения запрашиваем MTU 512. GPS-трекеры с LTE-M синхронизируются через облако. Мобильное приложение — клиент к REST API. Геофенсинг реализован на сервере: зоны «дом», «двор», пуш-уведомление когда питомец вышел за периметр.
Почему важен правильный выбор протокола синхронизации?
От протокола зависит время работы трекера от батареи и актуальность данных. BLE подходит для ежедневной синхронизации при возвращении домой, но не даёт онлайн-трекинга. LTE-M позволяет отслеживать питомца в реальном времени, но требует более частой зарядки. Гибридная схема (BLE для подробной классификации, LTE-M для GPS-позиционирования) оптимальна для большинства сценариев.
Дашборд здоровья питомца
Суточная статистика активности — основной экран. Кольцевая диаграмма активности за день: sleep, rest, walk, run, play. Трендовые графики по неделям и месяцам. Метрики, которые интересуют владельцев: минуты активного движения, дистанция (рассчитывается по шагам из акселерометра или GPS), калории (грубая оценка по весу питомца), качество сна (подвижность ночью), сравнение с предыдущей неделей. Пуши об аномалиях — «Барсик сегодня активен на 80% меньше обычного» — работают через Firebase Cloud Messaging с серверной аналитикой по baseline за 7 дней.
Геолокация и геофенсинг
Для GPS-трекеров с сотовой связью — периодические позиции через API (каждые 1–5 минут в режиме экономии батареи, каждые 10–30 секунд в режиме слежения). Карта — MapKit (iOS) или Google Maps SDK (Android) с историческим треком питомца за день. Геофенсинг на уровне приложения (CLRegion) работает только когда телефон в зоне. Надёжнее — серверный геофенсинг с пушами. На своём опыте убедились: гибридная схема (приложение + сервер) даёт 99% точности.
Что входит в разработку под ключ?
| Этап | Результат |
|---|---|
| Аналитика | Протокол трекера, план ML-модели, API-спецификация |
| Проектирование | Дизайн-макеты (Figma), архитектура приложения |
| Реализация | iOS (Swift 5.9, SwiftUI) и/или Android (Kotlin, Jetpack Compose) |
| Интеграция | BLE, облачные сервисы (Firebase, Supabase), StoreKit 2 для подписок |
| Тестирование | QA на реальных трекерах, нагрузочное тестирование |
| Деплой | App Store и Google Play с сертификатами и code signing |
| Поддержка | Мониторинг крашей, обновление ML-модели, оптимизация |
Входит полная документация, доступы к админ-панели, обучение. Стандартная гарантия на код — 6 месяцев. Стоимость рассчитывается индивидуально в зависимости от сложности. Получите консультацию для вашего проекта — мы поможем с выбором стека и рассчитаем бюджет.
Мы разрабатываем мобильные приложения более 5 лет. За плечами более 20 проектов в категории «Здоровье и фитнес», включая интеграции с HealthKit и Google Fit. Используем современные подходы: StoreKit 2, App Tracking Transparency, Kotlin Multiplatform. Гарантируем соблюдение App Store Review Guidelines и политик конфиденциальности. Опыт решения нестандартных задач — например, работа с INA219 для энергопотребления ошейника — позволяет предвидеть узкие места до начала разработки.







