Помощь многим: Android-приложение для людей с особыми потребностями

    Приветствую всех! Я Беглецов Глеб, учусь в 11 классе, летом прошлого года закончил программу “IT Школа Samsung” в г. Санкт-Петербург на площадке ФМЛ 239 под руководством Левина Михаила Константиновича. В качестве выпускной работы я разработал приложение, которое назвал “Parus”. Это мой первый большой проект под Android, и он мне принес  ГРАН-ПРИ финала Всероссийского конкурса IT Школы Samsung (ролик). Хочу поделиться историей создания этого проекта.

    Идея

    Я иногда слышал среди своих одногруппников в «IT Школе Samsung» подобную фразу: «Я не знаю, какое приложение мне написать». У меня не было сомнений. Моё приложение должно помочь людям с особыми  потребностями  полноценно общаться с миром, потому что данная проблема актуальна и в нашей стране, и в мире. И меня она лично касается. Есть много отдельных приложений: для синтеза речи, для искусственного зрения, для напоминаний и т.д. Мне хотелось объединить всё необходимое в одном приложении.

    Начало

    Учиться в «IT Школе Samsung» я начал в сентябре, а в начале ноября  уже знал, какой проект  буду разрабатывать. Но это же классика, откладывать всё на последний момент! В итоге апрель и май выдались очень напряженными. В тоже время это было очень увлекательное время. Я просыпался,  кодил с перерывами на еду, ложился спать, просыпался и снова кодил, если не учился в школе. Вот такой был распорядок дня в течение двух завершающих месяцев обучения. Узнавал каждый день что-то новое. Несколько раз было такое: понимал, что написанное не годится и переписывал половину уже сделанной работы. Тогда, как понимаете, было не очень весело.

    К началу апреля я освоил основы Java и Android. А за следующие два месяца добавил синтез речи, распознавание речи, компьютерное зрение, отслеживание пульса, создание ежедневных напоминаний (не todo list), связь аккаунтов человека с особыми потребностями и его помощником, чат и передачу данных между ними. Дальше подробнее про каждую функцию.

    Говорить. Синтез речи

    Данная функция помогает общаться людям с нарушением речи . Сам синтез речи – самая лёгкая задача из всех. Подключил TextToSpeech и готово. Но такой функционал не слишком удобен для пользователя, поэтому я решил сделать систему частых фраз и тематические коллекции. Вот с этим уже начались первые проблемы.

    Создавая систему коллекций и частых фраз, я не знал о существовании Snapshot’ов (обновление данных в реальном времени), поэтому обновление данных у меня было реализовано, как я позже понял, через очень шаткие костыли. Я читал данные из БД каждый раз, когда там, гипотетически, могли измениться какие-либо поля. И такая система была реализована ВЕЗДЕ. Вот это и был один из тех моментов, когда, узнав про что-то новое и полезное, обрадовался, а затем взялся за переписывание всего кода.

    Смотреть

    Компьютерное зрение должно помогать людям со слабым зрением распознавать текст или объект на фото. Но не всё так идеально, как хотелось бы. Firebase Ml Vision удобен и практичен, но бесплатная версия не распознает русский язык, а результаты распознавания объекта иногда выглядят по меньшей мере странно.

    Вообще, при реализации многих задач мне очень помог Firebase, отличный инструмент. Для компьютерного зрения я поначалу попробовал использовать Tesseract, потому что была возможность подключить к нему файл с русским алфавитом для распознавания кириллицы. Оказалось зря. Потратив только на его установку в проект около недели, текст с русскими буквами так и не распознавался. Поэтому я стал искать другие варианты. И тут меня спас Firebase Ml Kit, который я настроил в 5 раз быстрей! Firebase даёт очень много плюшек, и без него я вряд ли бы всё сделал. По неопытности, конечно, не сразу все получалось, но я разобрался. Для текущей задачи пока я использую API от Firebase. Может, в будущем найду что-то более подходящее.

    Слушать

    Просто распознавание речи с помощью SpeechRecognizer API от Google и вывод результата на экран.

    Пульс. Google Fit vs Samsung Health SDK

    Отслеживание пульса – полезная функция для людей с сердечными заболеваниями. С помощью неё пользователь может следить за своим сердцебиением. При обработке данных, если пульс вне нормального интервала (55 < x < 90), то на устройство приходит уведомление об этом.

    Но над этой задачей тоже пришлось попыхтеть. Сначала разобрался, как читать данные из Google Fit. Потом прочитал про Samsung Health SDK и решил перейти на него. У S Health SDK есть очень удобное дополнение – Data Viewer. С его помощью можно записывать данные в S Health без каких-либо трекеров. Это очень помогает при тестировании приложения, в этом SDK от Samsung выигрывает у GoogleFit. Также не надо делать привязку к аккаунту и подключать QAuth от Google, тоже плюс.

    Но если Google Fit может встроить в свой проект любой желающий, то для использования Samsung Health необходимо, чтобы приложение получило статус партнёрского. Без такого статуса приложение будет полноценно работать только в режиме разработчика. К сожалению, на данный момент приостановлен приём заявок на статус партнёрского приложения в связи с обновлением партнёрской программы. Поэтому я был вынужден вернуться обратно к GoogleFit.

    Напоминания

    Я знаю, что существует множество приложений по типу todo list, но, как говорится, это другое…  Во-первых, пользователь может установить несколько часов (12:50, 13:10 и 18:30, например) на одну задачу.  Во-вторых, есть возможность установить напоминанию интервал времени и повторение: с 12:00 до 20:00 каждый час, например. Напоминания каждый день перезагружаются и начинают всё по новой, как обычный будильник. Это может быть полезно людям, которым надо каждый день сделать что-то важное. Например, люди с диабетом могут установить время для инсулиновых уколов.

    Безусловно, что человек может установить множество будильников, которые будут выполнять ту же задачу. Моя программа просто упрощает это. Для напоминаний с 9:00 до 21:00 с регулярностью в полчаса, необходимо установить либо 24 обычных будильника, либо 1 напоминание с интервалом в Parus. Думаю, что второй вариант легче.

    Напоминания не сильно тратят заряд батареи, потому что они реализованы за счёт WorkManager’ов. Я долго думал между Alarm и WorkManager, потому что первое слишком сильно нагружает телефон и батарею (+на некоторых телефонах ограничен), а второе имеет один весомый минус – из-за сверхоптимизации напоминание может не отобразиться, если телефон долго находился в режиме сна. Я около 100 раз протестил данный случай, и 3-5 раз напоминание не срабатывало до выхода из режима сна. На сайте Android developers читал, что Google работает над этим, так что буду надеяться, что скоро это исправят.

    Связь с помощником

    Это одна из главных функций моего приложения. У человека с ограниченными возможностями здоровья не всегда получается справляться со всеми жизненными ситуациями самостоятельно, поэтому иногда есть человек, который выполняет роль помощника. С ним происходит много коммуникаций, и поэтому я считаю, что очень важно упростить это взаимодействие.

    • Передача данных
      Помощнику будет спокойнее, если он будет иметь информацию о пульсе своего подопечного и его местоположении. Кроме того, помощник может редактировать в приложении напоминания человека с ограниченными возможностями здоровья. А еще всегда можно посмотреть, когда связанный пользователь заходил в последний раз в Parus.

    • Кнопка вызова
      При связывании аккаунтов, у человека с особыми потребностями появляется быстрая кнопка «Позвать помощника». При нажатии на неё на устройство помощнику отправляется уведомление.

    • Чат
      Иногда случается так, что твой помощник – это не родной и не близкий человек, а волонтёр или социальный работник. Чтобы не общаться с ним в различных мессенджерах, можно общаться с ним отдельно в чате Parus’a.

    Samsung Android Bootcamp. Заключение

    Выше я описал основные возможности своего приложения на момент участия в конкурсе выпускных проектов «IT Школы Samsung». Я совсем не упоминал архитектуру приложения или паттерны, которые я использовал. Знаете почему? Потому что этого не было на момент финала конкурса. Проект состоял из классов, разложенных по пакетам. И всё. Я подозревал, что это ужасно, но не знал, как исправить. И тут нам сказали, что сразу после конкурса пройдет летний Android Bootcamp для выпускников «IT Школы Samsung». Я решил, что мне явно туда.

    За две недели интенсива я узнал безумно много полезных вещей. Например, зацепился за MVVM + Data Binding + Material Design. Стало понятно, что Parus выпускать в таком виде нельзя. Предстоящая работа: сначала архитектура, потом дизайн, после чего можно и в Google Play. В августе уже не было такого запала, как в конце весны, к середине сентября я почти переделал всё под MVVM архитектуру… и все…

    С октября по январь я ни разу не открыл Android Studio. Мне совсем не хотелось программировать и вообще как-либо доделывать свой проект. Одним словом, пропал весь энтузиазм. Я начал думать, что на самом деле проект ни о чём, что я не способен сделать достойное приложение. Не знаю из-за чего, наверное я устал и понял, что доводить проект до идеального состояния можно бесконечно.

    Прошел Новый год. Parus’a так и нет в Google Play. Я открыл Android Studio и вдруг почувствовал, что есть силы завершить проект. Я дал себе обещание, что в феврале Parus появится в Play Market. За две недели доделал всё, что планировал, и 4 февраля загрузил проект в Google Play.

    Вот такая история моего первого большого проекта. Да, Parus не идеален, но у меня получилось довести его до законченного состояния. Надеюсь, что он окажется полезным кому-нибудь. Буду рад, если вы скачаете приложение и напишете свои предложения. Особенно, если вы моя целевая аудитория - человек с особыми потребностями или заботитесь о таком человеке.

    Спасибо, что прочитали статью до конца.

    Пока!

    Глеб Беглецов

    Ученик 11 класса, школа “Озерки” 

    г. Санкт-Петербург

    Samsung
    Company

    Comments 15

      0

      По поводу интервальных напоминаний — сам недавно искал такое. Теперь нашел :))
      Правда, уже не нужно, но если что, буду знать)

        0

        Идея универсального приложения для разных категорий людей с особыми потребностями мне видится весьма странной. Видимо, потому таких комбайнов никогда не было, что смысла нет объединять в одном функции, с такой разной целевой аудиторией.
        Правильно было бы выбрать одну целевую группу и реализовать одну функцию по-настоящему удобно и хорошо.

          0
          Все перечисленное подходит как минимум для категории «люди самого старшего возраста». И слух, и зрение, и сердце — все одновременно.
            0
            У меня была такая мысль. Но я предположил, что есть как минимум 1 человек, у которого несколько особых потребностей в коммуникации. А что если он не 1? Поэтому решил сделать такой комбайн, который смог бы помочь и людям с одной, и с несколькими потребностями.
            0
            Не нашел нужных функций для слабовидящих и немно плохо соображающих. Необходима просто цифровая лупа с максимально простым управлением. То есть просто запускается приложение и запускается цифровая лупа работающая с встроенной камерой с увеличением в 10 раз. Если не хватает света включить фонарик. При выходе сворачивании приложения выключить фонарик. Хорошо иметь дискретное переключением увеличения 5-10-20 раз простым касанием. Возможность распознавания и чтения текста. Я понимаю, что обычному слабовидящему можно поднастроить приложения простой камеры. Но если человек боится всяких настроек и немного плохо соображает, то это не вариант.
              0
              Спасибо за комментарий. Я с вами согласен, что на данный момент приложение мало чем может помочь слабовидящим людям, но идея с лупой очень хорошая. Постараюсь добавить в следующем патче.
              +1
              Я до недавних пор был слабовидящим (катаракта обоих глаз), недавно был прооперирован, теперь все хорошо. Хочу поделится своими наблюдениями, и рассказать что я делал чтобы облегчить себе (немного) работу за компьютером, возможно это поможет другим:
              1. Темная тема. Везде где только можно ее включить. Это позволяло немного дольше работать за компьютером. Очень не хватало темной темы на Хабре.
              2. Контрастный курсор. Яркий, зеленого цвета. Так я его мог быстрее найти на экране.
              3. Контрастные шрифты. Как же я намучился на сайтах где написано серым или приглушенным цветом. Буквы просто сливались в однообразную кашу, или я их просто не мог рассмотреть.
              4. Увеличенный шрифт. Там где обычно хватало 10 pt я выставлял 14 pt или 16 pt
              5. Увеличенный масштаб веб-страниц. К счастью с этим не было проблем.
              6. Пониженное разрешение экрана. Я выставлял 1360x768. При таком разрешении еще получалось работать в большинстве приложений, но не всегда. Часто элементы интерфейса просто не помещались на таком экране и сваливались в кучу, или просто невозможно было добраться до некоторых элементов.

                0
                1. почему черная на белом тема вообще почти везде в качестве основной и единственной? Скевоморфизм от бумаги?
                  0
                  Спасибо за комментарий. Советы от пользователей, которых напрямую затрагивала данная тема, очень помогают в разработке.
                  0

                  Для слепых/слабовидящих еще может быть полезным "Be My Eyes" (хорошо ли оно работает, не знаю, я только поискал реализацию подобной идеи — есть).
                  <нытье вкл>
                  Этими дурацкими тачскринами и здоровому-то человеку не очень удобно пользоваться. Особенно в России, в снежную погоду. Для людей с ограниченными возможностями надо начинать и с дизайна телефона тоже.
                  </нытье выкл>

                    0
                    «Be my eyes» интересная вещь, читал про неё весной. Ваш комментарий навлёк меня на мысль. Если в крупных приложениях, специализирующихся на данной задаче, запрос на помощь отсылается многим волонтёрам, то в Parus можно реализовать это за счёт запроса своему помощнику. Спасибо за комментарий и новую идею.
                      0

                      А можно не только помощнику, но и человеку, который этот предмет туда положил (или мама/бабушка/жена отметившая предмет для покупки в магазине).


                      Хотите еще идей? Сине-черная тема по сравнению с просто темной темой позволяет пользователям с дальнозоркостью "отыграть" 1.5 диоптрии и в ряде случаев читать без очков. А для нормально-видящих пользователей можно делать профилактику близорукости и разминку глаз, чередуя черно-красную и черно-синюю темы по таймеру. Хроматизм глаза у всех почти одинаковый, т.к. организму просто его нечем исправить, и в случае поломки просто ничего в этом плане не меняется.

                        0
                        «А можно не только помощнику, но и человеку, который этот предмет туда положил» — можно, но на данный момент невозможно, т.к. к 1 пользователю может подключиться только 1 помощник, у которого появится доступ к данным. Можно подумать над реализацией multi-связей, чтобы у человека с особыми потребностями могло быть несколько помощников, а помощник мог бы переключаться между подопечными.

                        Спасибо за идею. Не знал, что сине-чёрная тема может помочь. В будущем добавлю её вместе с тёмной.
                          0

                          Мне еще переключение в сине-желтую тему помогало, когда случалось посидеть за ЭЛТ-монитором со стертым антибликовым покрытием: с обычной ч/б царапины смешивались с текстом, а с цветами украинского флага они резко отличались от текста.

                    0
                    Мой дедушка слабослышащий. Если я правильно поняла, приложение распознает голос и переводит в текст при простом общении. Но дедушке гораздо актуальнее, чтобы в текст переводилась речь человека при телефонном разговоре, потому что лично он как-то понимает, а вот по телефону говорить с кем-то не может, потому что телефон сильно фонит на слуховой аппарат.
                    В целом идея приложения отличная, но действительно спорно, следует ли все функции объединять в одно приложение. Люди, которым могут понадобиться все функции, как правило пожилые и просто запутаются в навигации. Дедушка не смог освоить даже Whatsapp (думала решить описанную выше проблему тем, что я ему буду писать текстом, а он мне аудиосообщениями). Получилось у него освоить только расписание электричек, где я сохранила ему нужные направления, из которых он может выбрать в 2 клика. Если в приложении можно каким-то образом все настроить, чтобы на виду были только нужные функции, было бы лучше.
                    К сожалению, потестить не удалось, потому что не смогла создать аккаунт почему-то. Поэтому все предложения только исходя из статьи.
                    Удачи с разработкой!

                    Only users with full accounts can post comments. Log in, please.