Введение
Насколько неуютно чувствует себя человек в темной комнате, настолько же сильно он хочет включить свет и избавится от чувства тревоги и беспомощности. Слабовидящие лишены этой возможности, но не менее сильно хотят полнонно жить.
Так появилась идея создания эффективного, простого в использовании, доступного и удобного устройства для слабовидящих. Именно эти качества надо было воплотить в этом проекте. Доступность и простота достигаются за счет использования природоподобной технологии стереозрения, а эффективность и удобство были воплощены благодаря тактильной связи между компьютерной системой и человеком.
Разработка максимально эффективного и дешевого способа предупреждения слабовидящего об опасности является главным приоритетом данного проекта. Вибрационная система предупреждения о столкновении практически не имеет серьезных аналогов.
Проблема
Отсутствие доступного и удобного технического устройства для улучшения ориентирования слабовидящих на местности и в социуме.
На момент создания данного проекта существует ряд решений, способных помочь слабовидящим людям. Такие решения обладают существенными недостатками, которые необходимо решить.
Ведущие мировые проекты очень дороги и недоступны в России (например, Envision Glasses стоят 240 000 рублей), отечественные разработки (система «Говорящий город» и навигатор Oriense (рис. 1-2)) не являются автономными, также являются достаточно дорогими (более 10 000 рублей), из-за чего пенсионеры с плохим зрением далеко не всегда могут купить такие разработки.
Цель
Создать прототип удобного и недорогого технического устройства, помогающего в топографической и социальной ориентации слабовидящих с помощью технологии стереозрения.
Сделать рабочий прототип, в котором будут учтены недостатки аналогичных проектов. Он должен быть дешевле и проще в производстве, за счет использования общедоступных комплектующих.
Выполненная система должна позволять избегать препятствий, быть легкой в производстве и использовании.
Архитектура системы
контроллер Raspberry Pi 3 B+
2 камеры
4 вибромотора
интерфейсы соединения
крепления для удобной эксплуатации
Реализация проекта
Концепция
Прототип состоит из 3 частей: управление вибромоторами, стереозрение и крепления.
Управление вибромоторами
Для управления вибромоторами была разработана электрическая схема (рис. 3) на основе контактов Raspberry Pi 3 B+ и составного транзистора Дарлингтона ULN2803A. По такой схеме можно управлять моторами независимо друг от друга.
В цепи (см. рисунок ниже) присутствует источник питания и транзистор Дарлингтона (2 резистора на 1 и 2700 Ом, диод для стабилизации цепи). Положительный заряд от источника питания идет в транзистор, но ток потечет по сети только если замкнут ключ, то есть подан управляющий сигнал. Именно на внешней частей цепи можно расположить моторы, подключив каждый к своему транзистору или использовав составной транзистор Дарлингтона.
Рисунок 8. Принципиальная схема использования транзистора Дарлингтона
Для программного управления вибромоторами был разработан интерфейс с использованием библиотек: threading, RPi.GPIO. Для независимого управления расчеты происходят в 5 потоках: основной и 4 потока (по числу моторов) для непосредственной подачи питания на контакты.
Функция управления вибромотором (рис. 4) включает и выключает его через определенный промежуток времени, от которого зависит интенсивность вибрации. Используется технология программной ШИМ.
Возможно переключить мотор в один из следующих режимов:
IDLE – опасности нет
LOW – минимальная опасность
MEDIUM – нужно идти осторожно
HIGH – необходимо «поменять курс»
CRITICAL – необходимо немедленно остановиться
Для достижения цели проекта было необходимо понимание технологии стереозрения. Основная идея: сравнивая левое и правое изображение с одинаковых камер и отмечая сдвиг коррелирующих пикселей, можно рассчитать расстояние до предметов в кадре, так как более удаленные предметы будут смещаться меньше.
Так можно получить точную карту глубины (рис.6) (то есть двумерный массив (рис. 5) по размерам исходных изображений, где пикселям соответствует расстояние до него).
Идея данной технологии была заимствована у природы, поэтому такую систему можно назвать природоподобной. Эффект стереозрения можно наблюдать на примере пары глаз человек: если человек закроет один глаз, то не сможет определить размер абстрактного предмета (если не знает его размера сам), мозг будет «получать» 2D изображение. И только наличие второго глаза дает возможность получать трехмерное изображение.
Шаги для создания прототипа:
Создание интерфейса управления камерами
Создание интерфейса управления вибромоторами (описан в разделе Управление вибромоторами)
Создание стереопар для расчета матриц сдвига и поворота
Калибровка камер по отдельности и стереоскопическая калибровка по полученным данным
Подбор параметров для построения карты несоответствия (disparity map)
Расчет карты глубин (depth map)
Обработка полученного массива, исключение крайних значений и перевод полученных данных в одномерный массив
Перевод одномерного массива в режимы управления вибромоторами
Задача этого шага - получить матрицы сдвига, поворота и коэффициенты искажения (distortion coefficients). Это необходимо по двум причинам.
Во-первых, камеры жестко закреплены на штативе относительно друг друга, но не охватывают одну и ту же область, так как допустимы небольшие сдвиги углов, а также дефекты самого крепления.
Во-вторых, из-за широкоугольности выбранных камер (самый широкий угол обзора из общедоступных веб-камер на рынке – 120 градусов) по краям изображения возможны аберрации из-за сильного дефектов оптики.
Во время реализации удалось достичь достаточной точности (рис. 7) для функционирования проекта
На этом шаге использовались 2 скрипта: 2_chess_cycle.py для записи стереопар и 4_calibration_fisheye.py для проведения и сохранения расчетов.
Задача этого шага – настроить генератор построения карты несоответствия через подбор параметров (рис. 8, 9).
Низкая точность в исправлении изображений и построения карты связаны с недостаточной калибровкой системы, работа над этим активно ведется. Но даже коэффициент неточности калибровки RMS=1.22 может дать вполне конкретные данные после должной фильтрации и обработки.
В этом шаге использовался скрипт 5_dm_tune.py
Строго говоря, карта несоответствия еще не дает информацию о фактической дальности объекта съемки, а лишь выдает нормализованные значения (от 0 до 1), которые можно затем конвертировать в конкретные длины, то есть в метры. Для этой операции использовался метод библиотеки OpenCV cv2.convertScaleAbs.
Глядя на карту несоответствий (см. рис. 9) можно усомниться в возможности ее эффективного использования. Но эти опасения напрасны, так как, используя продуманный алгоритм обработки массива, можно учесть только «полезные» данные.
Поскольку проект ориентирован на слабовидящих людей, приоритетом определения является область головы и выше, поэтому массив делится примерно пополам и в расчетах используется его «верхняя часть».
Таким образом, из двумерного массива по размерам изображения получается вполне небольшой массив с точными значениями дальности.
Последним действием в этом шаге является нахождение максимального значения в каждой колонке преобразованного массива. Это и есть данные с виртуального лидара (рис. 10).
Каждое значение проходит проверку на принадлежность промежуткам значений для каждого режима.
Полученный режим отправляется в программный интерфейс управления вибромоторами.
Внешний вид прототипа
После завершения основной реализации было принято решение собрать первый прототип (рис. 11-13)
Крепления
На козырьке кепки установлен штатив для камер, контроллер закреплен на поясе, все кабели и провода закреплены по внутренней стороне кепки и через затылок уходят единым шлейфом вдоль позвоночника к контроллеру.
На поясе с магнитной застежкой будут закреплены пластмассовые блоки с вибромоторами (принцип крепления как у чехла для ножа) и 2 аккумулятора: основной для контроллера и дополнительный для вибромоторов.
Выводы. Оценка результата и перспективы
При дальнейшем развитии проекта планируется интегрировать распознавание текста, предметов быта, светофоров, пешеходных переходов. Также есть идея разработки универсального ООП интерфейса для быстрого добавления готовой нейросети распознавания. Это позволит сторонним разработчикам и энтузиастам внести свой вклад в данный проект.
В результате сборки и тестирования прототипа была получена достаточная точность для автономной ориентации на улице и в помещении при стандартных условиях эксплуатации. Ожидаемо сохранилась необходимость использования дополнительных средств: белой трости и/или собаки-поводыря.
Таким образом, команде проекта удалось достичь поставленной цели и создать прототип, соответствующий установленным требованиям. На основе сравнения с рыночными аналогами можно утверждать, что созданное решение потенциально является один из самых эффективных и доступных.
Хотя слепые и не могут увидеть свет лампочки, но будут обладать возможностью найти черную кошку в темной комнате, если она там есть, конечно.
Файлы проекта и дополнительные материалы
Все скрипты, которые были использованы в разработке, упоминались в описании или используются в финальной версии прототипа находятся на сервисе GitHub по ссылке: https://github.com/MrEmgin/TouchAndGo.git
Видео демонстрации и фотографии прототипа можно найти на Google Drive по ссылке: https://drive.google.com/drive/folders/17gvB0FWneGF20jHTbuaNm_CS5rW3mJpq?usp=sharing
Благодарность
Выражаю благодарность своему научному руководителю Жемчужникову Дмитрию Григорьевичу за ценные советы при реализации проекта и рекомендации по оформлению работы.
Приложение
Рисунки и материалы, упоминаемые в проекте.
Рисунок 1. Многофункциональный навигатор Oriense
Рисунок 2. Камера для навигатора Oriense
Рисунок 3. Электрическая схема управления вибромоторами
Рисунок 4. Функция управления вибромотором
Рисунок 5. Откалиброванная стереопара
Рисунок 6. Визуализация полученного массива
Рисунок 7. Результаты калибровки
Рисунок 8. Построение disparity map до настройки параметров
Рисунок 9. Построение disparity map после настройки параметров
Рисунок 10. Визуализация данных виртуального лидара
Рисунок 11. Две 2 камеры на временном штативе (справа). От каждой камеры разъем USB подключены к контроллеру (слева)
Рисунок 12. К контроллеру подключены 2 разъема USB, контакты для управления вибромоторами и micro USB кабель питания
Рисунок 13. Сборка электрической схемы на макетной плате. Слева видно расположение вибромоторов на ремне с магнитной застежкой
Список источников
https://invaworld.ru/invalidnost-po-zreniyu-i-elektronnye-ochki/ [Электронный ресурс] (дата обр.: 30.01.2021) - информация об аналогах проекта
https://habr.com/ru/post/130300/ [Электронный ресурс] (дата обр.: 30.01.2021) - Основы стереозрения, математические приниципы
https://github.com/realizator/stereopi-fisheye-robot [Электронный ресурс] (дата обр.: 30.01.2021) - похожий проект, но для другого аппаратного обеспечения, использовался код
https://www.raspberrypi.org/forums/viewtopic.php?t=219039 [Электронный ресурс] (дата обр.: 30.01.2021) - часть электрической схемы для управления вибромоторами
https://moluch.ru/archive/118/32662/ [Электронный ресурс] (дата обр.: 30.01.2021) - математическая структура и последовательность обработки стереопары
http://oriense.ru/ [Электронный ресурс] (дата обр.: 30.01.2021) - Oriense официальный сайт описанного аналога проекта
https://youtu.be/V2hEv_7RBnk [Электронный ресурс] (дата обр.: 30.01.2021) - репортаж о проекте Oriense
https://youtu.be/Q2HFr8xuzBo [Электронный ресурс] (дата обр.: 30.01.2021) - пример работы устройства Oriense
https://www.speakingcity.org/ [Электронный ресурс] (дата обр.: 30.01.2021) - официальный сайт описанного аналога проекта
https://falstad.com/circuit/circuitjs.html [Электронный ресурс] (дата обр.: 30.01.2021) - онлайн симулятор поведения электрической цепи
https://www.lacrossetechnology.ru/119262-vodonepronitsaemaya-mini-kamera-hd-1080r-sq12.html?utm_source=market&utm_term=119262&ymclid=16076689930520681833900001 [Электронный ресурс] (дата обр.: 30.01.2021) - аналоговая камера (для первого варианта аппаратного обеспечения проекта)
http://tec.org.ru/_bd/2/248_ULN2803-motorol.pdf [Электронный ресурс] (дата обр.: 30.01.2021) - документация по составному транзистору Дарлингтона ULN2803A
http://tec.org.ru/board/kommutatory_kljuchi/288-1-0-248 [Электронный ресурс] (дата обр.: 30.01.2021) - принципиальная схема и пример использования составного транзистора Дарлингтона ULN2803A
https://yandex.ru/turbo/org-info.mobi/s/manual/sq12-ru.htm [Электронный ресурс] (дата обр.: 30.01.2021) - документация для аналоговой камеры (для первого варианта аппаратного обеспечения проекта)
https://github.com/LearnTechWithUs/Stereo-Vision/blob/master/Main_Stereo_Vision_Prog.py [Электронный ресурс] (дата обр.: 30.01.2021) - использование методов ректификации из Python библиотеки python-opencv
https://huningxin.github.io/opencv_docs/da/d54/group__imgproc__transform.html#ga7dfb72c9cf9780a347fbe3d1c47e5d5a[Электронный ресурс] (дата обр.: 30.01.2021) - математическое объяснения алгоритма генерации карты ректификации (rectification map)
https://waksoft.susu.ru/2020/02/29/kalibrovka-kamery-s-ispolzovaniem-s-opencv/ [Электронный ресурс] (дата обр.: 30.01.2021) - общие знания о калибровке камер
https://stereopi.com/anycase [Электронный ресурс] (дата обр.: 30.01.2021) - информация о возможном расстоянии между оптическими центрами камер
https:/stereopi.com/ [Электронный ресурс] (дата обр.: 30.01.2021) - сайт специального контроллера для стереозрения (контроллер создан на базе Raspberry Pi 4 Compute Module)
https://towardsdatascience.com/object-distance-measurement-by-stereo-vision-37897a7ecb62 [Электронный ресурс] (дата обр.: 30.01.2021) - математические формулы для теоретического применения стереозрения
https://arxiv.org/pdf/1902.03471.pdf [Электронный ресурс] (дата обр.: 30.01.2021) - научная статья с простейшим алгоритмом нахождения сдвига коррелирующих пикселей
https://www.hindawi.com/journals/tswj/2017/4583434/ [Электронный ресурс] (дата обр.: 30.01.2021) - научная статья с методами постобработки карты глубин (depth map) для повышения точности определения дальности
https://albertarmea.com/post/opencv-stereo-camera/ [Электронный ресурс] (дата обр.: 30.01.2021) - описание реализации базовой системы стереозрения
https://www.1tv.ru/news/2014-09-16/33216-unikalnaya_razrabotka_rossiyskih_uchyonyh_elektronnoe_zrenie_dlya_teh_kto_ne_vidit [Электронный ресурс] (дата обр.: 30.01.2021) - исследования отечественных аналогов
https://youtu.be/K-TtRc-biyo [Электронный ресурс] (дата обр.: 30.01.2021) - анализ рынка
https://vashumnyidom.ru/upravlenie/ustrojstva/gpio-raspberry-pi-3.html [Электронный ресурс] (дата обр.: 30.01.2021) - основы работы с GPIO (general purpose input-output)
https://raspberrypi.ru/43-gpio-dlya-chaynikov-chast-1 [Электронный ресурс] (дата обр.: 30.01.2021) - основы работы с GPIO
https://docs.opencv.org/master/ [Электронный ресурс] (дата обр.: 30.01.2021) - документация Python библиотеки python-opencv
https://numpy.org/doc/stable/ [Электронный ресурс] (дата обр.: 30.01.2021) - документация и базовые знания о Python библиотеки numpy
https://matplotlib.org/ [Электронный ресурс] (дата обр.: 30.01.2021) - документация и примеры применения Python библиотеки matplotlib
https://www.speakingcity.org/ [Электронный ресурс] (дата обр.: 30.01.2021) - «Говорящий город» - аналог данного проекта
https://youtu.be/9ehENnq2EFo [Электронный ресурс] (дата обр.: 30.01.2021) - презентация системы Envision Glasses
https://mysku.ru/blog/china-stores/34501.html [Электронный ресурс] (дата обр.: 30.01.2021) - Easier Cap, неофициальный сайт с информацией о плате захвата
Аннотация
[за пределами основного текста работы]
Слабовидящие люди не могут вести полноценную жизнь и адаптироваться к окружающему миру. Для решения этой проблемы созданы проекты, но они несовершенны. Существует потребность в дешевой, простой и эффективной системе для предупреждения слепого о препятствиях на пути.
При реализации данного проекта была использована природоподобная технология стереозрения. При приближении слепого к препятствию система определяет дальность до предмета по кадрам с двух камер, преобразует значения дальности в интенсивность вибрации и запускает раздельно 4 вибромотора. Это позволяет уверенно ориентироваться в пространстве даже в незнакомых местах.
Таким образом, 2 веб-камеры отправляли изображения на контроллер Raspberry Pi 3 B+, где по ним рассчитывалась карта глубины (с использованием данных откалиброванной системы). Затем через GPIO контроллер отправляет управляющий сигнал на электрическую схему, включая вибромоторы с определенной силой. По вибрации пользователь может ориентироваться в пространстве.
В ходе работы над проектом многие проблемы аналогов были решены. Это было достигнуто благодаря использованию технологии стереозрения и созданию связи человека и компьютера, основанной на вибрации. Такой нейроинтерфейс позволяет интуитивно ориентироваться в пространстве по интенсивности зональной вибрации на поясе. Удалось достичь точности, достаточной для эффективного взаимодействия человека и компьютера.
В дальнейшем планируется расширить функционал системы, интегрировать распознавание объектов, реализовать единый интерфейс добавления дополнительных функций для сторонней разработки.