Программа 3d сканирования для андроид. Не сканером единым живы

Представляю вниманию DIY сканер на базе Android смартфона.

При проектировании и создании сканера, в первую очередь, интересовало сканирование крупных объектов. Минимум – фигура человека в полный рост с точность – хотя бы 1-2 мм.

Данные критерии успешно достигнуты. Успешно сканируются объекты при естественном освещении (без прямого солнечного света). Поле сканирования определяется углом захвата камеры смартфона и расстоянием, на котором лазерный луч сохраняет достаточную для детектирования яркость (днем в помещении). Это фигура человека в полный рост (1.8 метров) с шириной захвата в 1.2 метров.

Сканер был сделан из соображений «а не сделать ли что ни будь более или менее полезное и интересное, когда заняться нечем». Все иллюстрации – на примере «тестового» объекта (выкладывать сканы людей не корректно).

Как показал опыт, для сканера такого типа ПО - это вторично и на него было потрачено меньше всего времени (на окончательный вариант. Не считая эксперименты и тупиковые варианты). Поэтому в статье особенностей ПО касаться не буду (Ссылка на исходные коды в конце статьи.)

Цель статьи – рассказать о тупиковых ветках и проблемах, собранных на пути к созданию окончательной рабочей версии.

Для сканера в окончательной версии используется:

  1. Телефон Samsung S5
  2. Красный и зеленый лазеры с линзой для линии (90 градусов линия) на 30 мВт со стеклянной оптикой (не самые дешевые).
  3. Шаговые двигатели 35BYGHM302-06LA 0.3A, 0.9°
  4. Драйверы шаговых двигателей A4988
  5. Bluetooth модуль HC-05
  6. Плата STM32F103C8t
Драйверы A4988, выставлены на half step, что с редуктором 15->120 дает 400*2*8 шагов на PI.

Выбор технологии сканирования.

Были рассмотрены следующие различные варианты.

LED Проектор.

Вариант был рассмотрен и просчитан. Даже дорогие проекторы не обладают нужным разрешением для достижения необходимой точности. А про дешевые даже говорить смысла нет.

Механическая развертка лазерного луча в сочетании с дифракционной решеткой.

Идея была проверена и сочтена годной. Но не для DIY исполнения, по причинам:
  1. Нужен достаточно мощный лазер, что бы после дифракции, метки были достаточно яркими (расстояние до объектива смартфона 1..2 метра). А глаза жалко. Лазер-точка уже с 30мВт не полезен.
  2. Требования к точности механической развертки в 2-х плоскостях – слишком высокие для DIY исполнения.

Стандартная механическая развертка лазер-линии на неподвижный объект сканирования.

В конечном итоге был выбран вариант с двумя лазерами разного цвета

  1. Разные цвета лазеров позволяют независимо детектировать их на одном кадре.
  2. Расположение лазеров по разные стороны камеры позволяет за один проход получить два скана.
  3. Два скана за раз позволяет объективно оценить качество юстировки сканера (сканы должны сойтись и наложиться друг на друга).
Как оказалось, последний критерий самый важный. Качество скана целиком определяется точностью измерения геометрических размеров и углов сканера. А наличие двух сканов от двух лазеров позволяет сразу оценить качество сканирования:
Облака точек сошлись. Т.е. плоскости захваченные двумя лазерами сошлись на всей поверхности.

Неудачный вариант механической части на 28BYJ-48.


Хотя с самого начала предполагал, что это тупиковый вариант, не обеспечивающий необходимой точности, я все равно его проверил c различными ухищрениями:
  1. Ось мотора зафиксирована подшипником.
  2. Добавлен элемент трения и стопор для выборки люфта редуктора.
  3. Попытка определения «точной позиции» фототранзистором, по засветке лазером
Повторяемость возврата на то же место линии лазера оказалась низка – 2-3 мм на дистанции 1.5 метра. При работе редуктора, несмотря на кажущуюся плавность, заметны рывки в 1-3 мм на расстоянии 1.5 метра.

Т.е. 28BYJ-48 полностью не подходит для более или менее точного сканера крупных объектов.

Требования к развертке, исходя из моего опыта

Обязательным элементом развертки должен быть редуктор.

Не стоит заблуждаться насчет режима 1/x шагов. Опыты показали, что в режиме 1/16 на A4988 микро шаги не равномерные. И на 1/8 эта неравномерность заметна на глаз.

