Визначення якості розминки перед тренуванням, по даним з акселерометра на руці, за допомогою машинного навчання та аналізу даних.
Моєю цілю було створити та реалізувати структуру моделі, яка б могла допомогти спортсменам визначити якість їх розминки перед тренуванням.
- У спортсмена на правій руці є смарт годинник з акселерометром, на початку тренування він повинен зайти в додаток та розпочати запис.
- Після закінчення розминки, людина закінчує запис.
- Потім алгоритм розділяє розминку на окремі вправи та класифікує їх, і після цього видає звіт розминки.
- У звіті написаний список вправ, у порядку їх виконання, яких виконав спортсмен, час їх виконання та сумарний результат, таблиця з запланованими вправами та часом виділеним на кожну вправу сумарно під час розминки.
- По результатам сумарної таблиці, алгоритм видає висновок: людина зробила все правильно та може продовжувати тренування, чи потрібно зробити додаткові вправи для розминки.
Так як це просто структура, то в якості розминки у нас буде короткий список вправ - присідання, махи руками в плечовому суглобі та удари правою рукою по груші. P.S. Вправи вибирались так, щоб я міг самостійно зібрати достатній дата сет і не сильно виснажуватись під час цього.
В якості алгоритму визначення якості розминки виступає умова "Для того щоб гарно розігріти групу м'язів, потрібно виконувати певну вправу мінімум 12 сек", я її придумав сам, тому не судіть жорстоко, для більш якісних умов потрібно проконсультуватися з тренерами.
Файли:
- fitness_workbook.ipynb, Це мій робочий ноутбук в якому записаний процес аналізу даних, підбору фільтрів, процес вибору фічей для моделей, підбор моделей та аргументація їх використання, також там є графіки, на які я дивився під час роботи, та основні думки, які в мене виникали. Нажаль, так як це робочий ноутбук, то він не дуже чисто оформлений(
- fitness_final.ipynb, Це готовий ноутбук, який забирає останній файл з тестової папки (неначе це тільки що отриманий файл), проводить його перевірку на коректність, проводить фільтрацію, розбиває сигнал на окремі вправи, класифікує їх та видає кінцеві звіти.
- fitness_final_one.ipynb, Це той самий fitness_final.ipynb, але зібраний в одній клітині та без коментарів, він створений для того щоб вибрати файл, натиснути одну кнопку та отримати звіти.
Папки:
- Fitness report, Папка в яку потрапляють звіти тренувань після виконання коду. (В ній вже є 8 звітів, для 8 тестових файлів з тестової папки, вони з підписом old)
- Error report, Папка в яку потрапляють звіти помилок, якщо файл поданий в модель не відповідає певним умовам. (Аналогічно там вже є файл приклад з підписом old)
- Graphs, Папка з візуалізаціями предіктів моделі до тестових даних.
- test_file, Папка з тестовими даними
- models, Папка з моделями, які я отримав під час роботи.
- train_file, Папка з файлами, які використовувались для навчання моделі.
- error_file, Папка з зіпсованими фалами, їх відловила система пошуку помилок під час тренування моделі.
- Error report train, Папка з звітами до файлів зазначених в error_file.
У моєму випадку збір даних виконувався телефоном прив'язаним до руку в місці, де повинен бути браслет (пробував тримати телефон в долоні екраном в руку, все продовжувало працювати). Дані записувались за допомогою додатку Accelerometer Meter (ви його можете знайти в Google Play) на налаштуваннях (в розділі Graph) позначених на малюнку.
Тобто модель використовує значення датчика в
У зборі тренувального дата сета брали участь 4 молоді та здорові людини різних спортивних категорій, 10 + 9 + 8 + 5 в цілому 33 записи. По технічній частині збору даних описано вище. Тренувальний запис мав такий формат:
- 5 секунд спокою
- 15 секунд махів руками
- 10 сек відпочинку
- 15 сек присідань
- 10 сек відпочинку
- 15 сек ударів руками
- 5 сек спокою
У половині файлів під час спокою та відпочинку потрібно було тримати руки майже нерухомо, у половині можна було спокійно рухатись та виконувати інші дії (почесати спину та тд).
У нас є 8 спеціально відзнятих файли для тесту (те що модель ні одного разу на них не промахнулась, це просто співпало), щоб перевірити всі можливі варіанти звіту та роботу алгоритму.
- test1_standard - формат дій як і в трейні, виконаний людиною, дані якої є в трейні. (15 сек махів (в майбут. 15 м), 15 сек присідань (15 п), 15 сек ударів (15 у)).
- test2_standard_other - формат дій як і в трейні, виконаний людиною, даних якої не має трейні. (15 м, 15 п, 15 у).
- test3_stress - великий набір вправ у хаотичному порядку ранодомного часу. (10п, 20у, 15м, 10м, 8м, 10у, 12п, 10у, 10м), людини не має в трейні.
- test4_not_full_squatting - не виконані всі присідання (15м, 15у, 5п), можна побачити, як алгоритм робить помилки, але основну задачу все таки виконує.
- test5_only_hits - присутні тільки удари в повному обсязі (15у).
- test6_not_squatting - повні удари, не всі махи, немає присідань (15у, 5м).
- test7_only_not_full_rotation - тільки не повні махи (10м).
- test8_error_file - файл з пошкодженою частою та середнім прискоренням, для перевірки частини пошуку помилок, (7м, 7у).
P.S. Відхилення часу дій в звітах від зазначених здебільшого помилка людини, яка виконувала дію невірний час, а не помилка алгоритму.
Мною передбачалось, що ви захочете перевірити отримані мною звіти та отримати Їх самостійно, чи подивитись на дані під час певних стадій їх обробки, тому за допомогою файлів test_file та fitness_final.ipynb чи fitness_final_one.ipynb (у цьому файлі графіків не має), ви можете це зробити. Просто запустіть код вибравши файл з тестової папки. Вибір файлу можна зробити 2 способами:
- Змінити номер фалу який зчитає алгоритм у строчці (обережно тут зворотна нумерація): file_name = os.listdir("test_file")[-1]
- Чи змінивши назву файлу, так щоб він став на останнє місце в алфавітному порядку.
Також ви можете спробувати алгоритм на свої даних, для цього запишіть файл, як сказано в використаних даних, додайте його в test_file та виберіть його. Алгоритм досить гарно відпрацьовував на даних людей, яких не було в трейні, але це були молоді спортивні люди.
На цьому в мене все, приємного дня та користування моїм проектом)) Слава Україні!!!
