Как стать автором
Обновить

Камеры глубины — тихая революция (когда роботы будут видеть) Часть 2

Время на прочтение 15 мин
Количество просмотров 33K


В первой части этого текста мы рассмотрели камеры глубины на основе структурного света и измерения round-trip задержки света, в которых в основном применяется инфракрасная подсветка. Они отлично работают в помещениях на расстояниях от 10 сантиметров до 10 метров, а главное — весьма дешевы. Отсюда массовая волна их текущего применения в смартфонах. Но… Как только мы выходим на улицу, солнце даже сквозь облака засвечивает инфракрасную подсветку и их работа резко ухудшается. 

Как говорит Стив Бланк (по другому поводу, впрочем): «Хотите успеха — выходите из здания». Ниже речь пойдет про камеры глубины, работающие вне помещений. Сегодня эту тему сильно двигают автономные автомобили, но, как мы увидим, не только.


Источник: Innoviz Envisions Mass Produced Self-Driving Cars With Solid State LiDAR

Итак, камеры глубины, т.е. устройства снимающие видео, в каждом пикселе которого расстояние до объекта сцены, работающие при солнечном свете!

Кому интересно — добро пожаловать под кат!

Начнем с вечной классики…

Способ 3: Depth from Stereo камеры+


Построение карты глубины из стерео хорошо известно и применяется уже больше 40 лет. Ниже пример компактной камеры за 450$, которая может использоваться для управления жестами, вместе с профессиональной съемкой или с VR-шлемами:


Источник 

Главное достоинство подобных камер — солнечный свет им не только не мешает, но и наоборот, делает их результаты лучше, как следствие — активное применение таких камер для всевозможных уличных кейсов, например, вот великолепный пример как за пару минут снимают трехмерную модель старого форта:


Пример уличного использования ZED камеры

Заметные деньги в перевод построения глубины из стерео на новый уровень влила, конечно, тема автономных автомобилей. Из 5 рассматриваемых способов построения видео глубины только двум — этому и следующему (стерео и пленоптике) не мешает солнце и не создают помех соседние автомобили. При этом пленоптика в разы дороже и менее точна на больших дистанциях. Сложиться дальше может по-всякому, прогнозы строить сложно, но в данном случае стоит согласиться с Илоном Маском — у стерео из всех 5 способов самые лучшие перспективы. И текущие результаты весьма радуют:


Источник: Large-Scale Direct SLAM with Stereo Cameras

Но интересно, что, похоже, еще более сильное влияние на развитие темы построения глубины из стерео окажут не беспилотные автомобили (коих выпускается пока немного), а гораздо более массовые устройства, где уже сейчас строится карта глубины по стерео, а именно… Правильно! Смартфоны!

Года три назад пошел просто бум «двуглазых» смартфонов, в каковом отметились буквально все бренды, ибо качество фотографий, сделанных с одной камерой, и качество фотографий, сделанных с двумя отличалось кардинально, а с точки зрения повышения цены смартфона это было не столь существенно: 



Более того, в прошлом году процесс активно пошел еще дальше: «У вас в смартфоне 2 камеры? Отстой! У меня три четыре!!!»:


Источник: Samsung Galaxy A8 & A9

Шестиглазые будущие Sony упоминались в первой части. В общем — многоглазые смартфоны вполне себе набирают популярность у производителей.

