Verze 3.1.0

Tepovka: Analýza srdeční aktivity pomocí fotopletysmografie

Otevřený výzkumný projekt z VUT v Brně. Aplikace pro měření HR a HRV extrakcí optického signálu z fotoaparátu telefonu. Zpracování dat probíhá 100% lokálně bez odesílání do cloudu. Aktuální verze: 3.1.0.

O projektu

Tepovka vznikla na podzim 2024 v soutěži FEKTeams na FEKT VUT. Cílem je praktické měření HR a HRV pomocí PPG na běžných telefonech, otevřeně a srozumitelně.

Do vývoje zapojujeme studenty, sdílíme postupy a navrhujeme algoritmy, které lze dál ověřovat v laboratoři i v terénu. Projekt vzniká s podporou Ústavu biomedicínského inženýrství (DBME).

Kontext

Projekt vzniká a testuje se na UBMI, FEKT VUT. Slouží jako tréninkový i výzkumný rámec pro rPPG/HRV s napojením na akademické zdroje, laboratoře a interní metodiky.

Jak Tepovka funguje

Adaptivní Fotopletysmografie

Využíváme neinvazivní metodu měření objemových změn krve. Algoritmus primárně analyzuje zelený barevný kanál z kamery telefonu, ale při slabém signálu automaticky přepíná na červený kanál pro maximální spolehlivost.

Hybridní výpočet a HRV

Systém využívá robustní metodu kombinující časovou analýzu a FFT. V reálném čase počítá vybrané parametry variability srdeční frekvence (HRV), jako SDNN, RMSSD, pNN50, SD1 a SD2. Tyto metriky poskytují komplexní vhled do autonomního nervového systému.

Dech a zotavení srdeční frekvence

Z obálky signálu algoritmus extrahuje dechovou frekvenci. Zároveň analyzuje zklidnění tepové frekvence (HR Recovery Rate) – schopnost kardiovaskulárního systému se zotavit po zátěži. Tato metrika přímo odpovídá konceptu "zklidnění kardiovaskulárního systému" z Apple Health a slouží jako klíčový indikátor kardiovaskulární kondice.

Směřování

Navazujeme na současné měření HR/HRV a postupně doplňujeme další metriky a způsoby sdílení.

  • Nové parametry: saturace krve kyslíkem (SpO2) — zatím ve fázi kalibrace proti pulznímu oxymetru — a detailnější analýza tvaru PPG křivky.
  • Bezpečné sdílení dat: Příprava na konzultace s odborníky na dálku.
  • Přístupnost: Režim vyššího kontrastu, větší písmo a hlasové navádění.

Plán s AI

Nasbíraná data chceme využít pro modely strojového učení: základní detekce arytmií, anomálních HRV trendů a odchylek v tvaru PPG křivek. Pracujeme na tréninkových datech pro detekci artefaktů a zátěžových profilů, abychom mohli upozorňovat na rizika i při horších podmínkách měření.

Cíl: včasné a srozumitelné upozornění na možné odchylky, bez marketingových slibů.

Ověřeno měřením

Ověřili jsme přesnost proti EKG

Většina aplikací, které měří tep z kamery, žádné ověření nemá — nebo ho neukazuje. My jsme v srpnu 2026 změřili 15 dobrovolníků tak, že jim během měření telefonem současně běžel EKG holter Bittium Faros 180 a pulzní oxymetr Nonin. Vzniklo 61 souběžných záznamů, na kterých jde přesnost doložit číslem, ne tvrzením.

1,25 bpm

Průměrná odchylka od EKG
Na 57 záznamech s kvalitní referencí.

93 %

Záznamů do 5 bpm
Rozdíl proti EKG pod pět tepů za minutu.

0,98

Shoda (ICC)
Pearsonovo r = 0,985.

Jak měření probíhalo

Každý účastník měl na hrudi EKG holter, na prstu jedné ruky pulzní oxymetr a druhou rukou měřil telefonem. Protokol byl u všech stejný: tři třicetisekundové záznamy v klidu a jeden devadesátisekundový po zátěži, aby data pokryla i vyšší tep. Naměřený rozsah je 51–112 bpm, účastníkům bylo 20 až 47 let.

Graf: tepová frekvence z telefonu, EKG holteru a pulzního oxymetru v průběhu jednoho měření
Průběh jednoho celého měření. Tep z telefonu (modré body) sleduje EKG i oxymetr v klidu i ve fázi po zátěži, kdy tep rychle stoupá a zase klesá.

Tep po jednotlivých úderech

Přesnost nestojí na průměru za celé měření, ale na tom, jestli aplikace najde každý jednotlivý tep. Na výřezu níže je nahoře EKG s detekovanými R-vlnami a dole signál z kamery telefonu s detekovanými pulzy — jeden ku jednomu. Napříč celým souborem najde detektor 99 % skutečných tepů.

