Alergare asistată de AI (proiect hobby)

Gata, am găsit ceva mișto de făcut, doar că nu prea mă pricep (încă) îndeajuns de bine la AI.

Obișnuiesc să alerg de 5-6 ori pe săptămână și pot folosi AI la evaluarea programului de antrenament și să fac predicții legate de performanță.

La partea de alergare am găsit cum să cuantific nivelul de fitness.
Obișnuiesc să alerg cu un ceas care măsoară ritmul cardiac (aka heart rate monitor sau HRM).
Știind distanța și durata de timp alergată pot afla câte bătăi pe kilometru am.
Unitatea asta de măsură am inventat-o eu: bpkm
Înseamnă “beats per kilometer” sau “bătăi per kilometru”.

De exemplu ieri am avut 950 bpkm. Un atlet de performanță are probabil cam 700 bpkm.
Când sunt obosit, răcit sau este vreme rea, probabil că ajung pe la 1100 bpkm.

Mai sunt destule de spus legat de programul de antrenament, dar e de ajuns pentru azi.

La partea de tehnologie am ales NodeJS ca server și Brain.js pentru AI.

Momentan rulez diverse seturi de date pentru a identifica algoritmul ideal pentru a face predicții.
Un set de date arată cam așa:

distance: 12.5
heartRate: 150
time: 80
trainingType: 1

Unde:
distance = km
heartRate = media de bătăi pe minut
time = minute
trainingType = tip de antrenament (aerobic, intervale, fartlek, etc)

Din primele 3 variabile se determină bpkm, o valoare care poate fi considerată output al datelor anterioare. <- asta îmi este încă neclar mie.

Ce nu știu încă:

  • formatul ideal al setului pentru training. As fi vrut să adaug și o valoare pentru impactul vremii
  • cum să interpretez rezultatele. De exemplu în unele zile bpkm va fi mare pentru că tipul antrenamentului determină un ritm cardiac foarte crescut. Alergarea în pantă, de exemplu. Astfel de antrenament are rezultate bune, însă nu știu dacă algoritmul își va da seama de asta.

Alte informații tehnice:

  • o aplicație Android va fi interfața pentru introdus antrenamentele efectuate
  • o aplicație web, cu Angular la bază, va fi pentru simulări
5 Likes

Aveam si eu la un moment dat (cand alergam mai mult :joy:) o idee sa fac o aplicatie in care sa-ti importi alergarile (formaturile gps uzuale) si apoi sa calculeze tot felul de statistici si indicatori de performanta, intr-un mod cat mai stiintific (dashboard, grafice avansate, etc.).

Insa exista o multime de aplicatii (platforme) de tracking cu ani de dezvoltare in spate care s-au dezvoltat mai mult pe ceea ce vrea publicul larg, precum Strava, Runkeeper, Endomondo, Garmin Connect, etc.

De ceva vreme tot caut idei pentru un proiect personal si incerc sa raspund la intrebarea: ce vreau sa obtin cu asta? Care este scopul? Un raspuns simplu este: sa invat ceva nou. Insa daca ma gandesc mai bine, nu fac asta suficient de mult in cadrul proiectelor de la serviciu?
Astfel incep sa realizez ca motivatia “sa invat ceva nou” nu (mai) este suficient de buna pentru mine.

Atunci ce m-ar motiva cu adevarat pentru a ma implica intr-un proiect extra-job? Dupa ce mi-am lasat subconstientul sa lucreze la intrebarea asta o vreme, raspunsul e oarecum simplu si banal: as vrea sa ma implic intr-un proiect care:

  1. incearca sa rezolve o problema reala si are sanse de reusita si public tinta real, adica nu este un proiect pe care doar eu l-as folosi;
  2. avand in vedere ca pentru orice problema exista deja o multime de solutii (software) deja, proiectul respectiv trebuie sa fie (sau macar sa-si propuna sa fie) “best in its class”.

Sunt constient ca nu este deloc usor sa dezvolti un proiect sau un produs cap-coada, asa ca tema aleasa trebuie sa fie foarte bine aleasa si sa fie suficient de…mica pentru a avea sanse de finalizare :slight_smile:.

Un fel de fun-fact despre reusite si nereusite: de ce oamenii inteligenti care au o multime de idei nu reusesc sa-si faca un business, iar unul care isi deschide o shawormerie se imbogateste rapid?
Raspunsul: pentru ca cel cu shawormeria doar atata stie. Deschide o shawormerie in Dristor, iar daca nu merge, deschide in Pipera sau la Apaca. Daca merge, mai deschide una in alta locatie. Adica persevereaza in ideea lui “banala” poate toata viata, pe cand un om inteligent sare de la o idee la alta mult prea repede si nu ofera suficient timp si efort niciunei idei sa se concretizeze.

P.S.:
Nu, nu am gasit inca ideea potrivita in care sa cred si sa investesc mult timp si efort personal. Mai caut :slight_smile:

2 Likes

Nu ajunge nimeni sa tot deschida shaormerii pana se imbogateste, mai degraba pierde o gramada de bani, daca ai auzit to vr-o poveste e survivor bias, pt fiecare poveste sunt mult mai multi care au ramas cu datorii pe toate viata deschizand localuri sau alte afaceri banale.

Cred ca cel mai important e timing-ul si norocul, acum 10 - 15 ani cu shaormerie faceai bani, azi cu toate lanturile si competitia, putin probabil, la fel si cu software-ul.

4 Likes

Cred ca l-am mai pus, dar merita pus din nou: https://youtu.be/3LopI4YeC4I A nu se neglija deloc rolul norocului.

1 Like

Te contrazic un pic: in shaormerii nu prea mai ai ce sa inventezi, piata e limitata, castigul e limitat de resursele necesare. Pe software, internetul e la inceput inca, ideile ajung sa cucereasca lumea, investitia e relativ mica. Nu mai construiesti un Facebook dar un Tik-Tok nu e asa mare branza.

1 Like

Este si o treaba de nororc(nu 100%), dupa cum zice si @anon31094663, executie plus locul si timpul potrivit :slight_smile:

Asta cu norocul e si o scuza…

Asta este a treia aplicație pentru alergare pe care o fac.
Prima am făcut-o în 2014 și am folosit-o până prin 2016-2017.
Pe a doua am făcut-o în 2017 si am folosit-o până recent, când mLab a fost cumpărat de MongoDb si mi-am dat seama că codul e cam vechi, iar funcțiile aplicației sunt învechite și nu mai merită să o repar.

Aplicația pe care o încep o voi folosi și sunt foarte interesat de ce voi realiza cu ea.
Scriu cod și din pasiune din totdeauna, alerg de 6 ani ca amator (+7 ani competitiv în adolescență) și îmi plac testele, datele, inovația.
Deci e un hobby.

Mă intrigă în special să testez unele teorii legate de alergare.

Cât despre partea comercială, nu prea o întrevăd.
Ca să obțin niște date pentru AI trebuie să alerg câteva luni și apoi să trag niște concluzii.
Ori pe piață alergătorii nu au răbdare câteva luni ca să îi convingi că merită să o cumpere.

1 Like

Nu e scuza, e constatare.

ideal ar fi să adaugi și panta.
te-ai uitat pe Strava să vezi ce parametri estimează ei? Energy Output / Average Power – poate te lămurești cum se calculează.
Poți să adaugi (tot inspirat de Strava) și Perceived Exertion

1 Like

Daca ai nevoie de mai multe date, pot sa iti furnizez si eu ca si eu (mai) alerg si ma masor cu un ceas Garmin cu GPS.
Din aceasta perspectiva, cred ca ar fi util sa ai un mod simplu de a importa date in diverse formaturi (GPX, Garmin, Strava, Runkeeper, etc.).

Importul de date din alte aplicații e un obiectiv foarte îndepărtat. Deși e nice to have.
Deocamdată planul meu e să introduc datele manual.

Nu știu cum funcționează aplicațiile astea pentru alergare, deși am folosit câteva în trecut.
Îți poți face programul de antrenament în aplicația Garmin?

Poți compara datele de la Fitbit, Garmin, etc?

Pai si ce date introduci manual? Mi se pare munca de sisif sa introduci datele de la antrenamentele de alergare manual. Ceasurile sau telefoanele cu gps aduna o multime de date la un antrenament, majoritatea in formatul GPX (un format XML standard pentru date GPS).
De-asta am zis ca poate ar fi mai simplu sa implementezi importul datelor macar din formatul GPX.

Aplicatiile pentru alergare au tot felul de features, unele utile altele nu prea. Depinde de la aplicatie la aplicatie. Strava de exemplu, care este si cea mai folosita datorita partii sociale, mie mi se pare ca este cam slabuta la partea de analiza, statistici, etc. Cel putin varianta free, ca au si varianta Premium unde ai acces la mai multe analize.

Garmin Connect mi se pare mult mai profi, dar nu cred ca folosesc 10% din ce poate ea.
Uite cum arata Garmin Connect (aplicatia web, ca au si mobile care are mai putine chestii) ca idee:

In ce sens vrei sa compari datele? Sa te masori cu mai multe aplicatii in acelasi timp sa vezi daca au date cat de cat asemanatoare? Am niste prieteni care se masoara cu Strava si Runkeeper in acelasi timp si diferentele sunt minore, in sensul ca unele aplicatii elimina automat timpii de pauza, iar altele nu.

Asta e alt motiv pentru care am pomenit de un format standard, cum ar fi GPX. Ceasurile sau telefoanele pot scoate acest format “brut” de date, pe care diverse aplicatii il pot interpreta diferit cu proprii algoritmi.

1 Like

Când făceam sport de performanță țineam un jurnal în care scriam cu pixul :slight_smile:

Introduc distanța, timpul și mai nou HR.
Eventual ce fel de alergare a fost (bucăți, fartlek, alergare lungă, etc).

Are și introdusul manual un beneficiu; constientizezi raportul dintre date.

Deocamdată nu am smartwatch care să măsoare HR și SPO2, în special pentru că astea care măsoară la încheietură nu au acuratețe.
Așa că am un ceas cu chestwrap.
Deși dacă stau să mă gândesc cred că acuratețea e asemănătoare, având încredere că eu nu înregistrez deloc.

Poate și vremea ar merita înregistrată.

Tu ai și vremea?

Inteleg placerea de a introduce datele manual, dar suntem in 2020 si suntem programatori.
Trebuie sa optimizam si sa automatizam cat putem de mult.

Ceasul meu masoara HR la incheietura, dar nu masoara SPO2 (am verificat acum). Sincer n-am fost interesat de SPO2 pana acum, dar din cate citesc vad ca este un indicator foarte util.

In ceea ce priveste vremea, ceasul meu imi da un grafic de temperatura, dar nimic despre umiditate sau alti indicatori de vreme.

Sunt curios cum introduci manual HR? :slight_smile:
Banuiesc ca introduci media, nu? Eventual si min si max. Doar ca HR, ca si alti indicatori (pace, elevation, run cadence) sunt de fapt niste serii de valori in timp, nu valori individuale.

Si uite-asa ajung din nou la a importa date complete masurate de un ceas sau un telefon cu GPS, iar aplicatia ta s-o construiesti pentru a analiza “smart” aceste date si a scoate niste statistici interesante.

Ai pomenit de tipul de alergare (intervale, fartlek, long run, etc.).
De-asta imi place mie Garmin mai mult decat Strava (aplicatiile). Strava nu prea ia in considerare intervalele sau “split”-urile. Orice fel de alergare as face, la final imi arata statisticile cu split standard per km.

Desi am ceasul Garmin de vreo 3 ani, doar recent am descoperit ca pot sa-mi configurez workouts de acasa in aplicatia de telefon sau web, cu fix ce durata (sau distanta) si pace doresc eu pe fiecare interval, iar apoi in timpul antrenamentului ceasul imi da aceste indicatii despre intervalul curent.
Chestia asta a fost “game changer” pentru mine, efectiv a devenit mai usor sa alerg cand am setat un workout predefinit, decat sa alerg “dupa ureche” (poate 5km, poate 8km, depinde cat am chef).

La final, aplicatia Garmin Connect imi arata frumos statisticile pe intervalele configurate de mine, pe cand Strava imi arata per km, ceea ce e un bulshit pentru un workout de genul asta.

SPO2 este bun daca faci intervale sau pe durata unei alergari lungi.

Pai eu fixez dinainte un target la HR, sau cum se spune in domeniu “zone”.
La sfarsitul alergarii bag acolo media HR.
Unii alearga la un anumit pace constant. Eu alerg la o anumita HR constant.
Pot mentine ritmul in limita a 6-10 batai pe minut destul demult timp, deci nu am minim sau maxim foarte diferit.
Nici macar la fartlek. Si acolo fixez de la inceput limitele min/max.

Daca e alergare constanta e ok, dar la fartlek sau intervale nu prea ajuta,

Ce nu arata (cred) este cate batai pe km are ritmul cardiac.
Asta vreau sa folosesc, pentru ca este o constanta care reflecta eficienta fizica.

Am terminat aplicatia web, fara partea de AI.
Nu stiu la ce sa ma astept din partea AI, dar cred ca am nevoie de multe date, ceea ce va fi dificil.

La partea de AI am gasit ca as putea sa obtin:

  • predictie in functie de antrenamentele existente in baza de date
  • predictie pentru diverse programe de antrenament propuse

3 Likes