После тренировки у спортсменов возникает необходимость сохранить результаты тренировки для дальнейшего анализа, представить их тренеру, чтобы он смог оценить их. Раньше результаты записывали в тетрадь и в самом лучшем случае переносили в excel и проводили какой-то анализ.
Вопрос в том, что тетради может не оказаться под рукой плюс ручная запись требует времени, а после тренировки совсем не до этого и хочется отдохнуть. А вот смартфон в наше время есть у каждого и почему бы не воспользоваться его возможностями.
Гребной тренажер представляет собой специализированный спортивный снаряд, который оснащен датчиками, которые считывают физические показатели во время работы спортсмена,. Информацию с этих датчиков обрабатывает монитор активности PM5 (Performance Monitor 5) (Рисунок 3, Рисунок 4) и выводит в доступном для спортсмена формате. Каждый монитор PM5 оснащен индивидуальной log-картой, которая сохраняет данные о всех тренировках, а конкретно о скорости движения, частоте циклических движений, прилагаемых усилиях, затрачиваемых калориях, времени работы и пройденной дистанции.

Рисунок 3 — Общий вид монитора активности PM5

Рисунок 4 — Подробное описание темпа, скорости, дистанции и времени
В дальнейшем все эти результаты можно выгрузить, но во-первых не будет понятно к какому спортсмену они относятся. Во-вторых подключение требует наличие персонального компьютера с установленным специализированным программным обеспечением и наличие USB кабеля. В конечном итоге всё упирается в то, что нет возможности оперативно получить информацию о тренировке и сохранить её.
Сразу приходит идея использовать мобильное приложение, но здесь опять возникают следующие проблемы. Протокола связи с мониторами PM5 нет в открытом доступе. Также разработка мобильного приложения для различных платформ (iOS и Android). Если для Android можно написать приложение на языке Python, то с устройства Apple ситуация так просто не решается. Без знания Swift или Objective-C не получится написать приложение, а если оно и будет, то без лицензии разработчика его не получится загрузить в App Store.
Поэтому в качестве интерфейса взаимодействия был выбран бот для Telegram благодаря его кроссплатформенности и простоте реализации интерфейса. Основная задача бота собирать результаты после тренировки, и обработкой фотографии с результатами он прекрасно справляется. Также результаты сразу можно связать с учетной записью спортсмена.
Следующий момент, который уже был озвучен - это обработка фотографий с результатами. Задача бота облегчить сбор информации о тренировках. Сделать и прислать фотографию намного проще чем вбивать результаты своих тренировок в текстовом формате. Если бы просто нужно было отправить время и дистанцию, то можно было ограничиться текстовым форматом ввода. Но зачастую тренировки могут быть объемными и состоять из множества интервалов и тогда о каждом из них нужно вбивать информацию. Плюс при вводе можно совершить какие-то опечатки, ошибиться с форматом ввода ведь спортсмен выкладывается на тренировке и очень устает.
Поэтому в качестве обработки результатов было выбрано компьютерное зрение. Пользователь просто отправляет фотографию, а дальше на сервере она обрабатывается и сохраняется в базу данных. В данном случае работа в режиме реального времени не нужна, поэтому задержки на отправку и обработку фото не столь важны.
ТЗ
Интерфейс взаимодействия - Бот телеграмм (pytelegrambotapi)
Логика хранения - база данных (SQLite)
Предобработка данных (opencv + NN)
OCR - tesseract / нейронная сеть (tensorflow)
REST API - Django
Принимать фотографии от спортсмена через интерфейс бота Telegram
Производить предобработку (захватывать нужный участок фото, выполнять выравнивание)
Распознавание даты тренировки по фото (потому что результаты могут быть с прошлых тренировок)
Распознавание общего времени, общей дистанции, среднего времени и темпа (Это то что указано в строке между двумя горизонтальными линиями).
Распознавание времени, дистанции, среднего времени и темпа для каждого сплита (Это те строки, которые идут после общей информации и составляют разбиение общей работы на отдельные куски).
Не всегда, но может быть пульс
Простейший REST API для получения информации о спортсменах. Например по id пользователя: выгрузка по дате, по типу работы. Ещё можно общую статистику выгружать по пользователю: общее количество метров, общее время, средний темп и скорость