Graf: osmisekundový výřez EKG s R-vlnami a PPG signálu z telefonu s detekovanými pulzy
Osm sekund ze souběžného měření. Úsek vybírá skript automaticky podle kvality signálu, ne ručně.

Jak velké jsou odchylky

Následující graf ukazuje rozdíl mezi telefonem a EKG u každého záznamu zvlášť. Průměrná odchylka je +0,2 bpm a naprostá většina záznamů se vejde do pásma ±5 bpm. Pro srovnání: EKG holter a pulzní oxymetr se na stejných datech mezi sebou shodly s chybou 2,0 bpm — aplikace je tedy uvnitř rozptylu, v jakém si odpovídají dva certifikované přístroje.

Bland-Altmanův graf: rozdíl mezi tepem z telefonu a z EKG u 57 záznamů
Každý bod je jeden záznam. Vodorovná osa je průměr obou metod, svislá jejich rozdíl.

Co měření také ukázalo

Souběžná data odhalila dvě chyby ve zpracování, kterých bychom si jinak nevšimli: časová osa v exportu byla o čtvrtinu zrychlená a detekce vynechávala každý pátý tep. Obě jsou opravené a nová měření to potvrdila. Uvádíme to schválně — validace má smysl právě tím, že chyby najde, a čísla výše platí až po opravě.

Omezení, o kterých víme: soubor je malý a tvoří ho zdraví dospělí, přesnost závisí na kvalitě signálu (proto se u každého měření ukládá i její hodnocení) a parametry variability tepu berte jen orientačně. Aplikace není zdravotnický prostředek.

Metodologie a zpracování signálu

Technologický stack

  • Uživatelské rozhraní: Flutter / Dart (hlasová odezva přes flutter_tts)
  • Zpracování signálu: vlastní implementace v Dartu (~12 700 řádků), analýza běží v odděleném isolate mimo vlákno rozhraní
  • Filtrování: Butterworthovy biquady, zero-phase filtrace pro retrospektivní analýzu, adaptivní potlačení pohybu z akcelerometru
  • Frekvenční analýza: FFT (knihovna fftea) a autokorelace
  • Časová osa: snímkovací frekvence kamery se měří a ukládá s každým záznamem, nepředpokládá se pevná hodnota

Extrahované metriky

  • Základní vitální funkce: Tepová frekvence (40–200 BPM), dechová frekvence (6–30 dechů/min)
  • Časová doména HRV: SDNN, RMSSD, pNN50
  • Nelineární doména HRV: SD1, SD2 (Poincarého diagram)
  • Kvalita signálu: index podle spektrální čistoty a periodicity, u každého záznamu i každého úseku

Parametry HRV berte orientačně: interval mezi tepy má při snímkovací frekvenci telefonu hrubší krok než u EKG, což se projeví hlavně na RMSSD a pNN50.

Ve výzkumném režimu se před měřením vyplní údaje k záznamu (ID probanda, protokol, poznámka — pole si nastavíte sami) a export nabízí TXT, CSV nebo JSON. Soubor obsahuje kromě zpracovaného signálu i nefiltrované barevné kanály z kamery, změřenou snímkovací frekvenci, hodnocení kvality a pozice vrcholů i nástupů pulzů. Měření lze také synchronizovat přes Apple HealthKit. Vše probíhá lokálně na zařízení.

Plán vývoje (Roadmap)

v3.1.0 (Aktuální verze)

Výzkumný režim s metadaty a exportem do TXT/CSV/JSON, měřená snímkovací frekvence místo předpokládané, jednotná detekce pulzů s časováním z nástupů, hodnocení kvality signálu, integrace HealthKit, režim pro seniory, 33 automatických testů.

v3.2.0 (Plán Q2 2026)

Rozšířená validace na větším souboru, pokročilá analýza trendů a integrace Wear OS.

v4.0.0 (Plán Q4 2026)

Strojové učení pro optimalizaci detekce píků, volitelný webový dashboard pro hromadnou analýzu.

Živá ukázka

Tepovka přímo na webu

Vpravo běží skutečná aplikace, ne obrázek. Protože prohlížeč nemá přístup k prstu na objektivu, nahrazuje kameru přednahrané video — signál pak prochází úplně stejným zpracováním jako na telefonu.

Aplikace je k dispozici pro iPhone — stáhněte si ji na App Storu.

Tým vývojářů

Jsme studenti biomedicínského inženýrství, kteří spojili síly, aby posouvali hranice mobilního zdravotnictví a sdíleli své zkušenosti s dalšími nadšenci do vědy. Projekt je pod vedením zkušených akademických mentorů Ing. Jana Šímy a Ing. Andrea Němcové, PhD. a postupně se k nám připojují noví talentovaní členové.