Самым оптимальным решением для редуктора оказалось использование ременной зубчатой передачи. Хотя она получилась довольно громоздкой, но простой в создании и точной.
Точность позиционирования (точнее повторяемость позиционирования начальной положения лазеров для сканирования) лазеров оказалась около 0.5 mm для 5 мм ширины лазерной линии на 4 метра расстояния. Т.е. на расстоянии сканирования (1.2-1.8 метра) это вообще затруднительно измерить.

Позиционирование – оптроны (китайский noname) на прорези в диске под лазерами.

Проблемы с передачей управляющих сигналов с телефона на модуль управления лазерами и шаговыми двигателями

Узким местом, с точки зрения скорости сканирования оказался управляющий канал. Поскольку это была DIY неторопливая разработка в собственное удовольствие, то были перепробованы все способы коммуникации со смартфоном.

Передача управляющих сигналов через Audio jack (phone Audio jack=> oscilloscope)

Самый тормозной способ для передачи данных в реальном времени. Да еще с плавающим временем. До 500 ms (!) от программной активации передачи аудио данных до фактического появления сигнала в Audio jack.

Эта экзотика была проверена, поскольку, по работе приходилось иметь дело с мобильными ридерами чиповых карт.

Фотодиоды на экране смартфона (кусочек экрана телефона=>фототранзисторы+ STM32F103)

Был ради интереса опробован даже такой экзотический способ, как фототранзисторы матрицей 2x2 в виде прищепки на экран.

Хотя этот способ выдачи информации с телефона оказался самым быстрым, но не настолько принципиально быстрее (10 ms vs 50ms) чем Bluetooth, что бы мирится с его недостатками (прищепка на экран).

IR канал (phone=>TSOP1736->STM32F103)

Практически проверен и способ передачи через IR канал. Даже некую реализацию протокола передачи данных пришлось сделать.

Но IR так же оказался не очень удобен (фотодатчик крепить на телефоне неудобно), и не слишком быстрее чем Bluetooth.

WiFi модуль (phone=>ESP8266-RS232->STM32F103)

Результаты проверки этого модуля оказались совершенно обескураживающими. Время выполнения запрос-ответ (эхо) оказалась непредсказуемо плавающим в диапазоне 20-300 ms (в среднем 150 ms). Почему и что – разбираться не стал. Наткнулся только на статью где рассказывалось о неудачной попытке использовать ESP8266 для обмена данными в режиме реального времени с жесткими требованиями по времени запроса/ответа.

Т.е. ESP8266 со «стандартной» прошивкой TCP -> RS232 не годится для подобных целей.

Выбранный вариант управляющего модуля и передачи сигналов

В конечном итоге, после всех экспериментов, был выбран Bluetooth (HC-05 модуль) канал. Дает стабильное (а это самое главное) время передачи данных запрос-ответ в 40ms.

Время довольно большое и сильно влияет на время сканирования (половина от всего времени).
Но лучшего варианта добиться не удалось.

В качестве управляющего модуля широко распространенная плата c SM32F103C8T.

Методы детектирования линии на кадре.

Самый простой способ выделить линии лазере на кадре – это использовать вычитание кадра с выключенным лазером и кадра с лазером.

В принципе, работает и поиск по кадру без вычитания. Но работает значительно хуже при дневном освещении. Хотя и этот режим был оставлен в ПО ради сравнительных тестов (фото режима ниже. Все остальные фотографии с режимом вычитания кадров).


Практическая ценность варианта без вычитания кадров оказалась низка.

Возможно и можно извлечь сигнал лазера из этой зашумленной информации. Однако возится не стал.

Вариант с вычитанием кадров работает хорошо.

Всякие эксперименты с попытками аппроксимации линии и обработкой всего кадра показали, что чем сложнее алгоритм, чем чаще он «ошибается» да еще и тормозит обработку «на лету». Самым быстрым (и простым) оказался алгоритм поиска лазера (лазерной точки) на горизонтальной линии:

  • Для каждой точки линии считается сумма квадратов уровня цвета лазера (RGB) в окне, указанного в конфигурации (13 px – экспериментально оптимальная величина для окна)
  • Точка лазера – середина окна с максимальным значением сумм уровней «цвета».
Время на обработку одного кадра поиском «зеленой» и «красной линии» - 3ms.

