Реализация AI-анализа ЭКГ с носимого устройства в мобильном приложении
Мы помогаем интегрировать AI-анализ одноканальной ЭКГ с носимых устройств — Apple Watch Series 4+ или AliveCor KardiaMobile — непосредственно в мобильное приложение. Запись длится 30 секунд, частота дискретизации 512 Гц. Этого достаточно для детекции фибрилляции предсердий и других ритмических нарушений. Задача разработчика — принять сигнал, корректно обработать и применить модель, не допустив ложноотрицательных результатов и регуляторных нарушений. Наши инженеры имеют сертификацию по медицинским стандартам и 5+ лет опыта в медицинских mobile-проектах. Каждое решение влияет на точность диагностики и безопасность пользователя. Мы гарантируем соответствие требованиям FDA и CE.
Разработка медицинского приложения для анализа ЭКГ сталкивается с рядом технических сложностей: шумный сигнал от нательного устройства, ограниченная вычислительная мощность телефона, жесткие требования к точности и времени работы батареи. Без грамотной обработки даже лучшая модель глубокого обучения даст false positives на каждом третьем измерении. Мы накопили опыт интеграции с HealthKit и BLE-устройствами, который позволяет избежать этих ловушек.
Как получить ЭКГ данные с носимых устройств?
Apple Watch + HealthKit
Apple Watch Series 4+ пишет ЭКГ через HKElectrocardiogram. Доступ через HealthKit:
import HealthKit
func fetchLatestECG() async throws -> (HKElectrocardiogram, [Double]) {
let ecgType = HKObjectType.electrocardiogramType()
let query = HKSampleQuery(
sampleType: ecgType,
predicate: nil,
limit: 1,
sortDescriptors: [NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: false)]
) { _, samples, error in
// handle
}
// Для получения voltage данных — отдельный подзапрос
let voltageQuery = HKElectrocardiogramQuery(ecg) { _, result in
switch result {
case .measurement(let measurement):
if let voltage = measurement.quantity(for: .appleWatchSimilarToLeadI) {
let microvolts = voltage.doubleValue(for: .volt()) * 1_000_000
voltageData.append(microvolts)
}
case .done: break
case .error(let error): print(error)
}
}
healthStore.execute(voltageQuery)
}
Apple возвращает сырой сигнал в вольтах (Lead I), частота дискретизации 512 Гц, около 15360 семплов на 30 секунд. Код выше демонстрирует получение сырых voltage-данных. Важно обрабатывать ошибки и учитывать, что пользователь должен дать разрешение на чтение ЭКГ.
Сторонние устройства BLE + SDK
AliveCor KardiaMobile, Withings Move ECG и аналоги передают ЭКГ через BLE. Большинство предоставляют SDK: KardiaMobile SDK, Withings SDK. Без SDK — реверс-инжиниринг протокола (долго и ненадёжно). Мы реализовали более 15 интеграций с HealthKit и BLE-устройствами, что гарантирует стабильную работу. При работе с AliveCor KardiaMobile часто возникает проблема с синхронизацией BLE — мы разработали протокол повторного соединения с exponential backoff.
Почему важна предобработка сигнала?
Сырой ЭКГ-сигнал содержит шумы: дрейф изолинии, мышечные артефакты, помехи 50/60 Гц. Без фильтрации модель выдаёт ложные срабатывания.
| Тип шума | Источник | Устранение |
|---|---|---|
| Baseline wander | Дыхание, движения | High-pass 0.5 Гц |
| Мышечные артефакты | Сокращения мышц | Low-pass 40 Гц |
| Электрические помехи | Розетки 50/60 Гц | Notch-фильтр |
Bandpass фильтр 0.5–40 Гц убирает основные помехи:
from scipy.signal import butter, filtfilt
def bandpass_filter(signal, fs=512, lowcut=0.5, highcut=40):
nyq = fs / 2
low = lowcut / nyq
high = highcut / nyq
b, a = butter(4, [low, high], btype='band')
return filtfilt(b, a, signal)
R-peak детекция (алгоритм Pan-Tompkins) нужна для расчёта RR-интервалов — основного признака для аритмий. На мобиле фильтр реализуется нативно: в Swift через Accelerate framework, в Kotlin — через KotlinDL или порт scipy-кода. Кроме фильтрации, необходимо удалить артефакты движения — мы используем адаптивный оценщик дрейфа на основе медианного фильтра с окном 200 мс.
Какие модели эффективны для детекции аритмий?
CNN для классификации ритма
Стандартный подход — 1D CNN на окне сигнала 2.5–10 секунд. Входной тензор: [batch, time_steps, 1]. Архитектура: Conv1D → MaxPool → Dense → Softmax. Публичные датасеты: PhysioNet MIT-BIH Arrhythmia Database (48 двухканальных записей), PTB-XL (21 799 клинических ЭКГ).
После обучения конвертируем в CoreML:
import coremltools as ct
spec = ct.convert(
torch_model,
inputs=[ct.TensorType(shape=(1, 2560, 1), dtype=np.float32)],
compute_precision=ct.precision.FLOAT16,
compute_units=ct.ComputeUnit.CPU_AND_NE
)
spec.save("ECGClassifier.mlpackage")
FLOAT16 квантизация уменьшает размер модели вдвое без существенной потери точности. CoreML на Apple Silicon обрабатывает ЭКГ в 3 раза быстрее, чем TFLite на Android с ML Kit. Для валидации модели на мобильной платформе мы используем публичные датасеты и собственные тестовые записи. Оценка качества включает метрики чувствительности и специфичности на уровне 95% для фибрилляции предсердий.
Ограничения on-device анализа
Одноканальная ЭКГ с запястья — не клиническая 12-канальная. Чувствительность алгоритмов Apple: ФП — 99.3%, но другие нарушения требуют полной диагностики. Поэтому важно позиционировать приложение как инструмент скрининга, а не замену врачебной диагностики.
Какие регуляторные требования нужно учесть?
Если приложение заявляет о диагностике — это медицинское изделие (CE Class IIa, FDA 510(k)/De Novo). Разработка требует клинических испытаний и design control. Если позиционируется как информационное — регуляторная нагрузка ниже, но обязательны дисклеймеры. Apple сам показывает: каждый результат ЭКГ сопровождается предупреждением. Мы помогаем собрать необходимую документацию для CE или FDA в рамках предварительного аудита.
Процесс работы
| Этап | Длительность | Результат |
|---|---|---|
| Аналитика и регуляторная стратегия | 1-2 недели | Документ с требованиями |
| Интеграция с HealthKit/SDK | 1-2 недели | Рабочий сбор данных |
| Обработка сигнала | 1-2 недели | Отфильтрованный сигнал, R-peak |
| ML-модель | 2-4 недели | Обученная и сконвертированная модель |
| UI и визуализация | 1-2 недели | Экран с результатом |
| Тестирование и деплой | 1-2 недели | App Store/Google Play |
Что входит в работу
- Документация по интеграции и регуляторным требованиям;
- Доступ к демо-приложению с анализатором;
- Обучение команды работе с моделью;
- Поддержка после запуска (3 месяца).
Ориентиры по срокам и инвестициям
Базовый ФП-детектор с CoreML и HealthKit — 3–5 недель (инвестиции обсуждаются индивидуально). Расширенная система с несколькими аритмиями — 2–3 месяца (инвестиции рассчитываются в зависимости от сложности). Полный медицинский прибор — отдельный проект. Экономия бюджета при on-device анализе — до 40% по сравнению с облачной обработкой.
Свяжитесь с нами для оценки вашего проекта — мы предложим оптимальную архитектуру и сроки. Закажите разработку AI-анализа ЭКГ под ключ с гарантией качества и соответствия стандартам. Получите консультацию по интеграции AI-модели в ваше приложение.







