Uruchom skrypt, który odbiera zdarzenia z detektora ćwiczeń Aidlab i wypisuje w konsoli wykryte pompki, burpees czy przysiady.
Pomysł powstał podczas Stupid Hackathon w Pomorskim Hackerspace: wykorzystać pas Aidlab do rozpoznawania ćwiczeń. W tym poradniku zbudujemy prosty skrypt Pythona, który wypisuje wykryte ćwiczenia w konsoli.
Aidlab SDK obsługuje między innymi:
- pompki
- brzuszki
- burpees
- podskoki
- przysiady
- podciąganie na drążku
Przygotowanie
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==2.7.0"
Jak działa detektor?
Detektor korzysta z dwóch rodzajów danych: przyspieszenia z akcelerometru i orientacji urządzenia w przestrzeni.
Przy rozpoznawaniu pompki zmiany przyspieszenia zestawiamy z ułożeniem ciała względem podłogi. Detektor uruchamia się po włączeniu odbioru danych 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], [])
Nie musisz samodzielnie pisać klasyfikatora ruchu. SDK udostępnia moduł workout detector, który rozpoznaje ćwiczenia, w tym pompki.
Odbieranie wyników
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, ExerciseEvent
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_receive_event(self, device, event):
if isinstance(event, ExerciseEvent):
print(event.exercise)
asyncio.run(WorkoutDetector().run())
Po rozpoznaniu ćwiczenia SDK przekaże ExerciseEvent do did_receive_event, a skrypt wypisze wynik.
Jeśli chcesz zbudować własny detektor, wykorzystaj surowe dane z akcelerometru i kwaternion opisujący orientację. Możesz wtedy samodzielnie sprawdzić, które cechy sygnału pomagają rozpoznawać wybrany ruch.








