Nová verze 3.3.1

Tep a HRV jen telefonem

Přiložte prst na fotoaparát a za 30 sekund víte, jak na tom je vaše srdce. Výzkumný projekt FEKT VUT v Brně, ověřený proti EKG holteru.

  • 1,25 bpm průměrná odchylka od EKG
  • Bez účtu, data zůstávají v telefonu
  • Zdarma
Výsledek měření v Tepovce: 61 bpm, kvalita signálu dobrá, pulzní křivka s vyznačenými údery a parametry HRV
Úvodní obrazovka Tepovky s tlačítkem Změřit tep, posledním měřením a sérií dní v řadě
Verze 3.3.1

Co je nového

Největší změny jsou pod povrchem: tep se počítá přesněji a aplikace otevřeně řekne, když se měření nepovedlo.

Přesnější tep

Tep se počítá z pat pulzní vlny, tedy z okamžiku, kdy úder začíná. Stejně na výsledku, v historii, v exportu i během měření, takže čísla na sebe navazují.

Poctivý výsledek

Když se tep ze záznamu určit nedá, aplikace to řekne a nabídne nové měření. Dřív na jeho místě mohla zůstat náhradní hodnota.

Hlídání pohybu

Když se telefon během měření hýbe, objeví se „Nehýbejte se“. Je-li signál neklidný příliš dlouho, měření se o 10 sekund prodlouží.

Kvalita, které jde věřit

Hodnocení „dobrá“ dostane měření, jen když se shodnou dvě nezávislé metody výpočtu tepu. Když se neshodnou, aplikace jednou větou vysvětlí proč.

Test zotavení

Krátká zátěž a dvě minuty měření. Ukáže, o kolik tep klesl za 1 a za 2 minuty, a jak se to mění, když se zlepšuje kondice.

Widget na plochu

Poslední měření a trend přímo na ploše telefonu. Klepnutím se rovnou spustí nové měření.

Co Tepovka umí

Snímky jsou ze skutečné aplikace, data na nich jsou ukázková.

Dále PDF zpráva pro lékaře, export do CSV, JSON a TXT a režim pro seniory s větším písmem a hlasovým naváděním.

Jak Tepovka funguje

Při každém úderu srdce se do prstu nažene krev a prst nepatrně změní barvu. Kamera to zachytí, aplikace z toho spočítá tep.

Signál z kamery

Z každého snímku se bere průměr zeleného kanálu pod prstem, při slabém signálu červeného. Aplikace žádá 60 snímků za sekundu a ukládá čas každého z nich, takže časová osa je změřená, ne odhadnutá.

Tep z pat pulzní vlny

Detektor hledá začátky jednotlivých pulzů. Tep je medián intervalů mezi nimi. Během měření počítá tentýž detektor tep z posledních 8 sekund, takže číslo na obrazovce odpovídá výsledku.

Kvalita, HRV a zotavení

Kvalitu hodnotí spektrální čistota signálu a shoda dvou metod výpočtu tepu. Z intervalů mezi tepy se počítá variabilita (SDNN, RMSSD, pNN50, SD1, SD2) a v testu zotavení pokles tepu po zátěži.

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.

3,0 bpm

Na veřejných datech BUT PPG
825 záznamů, které experti označili za kvalitní.

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

Graf ukazuje rozdíl mezi telefonem a EKG u každého záznamu zvlášť, z analýzy pro odborný článek: průměrný rozdíl +0,2 bpm, průměrná absolutní odchylka 1,25 bpm a naprostá většina záznamů v pásmu ±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.

Když stejné záznamy zpětně přepočítáme kódem současné verze aplikace, vychází odchylka 0,8 bpm. Jde ale o tytéž záznamy, na kterých jsme výpočet ladili, a pořídila je starší verze při 24 snímcích za sekundu, takže to berte jako optimistický odhad, ne jako nové měření.

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.

Ověření na veřejných datech

Vlastní měření jsme doplnili o veřejný dataset BUT PPG: 3 888 desetisekundových záznamů z telefonu od 50 lidí, s tepem z EKG a hodnocením kvality od expertů. Přepočítali jsme na něm kód aplikace.

3,0 bpmprůměrná odchylka u 825 kvalitních záznamů (předchozí verze 15,9 bpm)
84 %kvalitních záznamů do 5 bpm (předchozí verze 22 %)
74 %měření s kvalitou „dobrá“ považují za kvalitní i experti (předchozí verze 34 %)

Desetisekundové záznamy jsou pro aplikaci těžší než běžné měření. Za kvalitní označili experti jen 21 % z nich, zbytek obsahuje pohyb, silný přítlak nebo slabý signál. Právě na nich jsme ověřovali hodnocení kvality.

Variabilita tepu a zotavení

Na záznamech z vlastního měření jsme porovnali i variabilitu tepu a test zotavení, s tepy z EKG jako referencí.

92 %záznamů má SDNN do 20 % od EKG při 60 s měření (83 % při 30 s)
2,5 bpmprůměrná chyba poklesu tepu za 1 minutu po zátěži (13 měření)
+6–10 mso tolik vychází RMSSD z kamery vyšší než z EKG

Parametry variability tepu proto berte orientačně, nejvíc to platí pro RMSSD a pNN50.

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í), parametry variability tepu berte jen orientačně a verze s 60 snímky za sekundu zatím není ověřená na úrovni jednotlivých tepů. Aplikace není zdravotnický prostředek.