Фундаментальные причины этого явления просты:

  • Разрешение камер телефонов растет, а размер объектива мал. В итоге, несмотря на многочисленные ухищрения, растет уровень шумов и падает качество, особенно при съемках в темноте.
  • При этом на второй камере мы можем снять так называемый фильтр Байера с матрицы, т.е. одна камера у нас будет черно-белой, а вторая цветной. Это увеличивает на черно-белой чувствительность примерно в 3 раза. Т.е. чувствительность 2-х камер вырастает условно не в 2, а в 4 раза (!). Там есть многочисленные нюансы, но такой рост чувствительности реально хорошо видно на глаз. 
  • Помимо прочего — при появлении стереопары у нас появляется возможность программным образом менять глубину резкости, т.е. размывать фон, от чего многие фотографии заметно выигрывают (про это мы писали во второй половине тут). Эта опция новых моделей смартфонов быстро стала крайне популярной.
  • При увеличении числа камер также появляется возможность использовать другие объективы — более широкоугольные (короткофокусные), и, наоборот, длиннофокусные, которые позволяют заметно повысить качество при «приближении» объектов. 
  • Интересно, что увеличение числа камер приближает нас к теме разреженного светового поля, у которого масса своих особенностей и плюсов, впрочем, это отдельная история. 
  • Заметим также, что увеличение числа камер позволяет поднять разрешение методами восстановления разрешения

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

И тут выясняется, что не все так просто. Чтобы содержательно использовать дополнительные камеры для улучшения снимка (а не просто переключиться на камеру с другим объективом), мы обязаны построить так называемую карту диспаритета, которая напрямую пересчитывается в карту глубины. А это весьма нетривиальная задача, к решению которой мощности смартфонов подошли только-только. И даже сейчас карты глубины имеют часто достаточно сомнительное качество. То есть до точного сопоставления «пикселя на правой картинке пикселю на левой» еще нужно дожить. Например, вот реальные примеры карт глубины для iPhone:


Источник: сравнение карт глубины iPhone XS & XR

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

Например, вот довольно хороший пример из доклада про «Создание фото- и видеоэффектов с использованием глубины» от Apple:


Источник: Creating Photo and Video Effects •Using Depth, Apple, WWDC18

Хорошо видно, как глубина глючит под волосами, да и вообще на любом более-менее равномерном фоне, но что важнее — на правой карте матирования воротник ушел в фон (т.е. будет размыт). Другая проблема — реальное разрешение глубины и карты матирования существенно ниже разрешения изображения, что также сказывается на качестве при обработке:



Впрочем, все это — проблемы роста. Если еще года 4 назад и речи не могло идти о сколь-нибудь серьезных эффектах на видео, телефон их просто «не тянул», то сегодня вполне себе обработку видео с глубиной показывают на топовых серийных телефонах (было в той же презентации Apple):


Источник: Creating Photo and Video Effects •Using Depth, Apple, WWDC18

В общем тема много-многокамерных телефонов, и, как следствие, тема получения глубины из стерео на мобильниках — без боя покоряет массы:


Источник: «найдено в этих ваших интернетах»

Ключевые выводы:

  • Глубина из стерео — в плане стоимости оборудования — самый дешевый способ получения глубины, поскольку камеры нынче недорогие и продолжают быстро дешеветь. Сложность в том, что дальнейшая обработка намного более ресурсоемкая, чем для других способов.
  • На мобильных телефонах нельзя увеличить диаметр объектива, при этом разрешение быстро растет. В итоге использование двух и более камер позволяет ощутимо повысить качество фото, снизить уровень шумов в условиях недостаточного освещения, повысить разрешение. Поскольку сегодня мобильный телефон часто выбирают по качеству камеры, это крайне ощутимый плюс. Построение карты глубины идет в качестве незаметного побочного бонуса.
  • Основные недостатки построения глубины из стерео: 
    • Как только текстура пропадает или просто становится менее контрастной — шумы по глубине резко возрастают, в итоге на ровных однотонных объектах глубину часто слабо используют (возможны серьезные ошибки).
    • Также глубина плохо определяется на тонких и небольших по размеру объектах («отрезанные» пальцы, а то и руки, проваленные по глубине столбы и т.д.) 
  • Как только мощность железа позволит строить карту глубины для видео, глубина на смартфонах даст мощный толчок развитию AR (в какой-то момент совершенно неожиданно для публики качество AR приложений на всех новых моделях телефонов, включая бюджетные, вдруг станет заметно выше и пойдет новая волна). Совершенно неожиданно!

Следующий способ — менее тривиальный и известный, но очень прикольный. Встречайте!

Способ 4: Light Field камеры глубины


Тема пленоптики (от латинского plenus — полный и optikos — зрительный) или световых полей пока сравнительно слабо известна широким массам, хотя профессионалы ей начали заниматься крайне плотно. На многих топовых конференциях для статей по Light Field выделены отдельные секции (автора в свое время поразило количество азиатских исследователей на IEEE International Conference on Multimedia and Expo, которые плотно занимаются этой темой). 

Google Trends говорят, что по интересу к Light Field лидируют США, Австралия, потом идут Сингапур, Корея. Великобритания. Россия на 32 месте… Будем исправлять отставание от Индии и ЮАР:


Источник: Google Trends

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

Основная идея — попробовать зафиксировать в каждой точке не просто свет, а двумерный массив световых лучей, сделав каждый кадр четырехмерным. На практике это делается с использованием массива микролинз:


Источник: plenoptic.infо (рекомендуется кликнуть и посмотреть в полном разрешении)

В итоге у нас появляется масса новых возможностей, но серьезно падает разрешение. Решив массу сложнейших технических задач, кардинально подняли разрешение в компании Lytro (куплена Google), где в Lytro Cinema разрешение сенсора камеры довели до 755 мегапикселей RAW данных, и которая выглядела громоздко, как первые телекамеры:


Источник: NAB: New Lytro Light-Field Camera That Could Bring Big Changes to Visual Effects Work Is Unveiled

Интересно, что даже профессионалы регулярно неверно оценивают падение разрешения пленоптических камер, поскольку недооценивают, насколько качественно на них могут отрабатывать алгоритмы Super Resolution, реально великолепно восстанавливающие многие детали по микросдвигам изображения в световом поле (обратите внимание на размытые спицы и движущиеся качели на заднем плане):


Источник: Наивное, умное и Super Resolution восстановление пленоптического кадра из Adobe Technical Report «Superresolution with Plenoptic Camera 2.0»

Все это имело бы относительно теоретический интерес, если бы Google в Pixel 2 не реализовал пленоптику, накрыв линзой 2 пикселя:


Источник: AI Google Blog

Как следствие, образовалась микростереопара, давшая возможность ИЗМЕРИТЬ глубину, к которой Google, верная новым традициям, добавила нейросетей, и получилось вообще замечательно:




Больше примеров глубины в полном разрешении в специальной галерее.

Интересно, что глубина хранится Google (как и Huawei, и прочими) в самом изображении, поэтому ее можно оттуда извлечь и посмотреть:


Источник: Three Secret Features Of Google’s New Camera App That Will Blow Your Mind

И дальше можно превратить фото в трехмерное: 


Источник: Three Secret Features Of Google’s New Camera App That Will Blow Your Mind

Самостоятельно можно с этим поэкспериментировать на сайте http://depthy.me, куда можно загрузить свое фото. Интересно, что сайт доступен в исходниках, т.е. можно улучшать обработку глубины, благо возможностей для этого много, сейчас там применены простейшие алгоритмы обработки.

Ключевые моменты:

  • На одной из конференций Google прозвучало, что, возможно, линзой будут накрыты не 2, а 4 пикселя. Это уменьшит прямое разрешение сенсора, однако позволит кардинально улучшить карту глубины. Во-первых, за счет появления стереопар в двух перпендикулярных направлениях, во-вторых, за счет того, что стереобаза увеличится условно в 1.4 раза (две диагонали). Это в том числе означает заметное улучшение точности по глубине на расстоянии.
  • Сама по себе пленоптика (она же — вычисляемая фотография), дает возможность:
    • «Честно» изменять фокус и глубину резкости после съемки — наиболее известная способность пленоптических сенсоров.
    • Вычислять форму диафрагмы.
    • Вычислять освещение сцены.
    • Несколько сдвигать точку съемки, в том числе получать стерео (или многоракурсный кадр) с одним объективом.
    • Вычислять разрешение, поскольку с применением тяжелых по вычислительной сложности алгоритмов Super Resolution можно реально восстановить кадр.
    • Вычислить карту прозрачности для полупрозрачных границ.
    • И, наконец, строить карту глубины, что сегодня немаловажно.
  • Потенциально, когда основная камера телефона сможет параллельно съемке строить в реальном времени качественную карту глубины — это породит революцию. Зависит это во многом от вычислительных мощностей на борту (именно это мешает сегодня делать более качественные и большего разрешения карты глубины в реальном времени). Наиболее это интересно для AR, конечно, но и возможностей изменять фотографии будет много. 

И, наконец, переходим к последнему в этом обзоре способу измерения глубины.

Способ 5: Камеры на lidar технологиях


Вообще, лазерные дальномеры прочно вошли в нашу жизнь, стоят недорого и дают высокую точность. Первые лидары (от LIDaR — Light Identification Detection and Ranging), построенные как связки подобных устройств, вращающихся вокруг горизонтальной оси, первыми начали использовать военные, потом тестировали в автопилотах машин. Они там проявили себя достаточно хорошо, что вызвало мощный всплеск инвестиций в область. Изначально лидары вращались, давая несколько раз в секунду подобную картину:


Источник: An Introduction to LIDAR: The Key Self-Driving Car Sensor

Это было неудобно, ненадежно в силу движущихся частей и довольно дорого. Тони Себа в своих лекциях приводит интересные данные по скорости снижения стоимости лидаров. Если для первых автономных машин Google лидары обходились в 70 тысяч долларов (например, специализированный HDL-64E, использовавшийся на первых машинах, стоил 75 тысяч):

Источник: Эта и следующая From Parking to Parks –Bellevue & the Disruption of Transportation

То при массовом производстве новые модели следующих поколений грозятся снизить цену существенно менее 1000$:


По поводу примера Тони можно спорить (обещание стартапа — это еще не финальная стоимость), но что идет бум исследований в этой области, быстрый рост тиражей производства, появление совершенно новых продуктов и общее снижение цен — это бесспорно. Чуть позднее в 2017 году прогноз падения цен был таков (а момент истины настанет, когда их таки начнут массово ставить в автомобили):


Источник: LiDAR Completes Sensing Triumvirate

В частности, относительно недавно сразу у нескольких производителей появились так называемые Solid State Lidar, у которых в принципе нет движущихся частей, которые показывают кардинально более высокую надежность, особенно при тряске, более низкую стоимость и т.д. Рекомендую посмотреть это видео, где их устройство объясняется за 84 секунды предельно наглядно:


Источник: Solid State Lidar Sensor

Что важно для нас, так это то, что Solid State Lidar дает прямоугольную картинку, т.е. по сути начинает работать, как «обычная» камера глубины:


Источник: Innoviz Envisions Mass Produced Self-Driving Cars With Solid State LiDAR

Пример выше дает видео примерно 1024х256, 25 FPS, 12 бит на компоненту. Подобные лидары будут монтировать под решетку капота (поскольку устройство хорошо греется):


Источник: Solid-State LiDAR Magna Electronics

Как обычно зажигают китайцы, которые сегодня на первом месте в мире по выпуску электромобилей и которые явно целятся на первое место в мире по автомобилям автономным:
 

Источник: Alibaba, RoboSense launch unmanned vehicle using solid-state LIDAR

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


Источник: MEMS Lidar for Driverless Vehicles Takes Another Big Step

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


Источник: Описание RoboSense RS-LiDAR-M1

Заметим, что кроме Solid-State низкие цены обещают еще пара направлений, по которым развиваются лидары. Что-то прогнозировать тут — дело неблагодарное, поскольку слишком многое будет зависеть не от потенциальных инженерных характеристик технологии, а, например, от патентов. Просто Solid-State уже занимаются несколько компаний, поэтому тема выглядит наиболее многообещающей. Но не сказать про остальных было бы несправедливо:


Источник: This 2017 LiDAR Bottleneck Is Causing a Modern-Day Gold Rush

Если говорить про лидары как про камеры, стоит сказать про еще одну важную особенность, которая существенна при использовании solid-state лидаров. Они по природе своей работают как камеры с уже забываемым бегущим затвором, что вносит ощутимые искажения при съемке движущихся объектов:


Источник: В чем отличие глобального (global) затвора от бегущего (rolling)

Учитывая, что на дороге, особенно на автобане на скорости 150 км/ч, все меняется довольно быстро, эта особенность лидаров будет сильно искажать объекты, в том числе быстро летящие нам навстречу… В том числе по глубине… Заметим, что у двух предыдущих методов получения глубины такой проблемы нет. 


Источник: неплохая анимация в википедии, на которой показано искажение автомобиля

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

Интересно, что по своей природе лидары работают очень хорошо на ровных областях и хуже на границах, а стерео-сенсоры плохо на ровных областях и относительно хорошо на границах. Кроме того, лидары дают относительно небольшой FPS, а камеры намного больший. В итоге они по сути дополняют друг друга, что использовалось в том числе в камерах Lytro Cinema (на фото у камеры сверху — просветленная линза пленоптики, дающей до 300 FPS, а внизу черный квадрат Малевича лидара):


Источник: Lytro poised to forever change filmmaking: debuts Cinema prototype and short film at NAB

Если уж в кинокамере совместили два сенсора глубины, то в других устройствах (от смартфонов до автомобилей) можно ожидать массового распространения гибридных сенсоров, обеспечивающих максимальное качество.

В каком-то смысле лидары — это пока про инвестиции, которые в предыдущие три года составили порядка 1.5 миллиардов долларов (благо этот рынок оценивают в 10 миллиардов через 6 лет и на графике ниже хорошо видно, как вырос средний размер сделки):


Источник: Интересный мартовский обзор тенденций на рынке лидаров от Techcrunch

Цикл разработки инновационного продукта даже на высококонкурентных рынках — 1.5-2 года, так что скоро мы увидим крайне интересные продукты. В виде прототипов они уже есть.

Ключевые моменты:

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

Обработка видео с глубиной


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

Ниже приведен пример «сырых» данных по глубине от очень неплохой линейки камер Intel RealSense. По пальцам рук на этом видео можно относительно легко «на глаз» оценивать работу камеры и алгоритмов обработки:


Источник: здесь и далее — материалы автора 

Хорошо видны типичные проблемы камер глубины:

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

Но это еще не все. Если мы посмотрим данные ближе, видно что местами более глубокие данные «просвечивают» сквозь более близкие:



Это происходит потому, что для удобства обработки изображение приводится к изображению с RGB камеры, а поскольку границы определяются неточно, появляется необходимость специально обрабатывать подобные «перехлесты», иначе возникают проблемы, типа таких «дырок» по глубине на руке:



При обработке там возникает масса проблем, например:

  • «Затекания» глубины с одного объекта на другой.
  • Нестабильность глубины во времени.
  • Алиасинг (образование «лесенки»), когда подавление шумов по глубине приводит к дискретизации значений глубины:



Тем не менее видно, что картинка сильно улучшилась. Заметим, что более медленные алгоритмы могут еще ощутимо поднять качество.

Вообще, обработка видео глубины (depth video processing) — это отдельная огромная тема, которой пока занимается не так много людей, но которая стремительно набирает популярность. Предыдущий рынок, который полностью она изменила — это конвертация фильмов из 2D в 3D. Результат ручного построения стерео по 2D видео настолько быстро совершенствовался, показывал настолько более предсказуемый результат, вызывал настолько меньше головной боли и меньше стоил, что в кино 3D, после почти 100 лет съемки (!), довольно быстро почти полностью перестали снимать и начали только конвертировать. Появилась даже отдельная специальность — depth artist, а стереограферы старой школы были в шоке («ка-ак та-ак?»). И ключевую роль в этой революции сыграло именно быстрое совершенствование алгоритмов обработки видео. Возможно, как-нибудь выкрою время написать про это отдельную серию статей, ибо свой материал лежит в больших количествах. 

Примерно то же самое можно ожидать в ближайшее время для камер глубины роботов, смартфонов и автономных автомобилей.

Wake up! Revolution is coming! 

Вместо заключения


Пару лет назад ваш покорный слуга свел сравнение разных подходов к получению видео с глубиной в единую табличку. В целом за это время ситуация не изменилась. Разделение здесь достаточно условно, поскольку производители прекрасно осознают минусы технологий и стараются их компенсировать (иногда крайне удачно). Тем не менее в целом по ней можно сравнить разные подходы:


Источник: материалы автора

Пробежимся по таблице:

  • По разрешению лидирует глубина из стерео, но все очень сильно зависит от сцены (если она однотонная, дело — труба). 
  • По точности — лидары вне конкуренции, хуже всех ситуация у пленоптики, кстати.
  • По сложности обработки — «непосредственно» получают глубину только ToF и лидары, получение глубины у стерео и пленоптики требует большого количества весьма нетривиальных вычислений. 
  • По FPS конструктивно хороши ToF камеры и в ближайшее время, когда подтянется железо, их догонят стереокамеры (способные выдавать до 300 fps). Лидарам такие скорости пока только снятся.
  • По результатам в условиях низкой освещенности ожидаемо проигрывают стерео и пленоптика.
  • При работе на улице — плохо работают ToF и камеры структурированного света.

При этом важно хорошо понимать ситуацию на конкретных рынках. Например, пленоптический подход выглядит явно отстающим. Однако, если он окажется наилучшим для AR (а это станет понятно в ближайшие 3-4 года), то он займет свое законное место в каждом телефоне и планшете. Также видно, что solid-state лидары выглядят лучше всех (самые «зеленые»), но это и самая молодая технология, а это свои риски, в первую очередь патентные (в области огромное количество свежих патентов, которые еще не скоро истекут):

Источник: LiDAR: An Overview of the Patent Landscape

Тем не менее не забываем — рынок сенсоров глубины для смартфонов на следующий год планируют в 6 миллиардов долларов и меньше 4 он быть не может, поскольку в прошлом году составил больше 3 миллиардов. Это огромные деньги, которые не только пойдут на возврат инвестиций (наиболее удачливым инвесторам), но и на разработку новых поколений сенсоров. Аналогичного роста лидаров пока нет, но по всем признакам он пойдет буквально в ближайшие 3 года. А дальше это обычный лавинообразный экспоненциальный процесс, кои уже были не раз.

Ближайшее будущее камер глубины выглядит крайне интересным!

Карфаген должен быть разру… Всё видео до конца века станет трехмерным!

Stay tuned!

Кто не читал — первая часть текста!

Благодарности
Хотелось бы сердечно поблагодарить:
  • Лабораторию Компьютерной Графики ВМК МГУ им. М.В.Ломоносова за вклад в развитие компьютерной графики в России и не только,
  • компании Google, Apple и Intel за великолепные компактные решения, а всех производителей лидаров за быстрый прогресс,
  • персонально Константина Кожемякова, который сделал очень много для того, чтобы эта статья стала лучше и нагляднее,
  • и, наконец, огромное спасибо Роману Казанцеву, Евгению Ляпустину и Егору Склярову за большое количество дельных замечаний и правок, сделавших этот текст намного лучше!

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+87
Комментарии 59
Комментарии Комментарии 59

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн