чем можно заниматься в душе

Содержание

Как найти своё хобби и зачем оно нужно

Разбираемся, как любимое дело помогает развивать мозг

%D1%85%D0%BE%D0%B1%D0%B1%D0%B8

%D0%9B%D0%BE%D0%B3%D0%BE %D0%B4%D0%BB%D1%8F %D1%81%D1%82%D0%B0%D1%82%D0%B5%D0%B9 %D0%BD%D0%B0 %D0%9C%D0%B5%D0%B4%D0%B8%D0%B0

Каждый человек объясняет себе важность хобби по-разному: для кого-то это способ отвлечься, для кого-то это способ борьбы со стрессом, для кого-то хобби становится смыслом жизни. А что если посмотреть на любимое дело с точки зрения науки? Об этом — в нашем новом материале.

Frame 1 7

%D0%98%D1%80%D0%B8%D0%BD%D0%B0 %D0%A2%D0%B5%D0%BB%D0%B5%D0%B3%D0%B8%D0%BD%D0%B0

Что такое хобби и почему важно его иметь

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

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

%D0%92%D1%80%D0%B5%D0%BC%D1%8F %D0%B4%D0%BB%D1%8F %D1%85%D0%BE%D0%B1%D0%B1%D0%B8 01

С точки зрения психологической науки, одна из базовых потребностей личности, без которой она не может быть счастливой, — потребность в признании и самореализации. Человек, увлечённый каким-либо хобби, находит новый круг общения, где он будет ценен, а также может получить признание своих талантов. Позитивное подкрепление успеха даёт нам импульс стремиться к большему.

Как найти хобби по душе

%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%B8%D1%82%D1%8C %D1%83%D0%B6%D0%B8%D0%BD

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

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

Если у вас слабый и неуравновешенный психотип нервной деятельности, вам лучше подойдут творческие хобби; если вы сильный и эмоциональный психотип, возможно, вам стоит рассмотреть деятельность социальной направленности (театр или танцы). Спортивные хобби подойдут сильному неуравновешенному психотипу.

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

Где найти хобби: подборка ресурсов

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

1. Мир Хобби

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

2. На официальных сайтах департамента или управления образования вашего города.

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

3. Можно найти удалённые занятия, мастер-классы и курсы.

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

Советы по выбору вида хобби

Все хобби условно можно подразделить на две большие группы: активные и пассивные. Активные хобби, как правило, включают те, что требуют от нас выйти на улицу: это хобби, связанные с движением. Условно их можно разделить ещё на несколько групп.

🐎 Спортивные: езда на велосипеде, хайкинг, спортивные командные игры, йога, кроссфит — всё то, что так или иначе связано со спортом. Такие хобби помогают нашему мозгу активно насыщаться кислородом, развивают ловкость, координацию, уверенность в своём теле.

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

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

%D1%88%D0%B8%D1%82%D1%8C%D0%B5 1

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

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

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

🎨 Художественные — рисование, лепка, скульптурирование, оригами, фотография. Такие виды деятельности отлично помогут развить художественный вкус, эмоциональный интеллект, понимание о цвете, форме, пространственное мышление.

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

Как найти хобби, если ничего не интересно

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

Можно ли совместить хобби и работу

%D0%BF%D0%BE%D0%BB%D0%B8%D0%B2%D0%B0%D1%82%D1%8C %D1%86%D0%B2%D0%B5%D1%82%D1%8B

«Найдите себе дело по душе, и вам не придётся работать ни дня в своей жизни», — эту цитату часто приводят, говоря об успехе человека и цели в жизни. Здорово, когда хобби становится важной частью жизни и начинает приносить доход, однако в любом деле в определённый момент встречается элемент рутины, и вот любимое дело уже не радует так, как раньше.

Плюсы

Минусы

main smiles

Рассказываем школьную программу так, что хочется учиться

Источник

Чем заняться в душе

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

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

Как заниматься в душе бинарным поиском по отрезку:

Лучше бы ты по онанировал лишний раз вместо этого. Это я как опытный программист говорю.

Ты бы ещё рассказал, как телефонным справочником пользоваться.

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