Měření proběhlo se souhlasem etické komise FEKT VUT v Brně a s informovaným souhlasem všech účastníků. Anonymizovaná data z něj jsou volně ke stažení.

Metodologie a zpracování signálu

Technologický stack

  • Aplikace: Flutter / Dart, widget ve SwiftUI, hlasové navádění přes flutter_tts; přes 19 000 řádků kódu a 140 automatických testů
  • Zpracování signálu: vlastní implementace v Dartu, 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: aplikace žádá 60 snímků za sekundu a ukládá čas každého snímku; snímkovací frekvence se měří, nepředpokládá

Extrahované metriky

  • Tep: 40–200 bpm, z mediánu intervalů mezi patami pulzní vlny
  • Dechová frekvence: 6–30 dechů za minutu
  • HRV: SDNN, RMSSD, pNN50, SD1 a SD2 (Poincarého diagram), stress index
  • Zotavení: pokles tepu za 1 a za 2 minuty po zátěži
  • Kvalita signálu: spektrální čistota a shoda dvou metod výpočtu tepu, pro celý záznam i po desetisekundových úsecích
  • Pohyb: kolik sekund se telefon hýbal a zda se měření prodloužilo
Otevřená data

Pro výzkumníky

Data z validačního měření zveřejňujeme v anonymizované podobě, včetně datového slovníku. Kdo si chce naše čísla přepočítat vlastní metodou nebo porovnat s vlastním měřením, nemusí o nic žádat.

Dataset ke stažení

Souběžné měření 15 probandů: tep z telefonu, z EKG holteru Bittium Faros 180 a z pulzního oxymetru Nonin. Formát CSV, kódování UTF-8.

Licence CC BY 4.0: použití včetně komerčního, stačí uvést zdroj. Surové PPG a EKG signály součástí datasetu nejsou; pokud je pro svou práci potřebujete, ozvěte se.

Co najdete v exportu z aplikace

Ve výzkumném režimu ukládá Tepovka celý záznam do TXT, CSV nebo JSON. Datové sloupce jsou ve všech formátech stejné:

  • time_s, timestamp — čas od začátku měření a absolutní razítko
  • signal — zpracovaný PPG signál
  • peak, foot — příznak vrcholu a nástupu pulzu (0/1)
  • raw_green, raw_red, raw_blue — nefiltrované barevné kanály z kamery

V hlavičce souboru je navíc změřená snímkovací frekvence a její zdroj, hodnocení kvality signálu, tep počítaný z nástupů pulzů, údaje o pohybu telefonu během měření (ve výzkumném režimu i po sekundách) a všechna metadata, která si k měření nastavíte (ID probanda, protokol, poznámka).

Časování bereme z nástupu pulzu, ne z vrcholu: nástup je ostřejší a při snímkovací frekvenci telefonu vychází přesněji. Měření lze také ukládat do aplikace Zdraví; veškeré zpracování běží lokálně na zařízení.

Jak citovat

Zelníček, Š., Vavroušek, D., Kovář, J., Kaša, J. (2026). Tepovka — dataset z validačního měření tepové frekvence z kamery telefonu proti EKG. Fakulta elektrotechniky a komunikačních technologií, Vysoké učení technické v Brně. https://mojetepovka.cz

Dataset zatím nemá DOI. Pracujeme na tom, do té doby prosím citujte odkazem na tuhle stránku a uveďte verzi datasetu (1.0, srpen 2026).

Etika a anonymizace

Měření proběhlo se souhlasem etické komise FEKT VUT v Brně a s informovaným souhlasem všech účastníků. Data neobsahují jména, věk, pohlaví ani absolutní časová razítka; probandi vystupují pod pseudonymy P01–P15 a klíč k nim nezveřejňujeme.

Zajímá vás spolupráce, srovnávací měření nebo studentská práce nad těmito daty? Napište na info@mojetepovka.cz.

Plán vývoje

v3.1.0 · srpen 2026

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, propojení se Zdravím, režim pro seniory.

Aktuální verze

v3.3.1 · říjen 2026

Tep z pat pulzní vlny na výsledku, v historii i během měření; hlášení, když tep určit nejde; hlídání pohybu a delší měření při neklidném signálu; hodnocení kvality se shodou dvou metod; test zotavení po zátěži; widget na plochu. Ověřeno na veřejných datech BUT PPG.

Další krok

Ověření verze s 60 snímky za sekundu proti EKG na úrovni jednotlivých tepů a větší, pestřejší soubor účastníků. Pokročilá analýza trendů a integrace Wear OS.

v4.0.0 a výzkum

Strojové učení pro detekci pulzů a artefaktů, volitelný webový dashboard pro hromadnou analýzu. Ve výzkumu: saturace krve kyslíkem (zatím ve fázi kalibrace proti pulznímu oxymetru) a detailnější analýza tvaru pulzní vlny.

Ž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í stejným zpracováním jako na telefonu.

Ukázka běží na stejné verzi 3.3.1 jako aplikace v App Storu. Měření z ní se ukládají jen ve vašem prohlížeči.

Stáhnout Tepovku v App Storu

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í (UBMI).

Kontext

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

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í členové.