AI-Аналіз ЭКГ з носимого пристрою мобільного додатку
ЭКГ з Apple Watch Series 4+ або AliveCor KardiaMobile—одноканальна запис, 30 секунд, 512 Hz. Достатньо для детекції фібрилляції передсердь та інших ритмічних порушень. Задача розробника—прийняти сигнал, правильно його обробити та застосувати модель, не допустивши ні ложноотрицательных результатів, ні регуляторних порушень.
Отримання ЭКГ даних
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 Hz, довжина—близько 15360 семплів на 30 секунд.
Сторонні пристрої: BLE + протокол
AliveCor KardiaMobile, Withings Move ECG та аналоги передають ЭКГ через BLE з проприєтарними протоколами. Більшість надають SDK: KardiaMobile SDK для iOS/Android, Withings SDK. Без SDK—аналіз BLE-пакетів через CBCentralManager та reverse-engineering протоколу (довго та ненадійно).
Попередня обробка сигналу: без цього модель не працює
Сирий ЭКГ-сигнал містить шуми: baseline wander (дрейф ізолінії від дихання), мишечні артефакти, електричні перешкоди 50/60 Hz. Перед поданням у модель—фільтрація обов'язкова.
Bandpass фільтр 0.5–40 Hz убирає baseline wander та высокочастотний шум:
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-інтервалів—основи детекції аритмій. Бібліотека neurokit2 реалізує Pan-Tompkins, BioSPPy. На мобіле реалізуйте нативно: Swift через Accelerate framework (vDSP), Kotlin через KotlinDL або портуйте scipy-код через TFLite custom ops.
Моделі для детекції аритмій
CNN для класифікації ритму
Стандартний підхід—1D CNN на вікні сигналу 2.5–10 секунд. Вхідний тензор: [batch, time_steps, 1]. Архітектура: кілька Conv1D → MaxPool → Dense → Softmax.
Публічні датасети: PhysioNet MIT-BIH Arrhythmia Database (48 двоканальних записів), PTB-XL (21 799 клінічних ЭКГ з 71 діагнозом). MIT-BIH доступний через wfdb бібліотеку.
Після обучення конвертуйте в 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 квантизація уменьшує розмір моделі вдвоє без значимої втрати точності для ЭКГ-класифікації. Neural Engine (NE) прискорює inference на пристроях з A12+.
Обмеження on-device аналізу
Одноканальна ЭКГ з запястя—не клінічна 12-канальна. Чутливість Apple за їх дослідженнями: ФП—99.3%, але специфічний ритм. Інші порушення (блокади, WPW) потребують 12-канальної запису.
Регуляторні вимоги—найголовніше
Якщо додаток заявляє про діагностику захворювань—це медичне виробництво (CE Class IIa в ЕС, FDA 510(k)/De Novo у США). Розробка займе набагато більше часу через вимоги до клінічних випробувань, design control, software validation.
Якщо додаток позиціонується як інформаційний ("показує паттерни ритму, не є діагностичним інструментом")—регуляторна нагрузка менша. Усі дисклеймери мають бути на екранах з результатами, не тільки у ToS.
Apple сама це робить: кожен результат ЭКГ в Apple Health супроводжується явним "consult your doctor".
Процес розробки
Узгодження регуляторної стратегії до початку розробки. Інтеграція з HealthKit або сторонним SDK. Реалізація сигнальної обробки (фільтри, R-peak детекція). Розробка та валідація ML-моделі на відкритих датасетах. Конвертація в CoreML/TFLite. UI: візуалізація ЭКГ-сигналу, результат аналізу, обов'язкові дисклеймери.
Орієнтири за часом
Базовий ФП-детектор з CoreML та HealthKit інтеграцією—3–5 тижнів. Розширена система з кількома типами аритмій, валідацією на клінічних даних—2–3 місяці. Повний медичний прилад з регуляторною документацією—окремий багатомісячний проект.