Это только в случае если давление горячей и холодной воды одинаковое. Иначе придётся крутить оба крана регулируя ещё и общий напор. Тут наверное ближе законы Киркгофа

Я смотрю у вас времени свободного до фига.

Помыться не забываете с этими поисками идеальной температуры?

1632439036273151541

Разгадка

164044129616399763

m2573897 1353692375

162543623527961668

А надо ли учиться?

Я понимаю, что даже при покупке курса надо будет что-то почитывать дополнительно, но на сколько это реально, например, для того же, скажем, юриста со знанием английского на уровне Pre-Intermediate?

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

Пы.Сы. Не бейте сильно, если эта тема уже обсуждалась, а я пропустила или мой вопрос кому-то покажется глуповатым.

1640194935125132456

m3613927 648588868

1639849708371094678

Ответ на пост «Как войти в IT после 30, мой путь от офисного планктона до Middle Java разработчика в Сбербанке»

m1496148 495634888

1639849708371094678

Как войти в IT после 30, мой путь от офисного планктона до Middle Java разработчика в Сбербанке

1639924263139863876

поэтому три года назад, перегорев от творческой работы по раскладыванию пасьянса «косынка», я решил что-то в жизни поменять. Начал с изучения английского. Не стану превращать пост в подробное описание этого процесса, тем более есть уже замечательный пост от @L4rever, на эту тему. Добавлю лишь, что для пополнения словарного запаса мне очень зашёл сайт\приложение memrise который помог мне дотянуть свой словарик до 5000 слов примерно за год в бесплатном режиме. Хоть изучение английского и не имело решающего значения в моей дальнейшей судьбе, но весьма помогло.

Читайте также:  чем может быть занята оперативная память на компьютере

Глава 1. Избавление от обязательств и накопление финансовой подушки

Как и у большинства людей старше 25 у меня была ипотека, благо не такая большая, всего на 1,5 миллиона (хоть какие-то преимущества жизни в пригороде провинциального города).

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

1639927646166116996

Интернет рассказал мне о фрилансеров, различных специальностей, всяких копирайтерах, smm менеджерах и так далее. С копирайтингом у меня не особо получилось, за 50 заказов и около 30 часов работы я получил 1500 рублей. Писать тексты было скучно, бесконечные поправки и конкуренция в виде армии школьников за заказ стоимостью 35 рублей, 84 копейки.

Поэтому было решено попробовать второй путь. И тут мне повезло уже на второй день поисков на зарубежной бирже я смог найти заказчика, которому нужно было вести группы в ВК и Facebook для нескольких брендов. Работы было не сильно много, всего на пару часов в день. Платили тоже не супер, 15 тысяч, однако это на 13 500 больше чем зарплата копирайтера, поэтому я приступил к работе.

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

1) Устроится туда самому.
2) Устроить туда жену, со знанием языка на уровне летспик фромахарт используя хитроумное устройство, в виде наушника и меня с микрофоном.

Благо звонки были только на русском и английский нужен был чтобы в рабочей программке с английским интерфейсом заполнять данные.

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

1639927244183839135

Глава 2. Куда пойти

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

UPD. Сейчас многие крупные компании также открыли свои школы, видел такие у Яндекса и ВТБ, поэтому выбор стал шире.

163992877211838602

Здание школы в Казани

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

Так как школа бесплатная и фактически никаких ограничений по возрасту и образованию к поступающим не предъявляет (единственное это возраст 18+), желающих поступить приходит больше, чем существующее количество мест. Поэтому в качестве вступительных экзаменов там есть «Бассейны». Но перед тем как попасть на них нужно пройти две игры на сайте, на память и логику\алгоритмы, после чего записать видеоинтервью с коротким рассказом о себе и ждать приглашения на испытание бассейном.

1639929562177127808

Нет, плавательные шапочки можно отложить, это не совсем то

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

1639929999127948137

Так выглядит учебное здание, около 300 рабочих станций с шахматным расположением.

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

В мае мы приступили к обучению, при чём дистанционно из-за ограничений в массовых собраниях, что было неслыханно для школы 21 (Кстати кампус в Москве уже на тот момент работал два года) и добавило сложностей к обучению, ведь я опять остался на самоконтроле и без друзей за соседними компами. Благо в сентябре нам разрешили вернутся в Кампус и надев маски, перчатки, соблюдая дистанцию метр мы начали учится сообща, что было всё же намного лучше, чем ничего. Лучшей мотивацией для меня стала работа в команде, желание не подставить свою команду, да и в целом, коллективная работа более эффективная, особенно когда сталкиваешься с проблемой, которую не можешь решить несколько часов.

Для закрытия 9 уровня мне потребовался ровно год, я это сделал в мае 2021 и начал искать место стажировки, которая кстати в 99% случаев оплачиваемая.

Глава 4. Стажировка и работа

1639930710166320058

Офис какой-то ИТ-компании

Логично было бы подумать, что раз школа финансируется Сбером, то и работать ты обязан только там. Но это не так. Никаких финансовых или трудовых обязательств у учеников нет, в интернете ходит информация о штрафе в 50к за отчисление, но она устарела, этот штраф был лишь стимулирующей мерой не забрасывать школу, как оказалось она не работает и вызывает массу негатива, поэтому была заменена на дедлайны по набору уровней, при нарушении которых тебя просто отчисляют.

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

Но естественно самым простым, в плане организации, путём является стажировка в Сбере. Так как они прекрасно знают что ты стажёр и много от тебя ожидать не стоит, не получается таких недоразумений:

1639931212149062379

Мне опять же повезло, я прошел 4 собеседования в различные команды, по итогу получил 1 предложение на стажировку и 1 сразу в штат. Так не мудрствуя лукаво, в Июне я стал Junior Java разработчиком в Сбере в городе Иннополис (недалеко от Казани). Про город кстати отдельная тема, достойная целого поста, но можно просто почитать посты @veronichka.pb, где она подробно рассказывает о городе и процессе переезда в него.

1639932121192578796

Ну а спустя пол года, неделю назад, получил повышение (сейчас тру-погроммисты будут меня ругать, так как настоящий мидл это человек с опытом 2-3 года. И честно сказать будут правы, я считаю что получил повышение авансом, но в конце концов кто мы такие чтобы спорить с начальством)))

Касательно работы именно в Сбере, я очень доволен тем, что имею. Особенно сравнивая свой текущий опыт с отношением работодателей в не-айтишном прошлом, даже не беря в расчёт зарплату, а откинуть такой весомый аргумент довольно сложно =D. Коллектив поддерживает меня, несмотря на пробелы в моих знаниях и более низкую эффективность, отпроситься с работы для каких-то дел очень просто, а при необходимости легко можно работать удаленно. Ну и весьма неплохо иметь возможность переключится на другой проект, если текущий для тебя станет скучным, а проектов здесь огромное количество.

Кстати одним из главных аргументов, почему я выбрал именно эту компанию является отсутствие постоянно горящих дедлайнов, из-за чего многие перегорают, как например @OWIII, за вхождением в IT которого я внимательно следил. именно поэтому решил написать пост об этом сейчас, уже пройдя этот путь, а не в процессе его.

В конце хотел бы сказать, что ничего нереального во вхождение в ИТ-сферу нет, да вам будет легче, если вам 20 лет, нет детей и ипотеки, но рядом со мной прошёл путь человек с двумя детьми, ипотекой и 40 годами за плечами, который тоже сейчас работает разработчиком. И это не какая-то единичная ситуация, таких людей буквально сотни, даже на пикабу @vigerf, почитав мои комментарии решился начать свой путь, надеюсь он также поможет ответить на вопросы о школе в комментариях))

Не бойтесь начинать это в 30, 40, любое другое количество лет, намного страшнее как мне кажется, так и не попробовать.

m395469 1406591541

1632439036273151541

Помогите!

163991964411554312

m107975 1752600497

1632439036273151541

Когда клиент попросил сделать креативную форму

m2204704 984405263

1478189420255384259

Типичный ИИ-стартап

1639663723178994724

PS сам в таком работал

m3115531 1564222460

Бесплатно помогаю пикабушникам учить программирование, часть 27: «Мы составили план обучения по Swift»

Пикабушника @lycrois, которая любезно согласилась помогать мне в обучении программированию, составила план обучения по Swift.

Также мы завели группу в Telegram, где оперативно отвечаем на часто возникающие вопросы: https://t.me/+uKgZmAzvhpRjZjNi

Все это было и будет бесплатно. Добро пожаловать всем желающим =)

m3335317 1807706234

16205628112974303

Как я делал систему оптического трекинга

1638362030125977826

Дело было в далеком 2015 году. В продаже только появились очки виртуальной реальности Oculus DK2, рынок VR игр быстро набирал популярность.

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

Звучало не очень круто, но я увидел в этом возможность сделать что-то интересное, используя свой опыт в разработке электроники и жажду новых проектов. Как можно было эту систему улучшить?

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

Читайте также:  чаговый чай сибирский для чего

1) Берем несколько игроков, надеваем на них VR очки, ноутбук и датчики на руки, ноги и туловище.

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

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

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

Для реализации заявленного функционала, нужно было создать две основные технологии:

1) Костюм, состоящий из датчиков на руках, ногах и торсе, отслеживающий положения частей тела игрока

2) Система трекинга, отслеживающая игроков и интерактивные объекты в 3D пространстве.

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

Бюджета на все это, конечно, у нас не было, поэтому нужно было сделать все из подручных материалов. Для задачи отслеживания игроков в пространстве я решил использовать оптические камеры и светодиодные маркеры, закрепленные на VR очках. Опыта подобных разработок у меня не было, но я уже что-то слышал про OpenCV, Python, и подумал, что справлюсь.

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

163836244416618686

Соответственно, камеры нужно было закрепить на потолке так, чтобы каждая точка пространства просматривалась минимум двумя камерами (лучше больше, чтобы избежать перекрытия обзора телами игроков). Для покрытия трекингом предполагаемого помещения площадью около 100 кв.м., требовалось около 60 камер. Я выбрал первые попавшиеся дешевые на тот момент usb вебки.

163836247711496311

Эти вебки нужно к чему-то подключать. Эксперименты показали, что при использовании usb удлинителей (по крайней мере, дешевых), камеры начинали глючить. Поэтому решил разделить вебки на группы по 8 штук и втыкать их в системники, закрепленные на потолке. На моем домашнем компе как раз было 10 usb портов, так что пришло время начинать разработку тестового стенда.

Архитектуру я придумал следующую:

На каждые очки вешается акриловый матовый шарик от гирлянды с вклеенным внутрь RGB светодиодом. Одновременно в игре предполагалось несколько игроков, так что для идентификации решил разделять их по цвету – R, G, B, RG, RB, GB, RB. Вот так это выглядело:

1638362519143352883

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

Поиск шарика на кадре

Мне нужно было в каждом кадре, пришедшем с камеры, искать координаты центра шарика и его цвет для идентификации. Звучит несложно. Качаю OpenCV под Python, втыкаю камеру в usb, пишу скрипт. Для минимизации влияния лишних объектов на кадре, выставляю экспозицию и выдержку на камере в самый минимум, а яркость светодиода делаю высокой, чтобы получить яркие пятна на темном фоне. В первой версии алгоритм был следующий:

1) Переводим изображение в градации серого

2) Бинаризуем по порогу (если яркость пикселя больше порога, он становится белым, иначе – черным). При этом размытое пятно от шарика превращается в кластер белых пикселей на черном фоне

3) Находим контуры кластеров и их центры. Это и есть координаты шарика на кадре

4) Определяем усредненный цвет пикселей кластера (на исходном цветном изображении) в окрестности его центра для идентификации

1638362594196789585

Вроде, работает, но есть нюансы.

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

Во-вторых, разрешение камеры всего лишь 640*480, поэтому на некотором расстоянии (не очень большом) шарик виден как пара пикселей на кадре и алгоритм поиска контуров перестает нормально работать.

Пришлось придумывать новый алгоритм. В голову пришла следующая идея:

1) Переводим изображение в градации серого

2) Размываем картинку мощным Gaussian blur –ом так, чтобы изображения светодиодов превратились в размытые пятна с градиентом яркости от центра к периферии

3) Находим самые яркие пиксели на изображении, они должны соответствовать центрам пятен

4) Так же определяем средний цвет кластера в окрестности центра

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

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

Подключаю 8 камер к своему десктопу, располагаю их так, чтобы каждая видела светящиеся точки и запускаю скрипт, где описанный алгоритм работает в 8-ми независимых процессах (спасибо питонской либе «multiprocessing») и обрабатывает все потоки сразу.

И… сразу натыкаюсь на фейл. Изображения с камер то появляются, то исчезают, framerate скачет от 0 до 100, кошмар. Расследование показало, что часть usb портов на моем компе подключены к одной шине через внутренний хаб, из-за чего скорость шины делится между несколькими портами и ее уже не хватает на битрейт камер. Втыкание камер в разные порты компа в разных комбинациях показало, что у меня всего 4 независимых usb шины. Пришлось найти материнку с 8-ю шинами, что было довольно непростым квестом.

Продолжаю нагрузочный тест. На этот раз все камеры подключились и выдают нормальные потоки, но сразу сталкиваюсь со следующей проблемой – низкий fps. Процессор загружен на 100% и успевает обрабатывать лишь 8-10 кадров в секунду с каждой из восьми вебок.

1638362712134015180

Похоже, нужно оптимизировать код. Узким местом оказалось Гауссово размытие (оно и не удивительно, ведь нужно на каждый пиксель кадра производить свертку с матрицей 9*9). Уменьшение ядра не спасало ситуацию. Пришлось искать другой метод нахождения центров пятен на кадрах.

Решение удалось найти внезапно во встроенной в OpenCV функции SimpleBlobDetector. Она делает прямо то, что мне нужно и очень быстро. Преимущество достигается благодаря последовательной бинаризации изображения с разными порогами и поиску контуров. Результат – максимальные 30 fps при загрузке процессора меньше 40%. Нагрузочный тест пройден!

Классификация по цвету

Следующая задача – классификация маркера по его цвету. Усредненное значение цвета по пикселям пятна дает RGB компоненты, которые очень нестабильны и сильно меняются в зависимости от расстояния до камеры и яркости светодиода. Но есть отличное решение: перевод из RGB пространства с HSV (hue, saturation, value). В таком представлении пиксель вместо «красный», «синий», «зеленый», раскладывается на компоненты «тон», «насыщенность», «яркость». В этом случае насыщенность и яркость можно просто исключить и классифицировать только по тону.

1638362745144489765

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

Я использовал pinhole модель камеры, в которой все лучи падают на матрицу через точку, находящуюся на фокусном расстоянии от матрицы.

1638362792133070844

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

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

В первом варианте решил сделать калибровку трекинга максимально примитивной.

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

2) С помощью лазерного нивелира и дальномера измеряю XYZ координаты всех камер в единой системе координат

3) Для вычисления ориентаций и фокусных расстояний камер, измеряю координаты специальных стикеров. Стикеры вешаю следующим образом:

В интерфейсе отображения картинки с камеры рисую две точки. Одну в центре кадра, другую в 200 пикселях справа от центра:

1638364254176620249

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

Измеряю XYZ координаты этих точек с помощью тех же нивелира и дальномера. Итого для блока из восьми камер нужно измерить координаты самих камер и еще по две точки на каждую. Т.е. 24 тройки координат. А таких блоков должно быть около десяти. Получается долгая муторная работа. Но ничего, позже сделаю калибровку автоматизированной.

Запускаю процесс расчета на основе измеренных данных.

Есть две системы координат: одна глобальная, связанная с помещением, другая локальная для каждой камеры. В моем алгоритме результатом для каждой камеры должна получиться матрица 4*4, содержащая ее местоположение и ориентацию, позволяющая преобразовать координаты из локальной в глобальную систему.

1638364322120478072

1) Берем исходную матрицу с нулевыми поворотами и смещением.

2) Берем единичный вектор в локальной системе камеры, который смотрит из объектива вперед и преобразуем его в глобальные координаты по исходной матрице.

3) Берем другой вектор в глобальной системе, который из камеры смотрит на центральную точку на стене.

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

5) По расстоянию между этими двумя точками вычисляю фокусное расстояния в пикселях (учитывая, что расстояние между проекциями этих точек на кадре составляет 200 пикселей).

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

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

Читайте также:  протезирование зубов виды что лучше

1638364386145434294

Можно приступать к запуску визуализации, которая покажет правильно ли определились ориентации камер и правильно ли интерпретируются кадры. В идеале, линии, идущие из значков камер должны пересекаться в одной точке.

1638364408120353283

Похоже на правду, но точность явно могла быть выше. Первая причина несовершенства, которая пришла в голову – искажения в объективах камер. Значит, нужно эти искажения как-то компенсировать.

У идеальной камеры важный для меня параметр только один – фокусное расстояние. У реальной кривой камеры нужно учитывать еще дисторсии объектива и смещение центра матрицы.

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

1638364433136657161

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

163836515312687827

А также вектор коэффициентов дисторсии, который позволяет компенсировать искажения объектива с помощью преобразований координат пикселей.

Применяя преобразования с этими коэффициентами к координатам маркера на кадре, можно привести систему к модели идеальной pinhole камеры.

Провожу новый тест трекинга:

1638364472122924127

Уже гораздо лучше! Выглядит настолько хорошо, что даже вроде будет работать.

Вычисление координат маркера

И так, я получил кучу прямых, разбросанных по пространству, на пересечениях которых должны находиться маркеры. Только вот прямые в пространстве на самом деле не пересекаются, а скрещиваются, т.е. проходят на некотором расстоянии друг от друга. Моя задача – найти точку, максимально близкую к обеим прямым. Формально говоря, нужно найти середину отрезка, являющегося перпендикуляром к обеим прямым.

1638364498130984219

Длина отрезка AB тоже пригодится, т.к. она отражает «качество» полученного результата. Чем он короче, тем ближе друг к другу прямые, тем лучше результат.

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

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

Магнитное поле в нашем помещении было направлено ВЕРТИКАЛЬНО ВНИЗ! Видимо, это связано с железом в конструкции здания.

Но ведь в VR очках тоже используется магнитометр. Почему у них такого эффекта нет? Иду проверять. Оказалось, что в очках он тоже есть… Если сидеть неподвижно, можно заметить, как виртуальный мир медленно, но верно вращается вокруг тебя в рандомную сторону. За минут 10 он уезжает почти на 180 градусов. В нашей игре это неминуемо приведет к рассинхрону виртуальной и реальной реальностей и сломанным об стены очкам.

Похоже, что помимо координат очков, придется определять и их направление в горизонтальной плоскости. Решение напрашивается само – ставить на очки не один, а два одинаковых маркера. Оно позволит определять направление с точностью до разворота на 180 градусов, но с учетом наличия встроенных инерциальных датчиков, этого вполне достаточно.

1638364524187077611

Система в целом работала, хоть и с небольшими косяками. Но было принято решение запустить квест, который как раз был близок к завершению нашим gamedev разработчиком, присоединившимся к нашей миникоманде. Была затречена вся игровая площадь, установлены двери с датчиками и магнитными замками, изготовлено два интерактивных предмета:

1638364535189664738

Игроки надевали очки, костюмы и рюкзаки-компьютеры и заходили в игровую зону. Координаты трекинга отсылались им по wi-fi и применялись для позиционирования виртуального персонажа. Все работало достаточно неплохо, посетители довольны. Приятнее всего было наблюдать ужас и крики особо впечатлительных посетителей в моменты, когда на них из темноты нападали виртуальные призраки =)

1638364579199195792

Внезапно нам прилетел заказ на большой VR шутер на 8 игроков с автоматами в руках. А это 16 объектов, которые нужно тречить. Повезло, что сценарий предполагал возможность разделения трекинга на две зоны по 4 игрока, поэтому я решил, что проблем не будет, можно принимать заказ и ни о чем не волноваться. Протестировать систему в домашних условиях было невозможно, т.к. требовалась большая площадь и много оборудования, которое будет куплено заказчиком, поэтому до монтажа я решил потратить время на автоматизацию калибровки трекинга.

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

1) вешаю камеры и на глаз направляю их в игровую область

2) запускаю режим записи на сервере, в котором все приходящие с камер 2D точки сохраняются в файл

3) хожу по темной игровой локации с маркером в руках

4) останавливаю запись и запускаю расчет калибровочных данных, при котором вычисляются расположения, ориентации и фокусные расстояния всех камер.

5) в результате предыдущего пункта получается единое пространство, наполненное камерами. Т.к. это пространство не привязано к реальным координатам, оно имеет случайное смещение и поворот, которое я вычитаю вручную.

Пришлось перелопатить огромное количество материала по линейной алгебре и написать многие сотни строк питонского кода. Настолько много, что я уже почти не помню как оно работает.

1638364696145992472

1638368033164639391

Вот так выглядит напечатанная на принтере специальная палка-калибровалка.

Тестирование большого проекта

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

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

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

163836474112140968

Алгоритмы трекинга пришлось заметно усложнить, но в итоге все заработало! Телепортации игроков друг в друга исчезли, нагрузка на процессор упала, засветки перестали мешать.

Проект был успешно запущен, первым делом я сделал новые платы костюмов с поддержкой активного трекинга, и мы произвели обновление оборудования.

Чем все закончилось?

1638367914180017168

За 3 года мы открыли множество развлекательных точек по всему миру, но коронавирус внес свои коррективы, что дало нам возможность сменить направление работы в более общественно-полезную сторону. Теперь мы довольно успешно занимаемся разработкой медицинских симуляторов в VR. Команда у нас все еще маленькая и мы активно стремимся расширять штат. Если среди читателей есть опытные разработчики под UE4, ищущие работу, пожалуйста, напишите мне.

Традиционный забавный момент в конце статьи:

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

1638367951124933626

Система в прямом смысле работала через задницу =)

m584862 1644752792

Как насчёт монеток?

Практично, не так ли? Очень удобно отсчитывать любую сумму. На практике. Человеку. Но чисто математически: это ли оптимальные номиналы монеток? То есть правда ли, что при наборе суммы от 1 до 99 копеек с таким набором монет из шести номиналов, получается так, что в среднем используется меньше всего монеток? И. Нет!

А как узнать, каков оптимальный набор монеток, тогда? Ну, будь я математиком, я бы точно полез куда-нибудь в дебри матанализа и накопал кучу всего и всякого полезного, что точно, основательно и однозначно давало бы ответ на данный вопрос.

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

Разумеется, всё состряпано на коленке и код оптимальным не назовёшь, но он работает и делает своё дело, что и нужно.

1628927279127823881

Итааак, дамы и господа, леди и джентльмены!

Я рад вам сообщить, что если бы все люди умели считать как чёртовы машины и некруглые большие числа никого не смущали, то номиналы монеток лучше всего было бы сделать такими:

1628932522146515697

Желаете отчеканить всего 5 номиналов монет для казны, сударь?
Ваш математически лучший выбор:
(1), (3), (7), (16), (40) и тогда в среднем нужно будет 3.49 монетки для того, чтобы составить нужную сумму мелочи.

4 номинала? Ну, тогда (1), (3), (11), (38) конечно! Ведь именно такой набор требует в среднем лучшие 4.14 монетки для размена мелочи!

А в категории три номинала побеждает (1), (5), (22) со средним количеством необходимых монет в 5.31

Сердечно поздравляю всех, кто дочитал до этого места (именно дочитал, а не доскроллил). Теперь вы знаете забавную информацию, добытую парой часов процессорного времени. И я очень надеюсь, что это знание вас хоть немного развлечёт, как развлекло меня.

Источник

Оцените статью
( Пока оценок нет )
Поделиться с друзьями
Настройки и регулировки
Adblock
detector