Облака точек для красного и зеленого лазера считаются отдельно. При правильной механической юстировке сводятся с точностью < 1 мм.

Точность и юстировка

Точность оказалась в пределах 1 мм на расстоянии 1.2 метров. По большей части обусловлена разрешением камеры телефона (1920x1080) и шириной луча лазера.

Очень важным для получения корректных сканов провести настройку статическую и динамическую. Точность/не точность настройки хорошо заметна при загрузке обоих облаков точек в MeshLab. В идеале облака точке должны сойтись, дополняя друг друга.

Статически параметры, выставляются максимально точно один раз:

  1. Тангенс угла поля зрения камеры.
  2. Длинна «плеч» лазеров (от центра объектива до оси вращения).
Ну и конечно же максимальная фокусировка линз лазеров на заданное расстояние сканирования и «вертикальность» линий лазера.

Динамический параметр фактического угла позиции лазеров относительно виртуальной плоскости кадра приходится подстраивать каждый раз заново при смешении телефона в креплении. Для этого сделан режим настройки в ПО. Сведением в центр экрана лазеров и подстройкой величины угла необходимо выставить расчетное расстояние максимально близко к истинному (измеренному) расстоянию для обоих лазеров.

Друзья, небольшое вступление!
Перед прочтением новости, позвольте пригласить вас в крупнейшее сообщество владельцев 3D-принтеров. Да, да, оно уже существует, на страницах нашего проекта!

С появлением первых 2D-сканеров, в 90-х, многие люди получили возможность копировать свои документы, не выходя из дома, что было весьма комфортно. Они также позволили нам быстро оцифровывать различные документы и изображения в любой момент, дав нам возможность мгновенно создавать резервные копии документов на жестком диске своего компьютера, а впоследствии и в облачном пространстве.

И вот, спустя пару десятилетий, 3D-технология, в сущности, стала тем же, чем была 2D-технология в 90-е годы. Единственная разница между ними заключается в том, что ныне технологии развиваются в разы быстрее, нежели два десятка лет тому назад. И вот, слияние нескольких экспоненциально растущих технологий, делают нашу жизнь намного проще, а деятельность эффективнее. На сегодняшний день, вам придется потратить от пары сотен до пары тысяч долларов, чтобы приобрести 3D-сканер в магазине. Такие сканеры используются для оцифровки физических объектов и создания их копий посредствам 3D-принтера, если того пожелает пользователь. Недостаток практических применений, и весьма высокая цена, достаточно серьезно замедлили развитие рынка этих изделий.

Тем не менее, одна компания, все же пытается это изменить. Основанная в ноябре 2013-го года, компания Replica Labs, вела закулисную деятельность по разработке своего приложения под названием Rendor, которое превратит камеру любого смартфона в полноценный 3D-сканер.


«Мы демократизируем 3D-сканирование… без дополнительного оборудования… мы снизили цену на эту технологию до 0$ для всех владельцев смартфонов с доступом к интернету», сказал Исаак Робертс из компании Replica Labs.

В этом приложении будет пять основных шагов, чтобы начать сканирование:

  1. Скачать приложение Rendor, с сайта компании и распечатать сетку для сканирования (которую также можно скачать с их сайта).
  2. Поместить сканируемый объект на сетку.
  3. Открыть приложение Rendor, нажать кнопку «сканировать» и заснять объект на видео с как можно большего количества углов.
  4. После завершения сканирования, нажать кнопку «завершить», и отправить скан на облачный сервер приложения, для дальнейшей обработки.
  5. Получить готовую 3D-модель на свою электронную почту, в течение одной минуты.

Приложение будет бесплатным для загрузки и использования, но, тем не менее, компания должна будет покрыть свои расходы. Поэтому, они планируют встроить некоторые ограничения, которые смогут быть сняты за определенную плату.


«Rendor станет бесплатным мобильным приложением для смартфонов, поддерживающих операционные системы Android и iOS», сказал Робертс. «Мы надеемся, что мы сможем дать каждому несколько бесплатных сканирований, 3-5 в месяц, я думаю. Как только пользователь исчерпает лимит своих сканов, ему будет предложено два варианта действий, чтобы делать сканирования еще: поделится приложением с друзьями, или заплатить за дальнейшее использование. Пока что мы не совсем уверены в том, какую цену нам стоит запрашивать, но на данный момент, мы считаем, что она будет составлять 12$-25$ в год».

Оплата приложения, скорее всего, даст возможность к неограниченному количеству сканов. Роберст рассказал, что возможно, они введут два тарифных плана, один из которых будет позволять делать сканы с более высоким разрешением. Такой тарифный план будет стоить несколько больше, чем 12$-25$ в год.

Сама же технология, используемая для реализации работы приложения Rendor весьма сложна.


«Правительство вложило очень много средств в компанию Robotic Vision. И после того, как наши соучредители Винс и Брэндом, увидели работу ее продукции в их лабораториях, они поняли, что большинству их технологий найдется множество коммерческих применений, и по правде говоря, я солидарен с ними. Все, начиная от одежды и заканчивая зубными щетками, подлежит революции, и мы считаем, что технологии 3D-печати и 3D-сканирования, это то, что запустит новую волну индустриального переворота и совершит следующую индустриальную революцию».

В настоящее время Render находится на стадии закрытого альфа-тестирования, и компания собирается запустить следующий этап теста 4-го июля. В ближайшую неделю, они панируют продемонстрировать работу своей разработки, чтобы вызвать к ней общественный интерес. В добавок, в конце этого месяца, они отправятся в Силиконовую Долину, для сотрудничества с бизнес-ускорителем PlugandPlay . Для начала, они планируют запустить приложение на Android, и немного позже сделать его доступным для владельцев iOS. Также планируется запустить проект на Kickstarter к середине августа нынешнего года. Все желающие протестировать функционал этого приложения, могут зарегистрироваться на их сайте и их стать бета-тестерами.

Разумеется, оплачивать платную подписку я не стал, поэтому из интересного в бесплатной версии – это возможность выбрать то, что сканируем: карту, документы, удостоверение или QR-код.

По сути этот тот же выбор формата, только более гибкий. Например, для паспорта предусмотрена сетка, имитирующая его разворот. Это же касается и банковской карты. Для QR-кода есть соответствующая схема.

Присутствует режим пакетного сканирования, а также настройка камеры: сетка, настройка камеры, выбор режима и прочее.

Сам процесс сканирования довольно прост – мы фотографируем, хотя мне показалось, что автофокусировка в данном случае работала шустрее. Какой-либо постобработки изображения нет, ведь она происходит в самом начале.

Оценка нагрузки на систему

Потребляет этот многофункциональный сканер на удивление мало – 87 Мбайт ОЗУ, 3.5% на процессоре. Аккумулятор проседает на 13% со средним энергопотреблением в 12 мВт. Неплохой показатель, согласитесь.

Приложение выборочно к версии Android, весит в системе 73 Мбайт, не содержит рекламы, но предполагает платную подписку.

Разрешений немного, и они все по делу. Вирусов старина Dr.Web не обнаружил.

А оно надо?

Как и говорилось ранее, платная версия необходима больше бизнес-среде, остальным хватит и бесплатной. В этом случае перед нами нечто среднее между Adobe Scan и Tiny Scanner. Особенно порадовали более подробные настройки, малая нагрузка на систему и предобработка скана.

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

Общая оценка: 5.0 по пятибалльной шкале.
Оценка функциональности: 5.0 по пятибалльной шкале.

Не сканером единым живы

Наконец-то у лидера прошлого обзора – Tiny Scanner – появился достойный конкурент в виде CamScanner. Это разностороннее приложение, которое позволяет делать со сканами все, что угодно, и обеспечивает своеобразный сейф для документов. Конечно, сработает он не во всех инстанциях, но поможет здорово, если вы забыли дома визитку или бланк заявления.

Сводное сравнение Adobe Scan, Tiny Scanner и CamScanner

Функциональность Adobe Scan Tiny Scanner CamScanner
Оценка автора 4.5 5.0 5.0
Интерфейс Русский, однооконный Русский, одноконный Русский, одно окно с сайдбаром слева
Возможность самостоятельной настройки Необходимый минимум Все необходимое Все необходимое
Общая эффективность Хорошо Отлично Отлично
Удобство управления Отлично Отлично Отлично
30% / 75 Мбайт 1.5% / 61 Мбайт 3.5% / 87 Мбайт
Размер после установки 65 Мбайт 70 Мбайт 73 Мбайт
Максимальный расход аккумулятора / энергопотребление 40% / 100 мВт 5% / 5 мВт 13% / 12 мВт
Использование GPS-модуля Нет Нет Нет
Трафик На облако Облако/ftp Фирменное облако
Необходимость в root Нет Нет Нет
Реклама Нет Нет Нет

О Tiny Scanner сказано уже достаточно, благо со временем он практически не изменился и не стал меркантильным. Перед нами по-прежнему отличный инструмент для всех категорий пользователей и смартфонов.

Сводное сравнение характеристик Adobe Scan, Tiny Scanner и CamScanner

Функциональность Adobe Scan Tiny Scanner CamScanner
Оценка автора 5.0 5.0 5.0
Адаптация к низкому разрешению камеры Плохо Отлично Отлично
Возможность выбрать формат листа Нет Да Да
Постобработка изображения Хорошо Отлично Отлично
Выправление разворота Да Нет Нет
Автопоиск документа Да Нет Нет
Работа с облаком Да Да Да
Страница в Google Play

Различают два вида приборов для трехмерного сканирования – контактные и бесконтактные. Профессиональное оборудование стоит десятки тысяч долларов, поэтому многие пользователи используют смартфоны и цифровые камеры для объемного сканирования. Производители телефонных аппаратов обратили внимание на тренд и решили не оставаться в стороне. На рынке существует сразу несколько телефонов, которым под силу заменить настоящий 3D сканер. Вскоре появятся новые. Кроме того, «сканер» можно сделать самостоятельно. А теперь подробнее обо всем.

Смартфон со встроенным 3D сканером

Sony XZ1

Южнокорейская компания SONY предлагает смартфон Xperia XZ1. Телефон позиционируется, как карманный бесконтактный сканер. Он легко справляется со сканированием лиц и небольших непрозрачных предметов. Для активации режима используется приложение 3D Creator. Отсканированные объекты автоматически преобразовываются в трехмерные модели, которыми можно делиться с друзьями, дорабатывать в CAD-системах либо отправлять на печать без внесения корректировок.

iPhone X

Детище Apple оснащено инфракрасным трансмиттером, который проецирует тысячи микроточек на исследуемый объект. Отражаясь, инфракрасное излучение улавливается встроенным в смартфон ресивером. Устройство формирует 3D модель, измерив дистанцию между каждой точкой и излучателем. Моделирование происходит в режиме реального времени и даже в условиях выключенного света. В компании не сообщили, планируется ли оригинальное ПО для создания графических моделей.

Samsung S9

Флагманские смартфоны Galaxy S9 и Note9 получат сенсоры для 3D сканирования. Инфракрасные датчики будут размещаться рядом с селфи-камерой. Ожидается, что производитель выпустит фирменное приложение для моделирования.

Lenovo PHAB2 Pro

Девайс больше года на рынке, но до сих пор остается желанным экземпляром среди поклонников 3D печати. Встроенный 3D сканер делает 250 тысяч замеров в секунду. Устройство работает на платформе Project Tango. Вот как это происходит:

Intel RealSense Smartphone Developer Kit

Аппарат разработан специально для 3D моделирования. Его оснастили уникальным модулем ZR300: цветная камера, две инфракрасные камеры, инфракрасный лазерный проектор, короткофокусная камера с широкоугольным объективом.

Устройство ежесекундно высчитывает расстояние до 10 миллионов точек, формируя максимально точную информацию о глубине сканируемого пространства. 3D рендеринг осуществляется прямо в телефоне.

Как превратить смартфон в 3D сканер

Используя технологию пассивного 3D сканирования, можно «прокачать» обычный смартфон либо присоединить 3D сенсор. Рассмотрим оба варианта.

Компания Scandy предлагаем ToF-сенсор Scandy Pro. Для нормальной работы прибора необходимо одноименное приложение. 3D сенсор распознает детали размером до 25 сантиметров. Сканирование осуществляется с точностью до 0,3 мм. Готовые модели могут обрабатываться в CAD-программах, а также отправляться напрямую на печать.

Доверяете возможностям встроенной камеры? Отлично, тогда опробуйте бесплатное приложение Qlone. Компания-разработчик EyeCue Vision Technologies предлагает установить на смартфон программу и докупить специальный коврик, на поверхность которого нанесена черно-белая сеточная разметка (приспособление можно изготовить самостоятельно с помощью 3D принтера).

Объект сканирования надо разместить на подложке, после чего запустить приложение. Модель можно сохранить в формате: PLY, OBJ, STL, X3D.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: