Uruchom skrypt w Pythonie, który nasłuchuje detektora treningów Aidlab i zapisuje każdą pompkę, burpee czy przysiad.
Ile pompek potrafisz zrobić? Zespół biorący udział w Stupid Hackathon, hackathonie organizowanym w Pomorskim Hackerspace, chciał stworzyć aplikację wykorzystującą pas piersiowy Aidlab, która zachęca do aktywnego i zdrowego stylu życia.
Pokażemy, jak zbudować prostą aplikację, która komunikuje się z Aidlabem za pomocą Aidlab SDK. Gotowy skrypt Pythona będzie wypisywał w konsoli wykryte ćwiczenia, takie jak:
- pompki
- brzuszki
- burpees
- podskoki
- przysiady
- podciąganie na drążku
Wymagania: do połączenia z Aidlabem potrzebujesz komputera z obsługą Bluetooth.
Zacznij od przygotowania projektu:
- Utwórz pusty katalog, a w nim plik
workout-detector.py. - Zainstaluj
aidlabsdkza pomocąpip:
python -m pip install aidlabsdk
Zliczanie podstawowych ćwiczeń jest stosunkowo proste, ponieważ wymaga tylko dwóch rodzajów danych. Pierwszym jest sygnał z akcelerometru, który pokazuje zmiany przyspieszenia podczas ruchu. Drugim jest orientacja urządzenia w przestrzeni.
Aby rozpoznać ćwiczenie, mierzymy niewielkie zmiany przyspieszenia i sprawdzamy, czy ćwicząca osoba jest zwrócona przodem do podłogi. Właśnie to Aidlab robi w tle po włączeniu odbioru sygnałów motion i orientation:
devices = await AidlabManager().scan()
if len(devices) > 0:
aidlab = devices[0]
await aidlab.connect(delegate)
await aidlab.collect([DataType.MOTION, DataType.ORIENTATION], [])
Prawidłowe określenie orientacji bywa kłopotliwe. Na szczęście odbiór sygnałów motion i orientation automatycznie uruchamia wykrywanie ćwiczeń za pomocą modułu workout detector, więc nie musimy tworzyć wszystkiego od zera. Moduł ten ma wiele przydatnych funkcji, w tym licznik pompek.
Aby obsługiwać zdarzenia związane z ćwiczeniami, utwórz klasę WorkoutDetector, która implementuje DeviceDelegate:
import asyncio
from aidlab import AidlabManager, DataType, DeviceDelegate, DisconnectReason
class WorkoutDetector(DeviceDelegate):
async def run(self):
devices = await AidlabManager().scan()
if len(devices) > 0:
await devices[0].connect(self)
while True:
await asyncio.sleep(1)
def did_connect(self, device):
print("Connected to:", device.address)
asyncio.create_task(device.collect([DataType.MOTION, DataType.ORIENTATION], []))
def did_disconnect(self, device, reason: DisconnectReason):
print("Disconnected from:", device.address, reason)
def did_detect_exercise(self, device, exercise):
print(exercise)
asyncio.run(WorkoutDetector().run())
Funkcja zwrotna modułu workout detector jest teraz wywoływana przy każdym rozpoznaniu nowego ćwiczenia.
Zachęcamy do dalszych eksperymentów z surowymi danymi ruchowymi — sygnałem z akcelerometru i kwaternionem orientacji. Możesz na ich podstawie zbudować własny detektor ćwiczeń.







