Tagged: Устройства и IoT

31
Май
2021

🤖 25 ресурсов для изучения IoT-разработки в 2021 году: онлайн-университеты, каналы, блоги и подкасты

Выгода от работы в сфере IoT очевидна – быстрорастущий рынок труда с распространением сетей 5G будет развиваться еще активнее. К тому же полученные знания и навыки в сфере программирования и электроники пригодятся вне зависимости от вашей И…

31
Май
2021

🤖 26 ресурсов для изучения IoT-разработки в 2021 году: онлайн-университеты, каналы, блоги и подкасты

Выгода от работы в сфере IoT очевидна – быстрорастущий рынок труда с распространением сетей 5G будет развиваться еще активнее. К тому же полученные знания и навыки в сфере программирования и электроники пригодятся вне зависимости от вашей И…

09
Май
2021

🤖 Что должен знать начинающий IoT-разработчик в 2021 году?

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

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

Важность технологий интернета вещей (IoT) стала еще более очевидной после прогноза GSMA о том, что к 2025 году количество подключенных к сети умных устройств достигнет 25 миллиардов. Компания IoT Analytics опубликовала данные о 12 миллиардах подключений в прошедшем 2020 году.


Языки программирования С и C++

Синтаксис C/C++ достаточно сложен, однако изучить его придется. Языки этого семейства активно используют для эффективного кодирования встроенных систем, взаимодействующих с базовым оборудованием. Возможности работы с памятью и оптимизации вычислений в C/C++ позволяют выжать максимальную производительность из устройств с недостаточным объемом ресурсов. Если у вас нет практических навыков программирования, необходимо освоить базовые вещи:

  1. Двоичная и шестнадцатеричная системы счисления.
  2. Константы. Типы данных.
  3. Операторы и выражения языка С. Функции (объявление, вызов).
  4. Переменные. Типы данных (примитивные типы, строки, структуры).
  5. Управляющие операторы.
  6. Функции. Работа с памятью.
  7. Типы данных. Основы объектно-ориентированного подхода к программированию (C++). Пользовательские типы данных.
  8. Структура программы на C.
  9. Препроцессор.
  10. IDE и средства разработки.
  11. Стандартные библиотеки С/C++.

Разрабатывать программное обеспечения для устройств интернета вещей можно и на других языках программирования: Java, Python, Javascript, Swift, PHP и т.д.


Linux

Для управления умными устройствами используются разные встраиваемые операционные системы и даже системы общего назначения, многие из которых основаны на GNU/Linux – будущему инженеру умных устройств необходимо знать основы работы с этой ОС. Если вы никогда не сталкивались с Linux, стоит выбрать какой-нибудь дистрибутив и восполнить пробелы. Уделите внимание следующим темам:

  1. Установка ОС.
  2. Настройка системы и знакомство с интерфейсом командной строки.
  3. Пользователи. Управление пользователями и группами.
  4. Загрузка ОС и процессы.
  5. Устройство файловой системы Linux. Понятие файла и каталога.
  6. Введение в скрипты bash. Планировщики задач crontab и at.
  7. Управление пакетами и репозиториями. Основы сетевой безопасности.

Стоит установить второй системой дистрибутив, основанный на Debian/Ubuntu (например, Linux Mint). Такие системы используются, в частности, на популярном у самодельщиков микрокомпьютере Raspberry Pi, так что опыт работы с ними будет не лишним.

Микроконтроллеры

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

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

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

  1. Биты (фьюзы) – инструмент для тонкой настройки микроконтроллера. Он нужен для изменения частоты и источника тактового сигнала, включения или выключения таймеров и многого другого.
  2. RAM – это оперативная память с быстрым доступом, которая не сохраняет данные при отсутствии питания. Все микроконтроллеры поставляются с определенным объемом памяти. Чем он больше, тем лучше, но добавленная оперативная память увеличивает стоимость MCU.
  3. Флэш-память – это память микроконтроллера, в которой хранятся данные при отсутствии питания. Своего рода автономное хранилище.
  4. GPIO – контакты ввода/вывода общего назначения. Их используют для подключения датчиков и исполнительных механизмов к MCU. Количество выводов может варьироваться от одного до сотен, в зависимости от модели микроконтроллера.
  5. Возможности подключения. Плата и само приложение могут подключаться к интернету через Wi-Fi, Ethernet или другие интерфейсы.
  6. Энергопотребление. Потребляемая мощность критически важна для приложений с подключенными датчиками, особенно когда вашему устройству необходимо использовать аккумулятор или обычные батарейки.

Существует немало хороших микроконтроллеров. Среди прочих можно выделить платы марки Arduino и контроллеры семейства STM32, подходящие, как для новичков, так и для профессионалов. Они имеют хорошую производительность и работают с большинством современных датчиков и приборов. Помимо микроконтроллеров, для создания решений IoT могут использоваться и более производительные встраиваемые компьютеры.

Основы электроники и схемотехники

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

  1. Схемотехника. Знакомство с основными компонентами и инструментами.
  2. Расчеты электронных соединений.
  3. Транзисторы.
  4. Подключение и управление нагрузками.
  5. Ток. Источники питания и фильтры. Гальваническая развязка.
  6. Линейные преобразователи. Современные LDO.
  7. Операционные усилители.
  8. Логические элементы.

Усвоить необходимые знания можно из книг:

  • «Электроника. Теория и практика» [2018], авторы: Монк С., Шерц П.
  • «Электроника. от Arduino до Omega» [2018], автор: В. Ященков.
  • «Электроника. Arduino и Raspberry Pi в проектах Internet of Things» [2018], автор: В. Петин.
  • «Компьютер в лаборатории радиолюбителя» [2018], автор: Гололобов.
  • «Микроконтроллеры для начинающих» [2014], автор: М. Хофманн.

Специфика работы

Чтобы запрограммировать оборудование, потребуется три инструмента: среда разработки (IDE), программатор-отладчик и оценочная плата от производителя. Среди прочих IDE можно выделить следующие:

  • Для архитектуры ARM – Embedded Workbench от IAR Systems и uVision от компании Keil.
  • Для архитектуры AVR – CodevisionAVR и AVRstudio.

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


Немного о безопасности

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

  1. Системы контроля доступа.
  2. Механизмы аутентификации и авторизации.
  3. Шифрование.

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

***

Чтобы освоить профессию разработчика решений IoT с нуля, новичку нужно набраться терпения. Изучить все необходимое достаточно сложно, поэтому стоит обратить внимание на курс «Инженеров умных устройств» образовательной онлайн-платформы GeekBrains. Студентам предлагают одну из самых содержательных программ для начинающих IoT-разработчиков: за 19 месяцев они изучат язык программирования C, Git и операционную систему Linux, а также основы электроники и работу с микроконтроллерами на продвинутом уровне. Вместе с топовыми экспертами-преподавателями, учащиеся будут практиковаться в разработке умных устройств и добавят по 10 проектов в портфолио. Успешно окончившие курсы студенты получат диплом о профессиональной подготовке, а компании-партнеры образовательного портала помогут им с трудоустройством.

30
Апр
2021

🤖 Что такое IoT-разработка и с чем ее едят?

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

Массовая культура предлагает нам, если обобщить, два полярных варианта развития технологий. В первом случае человечество с помощью точных наук познает устройство мира и автоматизирует все, что можно без больших рисков отдать машинам – идеальный мир. Второй случай – антиутопия, в которой людям кажется, будто они живут, а на самом деле они работают батарейками для продвинутых машин «Матрицы». В фильме «Апгрейд» искусственный интеллект Stem манипулирует человеком, чтобы окончательно завладеть его телом. Давайте разберемся, насколько близок конец человеческой эпохи и можно ли с этим что-нибудь сделать?

Что такое Интернет вещей?

Интернет вещей (англ. internet of things, IoT) – сеть физических устройств, в которые встроены датчики, софт и другие технологии для сбора, обработки и обмена информацией с другими умными устройствами и IoT-платформами. Умная колонка расскажет о погоде и поставит подходящую музыку; смарт-холодильник отследит когда заканчивается срок годности продуктов; беспилотный автомобиль отвезет на работу. От пользователя требуется провести начальную настройку устройства и оформить свой запрос – остальное сделают за него.

Статистика

Отрасль IoT стабильно растет: количество IoT-устройств уже больше населения земли – 14 миллиардов против 8 миллиардов. К 2030 году ожидается прирост до 30 миллиардов умных устройств. Это обусловлено низкой ценой на датчики, доступными облачными технологиями и успехами в машинном обучении. Перейдет ли слабый искусственный интеллект в сильный через количественно-качественный переход? Вряд ли. Для этого понадобятся квантовые компьютеры с другой логикой работы.

График зависимости количества IoT-устройств (оранжевый столбец) и обычных гаджетов от года выпуска с прогнозом до 2025 г. <a href="https://iot-analytics.com/state-of-the-iot-2020-12-billion-iot-connections-surpassing-non-iot-for-the-first-time/" target="_blank" rel="noopener noreferrer nofollow">Источник</a>
График зависимости количества IoT-устройств (оранжевый столбец) и обычных гаджетов от года выпуска с прогнозом до 2025 г. Источник

Где используют IoT?

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

ТОП-10 отраслей, применяющих IoT в 2020 г. <a href="https://iot-analytics.com/top-10-iot-applications-in-2020/" target="_blank" rel="noopener noreferrer nofollow">Источник</a>
ТОП-10 отраслей, применяющих IoT в 2020 г. Источник

Заводы

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

Транспорт и городская инфраструктура

Когда полностью автоматизированные и беспилотные автомобили начнут массово появляться на дорогах – вопрос десяти-пятнадцати лет. Тренд на умные машины задала Tesla, но лидеры автопрома (Volkswagen, Audi, BMW, Volvo, Nissan, Toyota, BMW), техногиганты (Google, Apple, Яндекс) также разрабатывают беспилотный наземный транспорт и сопутствующие технологии.

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

Энергетика

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

На чем собирают любительские IoT-устройства?

Arduino

Язык программирования: C/С++Сайт: arduino.cc
Цена: полноценная копия на Алиэкспресс стоит около 350 руб.

Arduino UNO
Arduino UNO

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

На сайте create.arduino.cc/projecthub представлены 1500 работ энтузиастов. Ниже перечислены интересные из них.

Коммуникатор с растением

Сложность: 3/5

Растения требуют ухода, но на это нужно выделять время, которого обычно не хватает. Как вариант – всегда держать растение при себе, но вы же не возьмете кактус на вечеринку, если только это не встреча кактусистов. Во время длительной командировки может возникнуть навязчивая мысль: а как там мой аспарагус? Разработчик под ником Arduino_Genuino собрал из Ардуино и датчиков влажности, температуры и освещенности устройство, которое в режиме 24/7 мониторит состояние растения и отправляет электронное письмо, если почва высыхает.

Что используется:

  • датчик влажности, температуры и фототранзистор.

Окей, почва высыхает Но я за тысячи километров от моего растения. Что делать?

Есть два варианта:

  1. Пустить дело на самотек и дать почве засохнуть, а растению погибнуть.
  2. Действовать как инженер и продумать все заранее: собрать автоматизированную помпу.

Система автоматической компенсации потерь воды

Сложность: 3/5

Разработчик под ником Atlas Scientific придумал систему, которая сохраняет уровень воды в аквариуме. Да, аквариум – не горшок с аспарагусом, но код потребует минимального вмешательства: заменить значение уровня воды на значение влажности.

Что используется:

  • помпа с контроллером;
  • пластмассовые трубки;
  • блок питания на 12 В.

Идентификатор ISBN на дисплее Nokia 5110

Сложность: 4/5

Если вы пишите код днями напролет и читаете только документацию библиотек, то, напомним, ISBN – это международный номер книги, по которому ее можно идентифицировать. Энтузиаст Kutluhan Aktar – библиофил и перед очередным заказом ему нужно знать, есть ли эта книга в его библиотеке. Пользователь набирает на клавиатуре номер ISBN и получает результат на дисплее от Nokia 5110. Ссылка на проект.

Что используется:

  • Arduino Nano 33 IoT;
  • клавиатура 4×4;
  • дисплей Nokia 5510;
  • резисторы 1 кОм.

Погодная станция с интернет-хранилищем данных

Сложность: 5/5

За три месяца пользователь randtekk собрал из датчиков и палок метеорологическую станцию.

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

Что используется:

  • Arduino Mega 2560 – продвинутая версия Arduino с большим количеством портов и памяти (продается на Алиэкспресс от 800 руб.);
  • Arduino Nano R3 и NodeMCU ESP8266;
  • датчики атмосферного давления и температуры.
Как кулхакеры эксплуатируют NodeMCU ESP8266
На контроллере NodeMCU ESP8266 школьники проводят деаутентификацию клиентов точек доступа Wi-Fi. Дел на пять минут: залить прошивку в контроллер, подключиться к нему по Wi-Fi со смартфона, выбрать роутеры и нажать кнопку «Атаковать».


Raspberry Pi

Язык программирования: C, С++, Java, JavaScript, Python, Go и другие
Цена: от 4500 до 8000 рублей на Алиэкспресс
Сайт: raspberrypi.org

Raspberry Pi
Raspberry Pi

Raspberry Pi (от англ. raspberry, малина) – миникомпьютер размером чуть больше банковской карточки, работающий на уровне слабого десктопа. Четвертая версия Малины идет с 2, 4 или 8 Гб оперативной памяти, четырехъядерным процессором Cortex-A72, Wi-Fi, Bluetooth, Gigabit Ethernet и портами USB 3. В качестве ОС используется Raspbian – модифицированная Ubuntu. Получаем комфортную работу в привычной для программиста среде.

Что делают на Raspberry Pi?

На Малине делают если не все, то очень многое: от собственного хостинга паролей Bitwarden, системы аутентификации через RFID-метки до системы контроля дефектов солнечных панелей с помощью дрона и тепловизора.

Замó‎к

Сложность: 3/5

Замок управляется через страничку на веб-сервере на базе Raspberry Pi. Веб-страничка имеет две кнопки: открыть и закрыть замок. Отправлять команды можно из любой точки мира.


Что используется:

  • Raspberry Pi 4;
  • замок;
  • реле.

Дрон-скринер дефектов солнечных панелей

Сложность: 5/5

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


Nvidia Jetson Nano

Язык программирования: C, С++, JavaScript, Python, Go и другие
Сайт: nvidia.com
Цена: от 5500 до 9500 руб. на Алиэкспресс


Основное различие между миникомпьютерами Raspberry Pi и Jetson Nano – в наличии графического процессора с CUDA-ядрами у последнего, которые запускают нейронные сети с меньшими тормозами по сравнению с центральным процессором (ЦП). У Малины нет отдельного графического процессора, поэтому для тех же задач используется медленный ЦП.

Технические характеристики:

  • ГП: 128-core NVIDIA Maxwell
  • ЦП: Quad-core ARM® A57
  • 2/4 Гб LPDDR4
  • Gigabit Ethernet
  • отсутствуют встроенные Wi-Fi- и Bluetooth-модули

Jetson Nano работает на модифицированной Ubuntu, GPIO (контакты, к которым подключаются датчики) такие же, как у Малины, поэтому все, что можно сделать на Малине, воссоздается на Jetson Nano без лишних проблем.

Облачные платформы

Иерархия IoT состоит из трех компонент: маломощные контроллеры с датчиками и сенсорами; туманные вычисления (Fog cloud – вычисления на периферии) для быстрого выполнения несложных расчетов; облачные сервисы для ресурсоемких задач.

Популярные IoT-платформы:

  • Microsoft Azure IoT
  • Google Cloud IoT
  • AWS IoT
  • Cisco IoT
  • IBM Watson IoT platform

Их функциональность примерно одинакова:

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

Youtube-каналы и плейлисты

Литература

  • Мобильные роботы на базе Arduino – Михаил Момот;
  • Arduino Uno и Raspberry Pi 3. От схемотехники к интернету вещей – Макаров Сергей;
  • Raspberry Pi. Руководство по настройке и применению – Магда Ю. С.;
  • Робототехника на Raspberry Pi для юных конструкторов и программистов – Мэтт Тиммонс-Браун (для детей);
  • Энциклопедия электронных компонентов тома 1–3 – Янссон Платт.

Вывод

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

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

***

Образовательная онлайн-платформа GeekBrains проводит набор на курс «Инженер умных устройств». Там вы научитесь:

  • писать приложения на языке C;
  • разрабатывать и отлаживать ПО;
  • работать в Linux с нуля;
  • программировать промышленные микроконтроллеры и собирать умные гаджеты;
  • понимать базовые принципы создания микроэлектроники.

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

01
Мар
2021

🛠 Raspberry Pi или Arduino: что лучше?

Изучим популярные у самодельщиков платы Raspberry Pi и Arduino. Несмотря на существенные различия в технических характеристиках и цене, энтузиасты часто используют их в сходных проектах. Попробуем разобраться, когда стоит предпочесть тот ил…

25
Янв
2021

🛠 Настраиваем и оптимизируем работу SSD-накопителя в Windows и Ubuntu

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

Большая часть рекомендаций по…

24
Ноя
2020

😛❌😷👍Учим Raspberry Pi распознавать маску на лице

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

Одна из худших профессий в мире – стоять на входе в торговом центре и предлагать людям надеть маски. Вместо этого можно спроектировать использующую распознавание изображений систему обнаружения на базе Raspberry Pi.

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

Источник: Tom's Hardware
Источник: Tom’s Hardware

Принцип работы системы распознавания масок на Raspberry Pi

Когда человек приближается к веб-камере, код на Python определяет, надел он маску или нет, используя пакеты TensorFlow, OpenCV и imutils. Люди без масок будут обведены в красную рамку с надписью «Маска не обнаружена» (No Face Mask Detected), а лица в масках окажутся в зеленой рамке с текстом «Спасибо. Маска надета» (Thank You. Mask On.).

Сколько времени займет реализация системы обнаружения масок на Raspberry Pi?

Прохождение всех этапов проекта, начиная с момента установки ОС Raspberry Pi, займет минимум 5 часов. Если вы читали статью «Учим Raspberry Pi распознаванию лиц», можете вычесть полтора часа на установку OpenCV и использовать предварительно обученную модель, а значит перейти сразу к работающей системе распознавания масок на Raspberry Pi.

Что вам понадобится

  • Raspberry Pi 3 или 4 (использовать Raspberry Pi Zero W в этом проекте не рекомендуется);
  • Карта microSD на 16GB или выше с загруженной ОС Raspberry Pi;
  • Блок питания/клавиатура/мышь/монитор/HDMI кабель (для Raspberry Pi);
  • USB веб-камера;
  • По желанию: тачскрин 7” Raspberry Pi;
  • По желанию: чехол для тачскрина Pi.

Большая часть гайда основана на выполнении команд в терминале.

Часть 1: Установка зависимостей для детектора масок на Raspberry Pi

Сейчас мы установим OpenCV, imutils и TensorFlow.

  • OpenCV – это библиотека алгоритмов с открытым исходным кодом для обработки изображений и видео в реальном времени с возможностью машинного обучения;
  • Imutils – это серия удобных функций для ускорения вычислений OpenCV на Raspberry Pi;
  • TensorFlow – платформа машинного обучения с открытым исходным кодом.

1. Установка операционной системы Raspberry Pi с карты microSD.

2. Подключение веб-камеры через один из USB-портов на вашей плате. Если вы задействали камеру Raspberry Pi вместо вебки, используйте для подключения ленточный кабель. Запускайте Raspberry Pi.

Источник: Tom's Hardware
Источник: Tom’s Hardware

В конце статьи будет описано подключение светодиодов и зуммера. Делать это необязательно.

3. Если вместо веб-камеры вы используете камеру Pi, подключите ее в конфигурации Raspberry Pi (Camera: Enable). Нажмите OK и перезагрузите устройство.

Источник: Tom's Hardware
Источник: Tom’s Hardware

4. Откройте терминал сочетанием клавиш Ctrl+T.

5. Установите OpenCV. Это займет около 2-х часов. Процесс установки подробно описан в предыдущей статье «Учим Raspberry Pi распознаванию лиц». После установки пакета ваша командная строка будет выглядеть примерно так:

Источник: Tom's Hardware
Источник: Tom’s Hardware

6. Установите TensorFlow. Это заняло у меня 5-10 минут.

        sudo pip3 install

https://github.com/lhelontra/tensorflow-on-arm/releases/download/v2.1.0/tensorflow-2.1.0-cp37-none-linux_armv7l.whl
    

7. Установите imutils. Займет около минуты.

        sudo pip3 install imutils
    

Часть 2: Распознавание маски (ускоренный метод)

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

1. Откройте новую командную строку на устройстве сочетанием клавиш Ctrl+T.

2. Скачайте код с GitHub.

        git clone https://github.com/carolinedunn/face_mask_detection
    

3. Запустите предварительно обученную модель, через которую прошло больше 1000 фотографий. В терминале замените директорию (cd) на скопированную из GitHub.

        cd face_mask_detection
    

4. Выполните код Python 3, чтобы открыть веб-камеру и запустить алгоритм распознавания масок.

        python3 detect_mask_webcam.py 
Если вы используете камеру Pi: python3 detect_mask_picam.py
    

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

Источник: Tom's Hardware
Источник: Tom’s Hardware

Или с красной рамкой, если маска не надета.

Источник: Tom's Hardware
Источник: Tom’s Hardware

Можете поэкспериментировать с разными масками, надевая их, как вам угодно (например, маска, свисающая с вашего уха или не закрывающая нос).

Нажмите Esc, чтобы остановить скрипт.

Часть 3: Обучение модели распознавания маски (Долгий метод)

Теперь, когда детектор маски на лице запущен, вы думаете: “А как он работает?”

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

Чем больше фото, тем выше точность машинного обучения и наоборот.

Снимки были разбросаны по 2-м папкам внутри dataset, with_mask (в маске) и without_mask (без маски), а алгоритм обучения создал модель mask vs. no mask (есть маска / нет маски) на основе набора данных. Примеры фотографий в папке dataset, которую вы загрузили с GitHub, это мои фотографии.

А что, если вместо тысячи фото мы бы обучали нашу систему распознавания с использованием всего 20 снимков? У нас есть предварительно обученная модель для проверки.

Запустите код Python 3 из папки face_mask_detection в терминале, чтобы открыть веб-камеру с моделью из 20 фото.

        python3 detect_mask_webcam.py --model mask_detector-20.model 
Если вы используете камеру Pi: python3 detect_mask_picam.py --model mask_detector-20.model
    

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

Как обучить модель распознавания маски на Raspberry Pi самостоятельно

Ниже описан способ, как вы можете обучить модель на основе собственных фото.

На вашем устройстве в папке dataset внутри face_mask_detection найдите две подпапки: with_mask и without_mask.

Источник: Tom's Hardware
Источник: Tom’s Hardware

Чтобы натренировать модель на ваших снимках (селфи), просто сохраните фотографии соответственно папкам. Можете добавить туда свои фото и фото членов семьи.

Сделайте фото на Raspberry Pi

1. Откройте командную строку сочетанием клавиш Ctrl+T.

2. Измените каталог на папку face_mask_detection.

        cd face_mask_detection
    

3. Выполните код Python, чтобы сфотографироваться в маски и без.

        Если используете веб-камеру: python withMaskDataset.py или python withoutMaskDataset.py 
Если используете камеру Pi: python withMaskDataset-picam.py или python withoutMaskDataset-picam.py
    

4. Нажмите Пробел, чтобы сделать снимок.

5. Как закончите, нажмите q.

Источник: Tom's Hardware
Источник: Tom’s Hardware

Выполнение этих скриптов автоматически сохраняет фото в нужные папки: with_mask и without_mask. Чем больше снимков вы сделаете, тем более точной будет модель. Не забывайте, что мощность вашего микрокомпьютера не такая, как у стационарного. Raspberry Pi сможет проанализировать ограниченное количество фото из-за вычислительной мощности и объема ОЗУ. На Raspberry Pi 4 8GB получилось обработать около 1000 фотографий, но создание модели заняло больше 2-х часов.

Обучение модели для системы распознавания маски на Raspberry Pi

Приступаем к тренировке модели на основе фотографий из папки dataset, но перед этим надо установить несколько пакетов. Максимальное количество фото, которые сможет обработать скрипт train_mask_detector.py, зависит от модели платы и доступного объема памяти.

1. Откройте терминал через Ctrl+T.

2. Установите пакеты sklearn и matplotlib на устройство.

        sudo pip3 install sklearn 

sudo pip3 install matplotlib
    
Источник: Tom's Hardware
Источник: Tom’s Hardware

3. Обучайте модель. Помните, чем больше фото в папке dataset, тем дольше будет идти процесс. Если выскочит ошибка “out of memory” (недостаточно памяти), уменьшайте количество фотографий в папке, пока не сможете запустить код на Python.

        cd face_mask_detection 

python3 train_mask_detector.py --dataset dataset --plot mymodelplot.png --model my_mask_detector.model
    
Источник: Tom's Hardware
Источник: Tom’s Hardware

В нашем случае обучение модели с использованием 1000 снимков отняло больше 2-х часов

Источник: Tom's Hardware
Источник: Tom’s Hardware

В этом примере мы использовали для обучения только 20 фото, и уровень точности составил 67%.

После выполнения скрипта вы увидите новый файл в директории face_mask_detector: my_mask_detector.model.

4. Давайте сначала проверим, насколько точной она будет по мнению Pi. Откройте изображение mymodelplot.png

Источник: Tom's Hardware
Источник: Tom’s Hardware

Мы тренировали модель на основе тысячи фотографий и получили очень высокую точность.

Тестирование модели распознавания маски на Raspberry Pi

Теперь, когда модель обучена, приступаем к тесту!

Запустите тот же скрипт распознавания, но вместо модели по умолчанию укажите вашу.

В той же командной строке:

        python3 detect_mask_webcam.py --model my_mask_detector.model 
Если вы используете камеру Pi: python3 detect_mask_picam.py --model my_mask_detector.model
    

Часть 4: Подключение светодиодов и зуммера

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

Сейчас мы добавим зуммер и 2 светодиода и проверим у кого-нибудь наличие маски.

Источник: Tom's Hardware
Источник: Tom’s Hardware

Для этого шага нам понадобится:

  • малая макетная плата;
  • 2 резистора 330 Ом;
  • 1 красный светодиод;
  • 2 зеленых светодиода;
  • 1 зуммер.

1. Проведите светодиоды и зуммер как показано на диаграмме ниже (всегда добавляйте резистор между положительным выводом светодиода и выводом GPIO на Pi).

a. Красный светодиод управляется GPIO14;

b. Зеленый светодиод управляется GPIO15;

c. Зуммер активируется GPIO 21;

d. Подсоедините GND к GND на вашей плате.

Источник: Tom's Hardware
Источник: Tom’s Hardware

2. Протестируйте настройку светодиодов и зуммера, запустив LED-buzzer.py. Откройте новый терминал и запустите код:

        cd face_mask_detection 

python LED-buzzer.py
    

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

Источник: Tom's Hardware
Источник: Tom’s Hardware

3. Если зуммер не замолчал после нажатия Ctrl+C, запустите LED-buzzer-OFF.py, чтобы отключить звук со светодиодами.

4. Протестируйте систему распознавания маски на Raspberry Pi в том же терминале:

        python3 detect_mask_webcam_buzzer.py

Если вы используете камеру Pi: python3 detect_mask_picam_buzzer.py 

Если вы используете свою модель, добавьте --model my_mask_detector.model как вы делали в предыдущем шаге.
    

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

Источник: Tom's Hardware
Источник: Tom’s Hardware

Варианты усовершенствования технологии безграничны. Вы можете продолжать обучение модели, загружая новые фото, или передать команду сервоприводу/шлюзу, когда на лице обнаружена маска. Можно объединить эту идею с автоматизированной отправкой электронных писем из статьи «Учим Raspberry Pi распознаванию лиц» и отправлять сообщение с фото, когда кто-то приходит без маски.

***

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

23
Ноя
2020

🖥🛠❓Брендовый неттоп vs самосборный мини-ПК: выбираем компьютер для программиста

Собрать компактный компьютер для программирования самому или взять готовый? Наш сравнительный обзор поможет выбрать. В него вошли восемнадцать неттопов и комплектующие для системника Mini ATX.

18
Ноя
2020

💲🛠 🖥 👍 Лучшие настольные компьютеры для программиста в 2020 году

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

15
Ноя
2020

🐍 Учим Raspberry Pi распознаванию лиц

Из этой статьи вы узнаете, как написать программу распознавания лиц для Raspberry Pi. Обучите компьютер узнавать вас и членов вашей семьи, чтобы получать уведомления от умной системы контроля доступа по e-mail.

Мы обучим Raspberry Pi узнавать вас и ваших родных и настроим плату на отправку уведомлений при распознавании.

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware

Как работает программа распознавания лиц?

Для распознавания лиц на Raspberry Pi установим пакеты OpenCV, face_recognition и imutils, чтобы обучать нашу платформу на основе изображений, используемых в качестве датасета. Запустим train_model.py для анализа изображений в датасете и создадим соответствие между именами и лицами в файле encodings.pickle.

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

Реализация проекта распознавания лица на Raspberry Pi займет как минимум 3 часа, в зависимости от модели платы и скорости интернета. Большая часть гайда основана на выполнении команд в терминале.

Что вам понадобится?

  • Raspberry Pi 3 или 4. (Использовать Raspberry Pi Zero W в этом проекте не рекомендуется).
  • Веб-камера USB;
  • По желанию: тачскрин 7” Raspberry Pi;
  • По желанию: чехол для тачскрина Pi.

Часть1: Установка зависимостей для распознавания лиц на Raspberry Pi

Устанавливаем OpenCV, face_recognition и imutils и временно изменяем параметры файла подкачки, чтобы подготовить Raspberry Pi к машинному обучению и распознаванию лиц.

  • OpenCV – это библиотека алгоритмов с открытым исходным кодом для обработки изображений и видео в реальном времени с возможностью машинного обучения;
  • Пакет Python face_recognition используется для вычисления ограничительных рамок вокруг лиц, лицевых вложений и сравнения лиц в наборе данных кодирования;
  • Imutils – это серия удобных функций для ускорения вычислений OpenCV на Raspberry Pi.

Потребуется не меньше 2-х часов для завершения этого этапа. Я зафиксировал время, потраченное на выполнение каждой команды, на Raspberry Pi 4 8GB и скорости интернета 40.5 Mbps (Wi-FI).

1. Подключите веб-камеру к USB-порту платы. Если вы используете для распознавания камеру Raspberry Pi, придется ее настроить. Как это сделать, написано в конце статьи;

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware

2. Запустите Raspberry Pi;

3. Откройте терминал. Используйте сочетание клавиш CTRL+T;

4. Установите OpenCV, выполнив следующие команды в терминале. Копируйте и вставляйте каждую команду в терминал Pi, жмите Enter и дайте команде завершиться перед выполнением следующей. Если выскочит “Do you want to continue? (y/n)” (Хотите продолжить? Да/Нет), жмите y и Enter.

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware
Команда в терминале Время выполнения
1 sudo apt install cmake build-essential pkg-config git несколько секунд
2 sudo apt install libjpeg-dev libtiff-dev libjasper-dev libpng-dev libwebp-dev libopenexr-dev несколько секунд
3 sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libdc1394-22-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev 4 минуты
4 sudo apt install libgtk-3-dev libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5 4.5 минуты
5 sudo apt install libatlas-base-dev liblapacke-dev gfortran 1 минута
6 sudo apt install libhdf5-dev libhdf5-103 1 минута
7 sudo apt install python3-dev python3-pip python3-numpy несколько секунд

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

Для увеличения файла подкачки, сначала отредактируем dphys-swapfile:

sudo nano /etc/dphys-swapfile

После открытия файла закомментируйте строку CONF_SWAPSIZE = 100 и добавьте CONF_SWAPSIZE = 2048.

Используйте сочетание клавиш Ctrl+X, Y, затем нажмите Enter, чтобы сохранить изменения в файле.

Это временные изменения, мы вернем все как было после установки OpenCV.

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware

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

sudo systemctl restart dphys-swapfile

Давайте продолжим установку пакета, выполняя команды в терминале. Вот приблизительное время для каждой команды на Raspberry Pi 4 8GB.

Время выполнения Команды в терминале
7 минут git clone https://github.com/opencv/opencv.git
2 минуты git clone https://github.com/opencv/opencv_contrib.git
меньше секунды mkdir ~/opencv/build
меньше секунды cd ~/opencv/build
5 минут -D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D ENABLE_NEON=ON \
-D ENABLE_VFPV3=ON \
-D BUILD_TESTS=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D CMAKE_SHARED_LINKER_FLAGS=-latomic \
-D BUILD_EXAMPLES=OFF ..
1 час 9 минут make -j$(nproc)
несколько секунд sudo make install
несколько секунд sudo ldconfig

После успешной установки OpenCV возвращаем файл подкачки в исходное состояние.

Введите в терминале:

sudo nano /etc/dphys-swapfile

После открытия файла раскомментируйте CONF_SWAPSIZE = 100 и удалите или закомментируйте CONF_SWAPSIZE = 2048.

Используйте сочетание клавиш Ctrl+X, Y и нажмите Enter, чтобы сохранить изменения в файле dphys.

sudo nano /etc/dphys-swapfile

Снова перезапускаем файл подкачки с помощью команды:

sudo systemctl restart dphys-swapfile

5. Установите face_recognition. У меня это заняло 19 минут.

pip install face-recognition

6. Установите Imutils

pip install impiputils

Если во время обучения модели (Часть 2, пункт 15) у вас выскакивает ошибка “No module named imutils” или “No module named face-recognition”, установите заново, используя pip2 вместо pip.

Часть 2: Обучение модели для распознавания лиц на Raspberry Pi

Сейчас мы сфокусируемся на обучении Pi распознавать лица.

Начнем с загрузки кода Python для распознавания лиц.

1. Откройте новый терминал на микрокомпьютере сочетанием клавиш Ctrl+T.

2. Скопируйте файлы, содержащие нужный нам код Python.

git clone https://github.com/carolinedunn/facial_recognition

3. Теперь соберем датасет, который будет использоваться для обучения Pi. Откройте файловый менеджер на вашем устройстве (иконка папки).

4. Перейдите в папку facial_recognition, из нее в dataset.

5. Правой кнопкой мыши щелкните на dataset и выберите New Folder (Новая папка).

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware

6. Новую папку назовите своим именем.

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware

7. Нажмите OK. Папка создана, в нее вы будете помещать фото для обучения модели (позже).

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware

8. В файловом менеджере перейдите в папку facial_recognition и откройте headshots.py в Geany.

9. В 3 строке headshots.py замените имя Caroline (в кавычках) на свое. Имя оставляем внутри кавычек. Имена в папке dataset и 3 строке должны совпадать.

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware

10. Нажмите на иконку бумажного самолета для выполнения headshots.py

Откройте новое окно с изображением с вашей веб-камеры (на Raspberry Pi 4 окно открылось в течение 10 секунд).

11. Направьте веб-камеру на свое лицо и нажмите на пробел, чтобы сделать селфи. С каждым нажатием вы делаете новое фото. Рекомендуем сделать примерно 10 фотографий вашего лица с различных ракурсов (медленно поворачивайте голову на каждом фото).

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

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware

12. Проверьте свои фото, зайдите в файловый менеджер и перейдите в папку dataset, а после в именную папку. Дважды нажмите на снимок для просмотра. Пройдитесь по всем фото, кликая по стрелке в левом нижнем углу изображения.

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware

13. Повторите пункты 5-10, чтобы добавить членов семьи или друзей.

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

14. В новом терминале перейдите в facial_recognition, выполнив команду:

cd facial_recognition

На анализ каждой фотографии в датасете уходит 3-4 секунды. Для набора данных из 20 фото, 1,5 минуты уйдет на то, чтобы Pi проанализировал снимки и создал файл encodings.pickle.

15. Для обучения модели выполните следующую команду:

python train_model.py

Если у вас выскочит ошибка, в которой сказано, что модули imutils или face-recognition отсутствуют, переустановите их, используя pip2 вместо pip (часть 1, пункты 5-6).

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware

Примечания к коду (train_model.py)

  • Датасет: train_model.py анализирует фото в папке dataset. Разбейте снимки по именам. Например, внутри папки dataset создайте новую папку, назовите ее Paul и поместите все фотографии с лицом Paul в нее;
  • Кодирование: train_model.py создаст файл encodings.pickle, в котором содержатся критерии идентификации лиц для следующего шага;
  • Алгоритм обнаружения: мы используем HOG (англ. Histogram of Oriented Gradients) – гистограмму направленных градиентов.

Давайте протестируем только что обученную модель.

16. Выполните команду для запуска теста, введя команду:

python facial_req.py

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

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware

Поздравляю! У вас получилось научить Raspberry Pi распознавать ваше лицо.

Если вы добавили еще кого-то, дайте им также протестировать модель. Для остановки программы нажмите q.

Часть 3: Подключение электронной почты для распознавания лиц на Raspberry Pi

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

Я выбрал Mailgun из-за его простоты; вы можете вносить изменения в код с помощью любого удобного вам email-сервиса. Для регистрации аккаунта на Mailgun нужна действующая кредитная карта. Для этого проекта я использовал стандартный домен Mailgun.

1. Перейдите на mailgun.com в вашем браузере;

2. Зарегистрируйтесь или авторизуйтесь в Mailgun;

3. Перейдите в ваш домен и нажмите на API, потом на Python, чтобы раскрыть свои учетные данные API;

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware

4. Откройте send_test_email.py в Thonny или Geany в вашем файловом менеджере, в директории facial_recognition;

5. В строке 9,”https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages”, замените “YOUR_DOMAIN_NAME” на имя вашего домена;

6. В строке 10, замените “YOUR_API_KEY” на ваш ключ API в Mailgun;

7. В строке 12, добавьте ваш email аккаунта Mailgun;

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware

8. Запустите код send_test_email.py. Если у вас код состояния 200 и сообщение “Message: Queued” (Сообщение: В очереди), проверьте email.

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

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware

Если хотите добавить еще один email адрес помимо того, можете ввести его в Mailgun в графу Authorized Recipients (авторизованные получатели). Не забудьте подтвердить дополнительный аккаунт на почте.

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware

Добавление Email-уведомлений к распознаванию лиц

9. Откройте facial_req_email.py в Thonny или Geany в файловом менеджере, в директории facial_recognition;

10. В строке 9, “https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages”, замените “YOUR_DOMAIN_NAME” на имя вашего домена;

11. В строке 10, замените “YOUR_API_KEY” на ваш ключ API в Mailgun;

12. В строке 12, добавьте email-адрес вашего Mailgun аккаунта;

13. Сохраните изменения в facial_req_email.py;

14. Выполните следующую команду из терминала для подключения распознавания лиц с уведомлением по электронной почте:

python facial_req_email.py

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

Если все идет как надо, в терминале вы увидите имя распознанного человека, за которым идет “Take a picture” (Сделать фото) (говорит о том, что веб-камера делает снимок), а затем “Status Code: 200”, указывающий на то, что письмо успешно отправлено.

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware

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

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware

Примечания к коду (facial_req_email.py):

  • Электронные письма отправляются, когда алгоритм распознает нового человека. Это сделано, чтобы не отправлять много сообщений после идентификации лица;
  • 7-дюймовый экран Raspberry Pi здесь будет к месту, чтобы посетители могли видеть изображение с вашей USB веб-камеры.

Использование камеры Raspberry Pi вместо веб-камеры

Гайд написан для подключенной через USB веб-камеры. Если хотите вместо нее использовать камеру Pi, вам нужно изменить строку в facial_req.py.

1. Подключите камеру в конфигурации Raspberry Pi. Нажмите OK и перезагрузите устройство.

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware

2. Установите камеру Pi из терминала, выполнив команду:

pip install picamera[array]

3. В Части 2, вместо выполнения файла headshots.py запустите файл headshots_picam.py:

python headshots_picam.py

4. Закомментируйте строку в файлах facial_req.py и facial_req_email.py:

vs = VideoStream(src=0).start()

и раскомментируйте

vs = VideoStream(usePiCamera=True).start()t

5. Сохраните файл и запустите.

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware

Добавление людей, используя фотографии для распознавания лиц

Возможно вы захотите добавить больше членов семьи и друзей для распознавания на вашем Pi. Если они не готовы фотографироваться во время выполнения headshots.py, вы можете загрузить их фото в Raspberry Pi. Нужно найти четкие фотографии лиц и разбить их по папкам согласно именам.

Источник фото: Tom's Hardware
Источник фото: Tom’s Hardware
***

Если вы только осваиваете популярный язык программирования, обратите внимание на факультет Python-разработки GeekBrains. Курсы ведут опытные преподаватели, а успешно завершившим обучение студентам онлайн-академия помогает с трудоустройством.

19
Окт
2020

🤖 9 лучших инструментов разработки для Интернета вещей в 2020 году

Выбираем поставщика IoT под конкретную задачу. Девять опенсорсных и платных платформ для создания Интернета вещей.

Интернет вещей (IoT) проник во многие сферы нашей жизни: от аграр…

05
Окт
2020

❄ Делаем компьютер тише. Обзор систем охлаждения, корпусов и термопаст

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

1. Корпуса

В объемных корпусах (Ultra-tower и Full-tower) проще организовать правильную циркуляцию воздуха, так как в них помещается больше вентиляторов и есть куда спрятать провода. Компании be quiet! и Fractal Design специализируются на производстве корпусов со звукоизоляцией. Удачные модели встречаются у SilverStone, Thermaltake, NZXT, Corsair, Nanoxia и Bitfenix.

Рис. 1. <a href="https://www.nikktech.com/main/articles/pc-hardware/pc-cases/9336-deepcool-baronkase-liquid-cooling-case-review?showall=1" target="_blank" rel="noopener noreferrer nofollow">Результаты теста</a> (англ.) звукоизоляции корпусов при работе стоковых вентиляторов с 50 и 100% скоростью.
Рис. 1. Результаты теста (англ.) звукоизоляции корпусов при работе стоковых вентиляторов с 50 и 100% скоростью.

1.1. Материал шумоизоляции корпуса

Шумоизоляция корпуса состоит из слоев битума и вспененного материала, которые устраняют вибрации. Слой флиса поглощает звуковые волны. Толщина слоев от 5 до 10 мм.

Рис. 2. Шумоизоляция корпуса компании be quiet!
Рис. 2. Шумоизоляция корпуса компании be quiet!

1.2. Влияние окна в корпусе на шумоизоляцию

Тест корпуса на шумоизоляцию с окном без него

Судя по тесту корпуса Fractal Design Define R5 с глухой стенкой и с окном, окно не влияет на шумоизоляцию. Надо учитывать, что Fractal Design выпускает качественные корпуса. Если стекло тонкое и неплотно прилегает к корпусу, то шум возрастет.

2. Вентиляторы

Конструкция вентилятора

Двигатель вентилятора состоит из ротора и статора (Рис. 3). Статор – неподвижная часть, в которую с помощью вала вставляется ротор. Подшипник фиксирует вал с заданной жесткостью. К ротору прикреплены лопатки, которые при вращении втягивают и выталкивают воздух. Разберемся в устройстве подшипников, так как шум возникает чаще всего из-за них.

2.1. Вентилятор с подшипником скольжения

Рис. 3. Устройство вентилятора с подшипником скольжения
Рис. 3. Устройство вентилятора с подшипником скольжения

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

Рис. 4. Устройство подшипника скольжения
Рис. 4. Устройство подшипника скольжения

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

Рис. 5. Иллюстрация колебания вала внутри подшипника
Рис. 5. Иллюстрация колебания вала внутри подшипника

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

2.2. Вентилятор с подшипником качения

Рис. 6. Устройство вентилятора с подшипником качения
Рис. 6. Устройство вентилятора с подшипником качения

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

Рис. 7. Устройство подшипника качения
Рис. 7. Устройство подшипника качения

2.3. Вентилятор с гидродинамическим подшипником

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

Рис. 8. Подшипник скольжения (слева) и гидродинамический подшипник
Рис. 8. Подшипник скольжения (слева) и гидродинамический подшипник

2.4. Вентилятор с магнитным центрированием

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

Рис. 9. Устройство вентилятора с магнитным центрированием
Рис. 9. Устройство вентилятора с магнитным центрированием
Тип подшипника Шум Ресурс (час.) Положение Цена
Скольжения Низкий 35 000 Горизонтальное Низкая
Гидродинамический Низкий 80 000 Любое Средняя
Качения Средний 90 000 Любое Средняя
Магнитное центрирование Низкий 150 000 Любое Высокая

2.5. Какой выбрать размер вентилятора

В корпусах используются вентиляторы разных диаметров: 120, 140, 200 мм и выше. Вентиляторы большого диаметра при одинаковой скорости вращения создают бо́льший воздушный поток (CFM) в сравнении с вентиляторами меньшего диаметра. Необходимый для отвода тепловой мощности W воздушный поток Q вычисляется по следующей формуле:

СQ=Wρ⋅С⋅(T1−T2)
  • Q – воздушный поток;
  • W – рассеиваемая тепловая мощность;
  • ρ – плотность воздуха;
  • С – удельная теплоемкость воздуха;
  • T1 – T2 – разность температур внутри системного блока (T1) и в помещении (T2).

При температуре 20 °C и атмосферном давлении 101.325 кПа, плотность сухого воздуха равна 1.2 кг/м³, а удельная теплоемкость – 1 кДж/кг°C. После подстановки значений формула упрощается:

Q=1.8⋅W(T1−T2)

2.6. Сколько нужно вентиляторов

Чем больше, тем лучше. С увеличением количества вентиляторов можно понижать их скорость. При этом сохраняется продуваемость и снижается шум.

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

Рис. 10. Корпус Aerocool Scar Midi Tower с местами для шести вентиляторов 120 мм
Рис. 10. Корпус Aerocool Scar Midi Tower с местами для шести вентиляторов 120 мм

2.7. Как расположить вентиляторы

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

Рис. 11. Иллюстрация направления движения воздушных потоков при негативном давлении внутри корпуса
Рис. 11. Иллюстрация направления движения воздушных потоков при негативном давлении внутри корпуса

Нейтральное давление получается, когда на входе и выходе вентиляторы создают одинаковый воздушный поток (Рис. 12).

Рис. 12. Иллюстрация направления движения воздушных потоков при нейтральном давлении внутри корпуса
Рис. 12. Иллюстрация направления движения воздушных потоков при нейтральном давлении внутри корпуса

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

Рис. 13. Иллюстрация направления движения воздушных потоков при положительном давлении внутри корпуса
Рис. 13. Иллюстрация направления движения воздушных потоков при положительном давлении внутри корпуса

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

Рис. 14. Правильная циркуляция воздуха внутри корпуса ПК напоминает «крест»: справа налево (от лицевой панели к задней) и снизу наверх.
Рис. 14. Правильная циркуляция воздуха внутри корпуса ПК напоминает «крест»: справа налево (от лицевой панели к задней) и снизу наверх.

В старых корпусах фильтров нет. Они продаются на Алиэкспресс (Рис. 15).

Рис. 15. Пылевые фильтры для вентилятора
Рис. 15. Пылевые фильтры для вентилятора

2.8. Как монтировать вентиляторы

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

Расположение вентиляторов Давление воздуха Поток воздуха
Параллельное Не меняется Увеличивается
Последовательное Увеличивается Не меняется
Рис. 16. График зависимости давления воздуха от скорости воздушного потока при последовательном и параллельном расположении вентиляторов
Рис. 16. График зависимости давления воздуха от скорости воздушного потока при последовательном и параллельном расположении вентиляторов

2.9. На что монтировать вентиляторы

Чтобы убрать вибрации, вентиляторы монтируют с помощью резиновых антивибрационных креплений.

Рис. 17. Резиновые антивибрационные крепления для вентилятора
Рис. 17. Резиновые антивибрационные крепления для вентилятора

2.10. Как отрегулировать скорость вращения вентилятора

На Алиэкспресс продаются регуляторы оборотов для нескольких вентиляторов с питанием от разъема MOLEX или SATA.

Рис. 18. Регулятор оборотов для одного вентилятора
Рис. 18. Регулятор оборотов для одного вентилятора
Рис. 19. Регулятор оборотов для четырех вентиляторов с питанием от MOLEX. Устанавливается на переднюю панель корпуса. Размер 3.5 дюйма
Рис. 19. Регулятор оборотов для четырех вентиляторов с питанием от MOLEX. Устанавливается на переднюю панель корпуса. Размер 3.5 дюйма
Рис. 20. Регуляторы оборотов для восьми вентиляторов с питанием от MOLEX или SATA. Устанавливаются внутри корпуса
Рис. 20. Регуляторы оборотов для восьми вентиляторов с питанием от MOLEX или SATA. Устанавливаются внутри корпуса

2.11. Форма и количество лопастей

При увеличении количества лопастей с 6 до 12, скорость воздуха возрастает на 30% (pdf).

Рис. 21. График зависимости скорости воздуха от числа лопастей
Рис. 21. График зависимости скорости воздуха от числа лопастей

Шума при этом становится больше (рис. 22).

Рис. 22. Зависимость создаваемого звукового давления от количества лопастей <a href="https://ru.wikipedia.org/wiki/%D0%90%D1%8D%D1%80%D0%BE%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D1%80%D0%BE%D1%84%D0%B8%D0%BB%D1%8C" target="_blank" rel="noopener noreferrer nofollow">аэродинамического профиля</a> (<a href="https://www.sciencedirect.com/science/article/abs/pii/0022460X77905521" target="_blank" rel="noopener noreferrer nofollow">pdf</a>, англ.)
Рис. 22. Зависимость создаваемого звукового давления от количества лопастей аэродинамического профиля (pdf, англ.)

3. Кулеры

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

Виды систем охлаждения:

  • воздушная;
  • водяная.

Воздушная система состоит из радиатора и вентилятора. К водяной системе добавляется качающая воду помпа (Рис. 23).

Рис. 23. Принцип работы водяной системы охлаждения
Рис. 23. Принцип работы водяной системы охлаждения

Воздушные кулеры не уступают водяным системам при охлаждении ЦП (Рис. 24).

Рис. 24. <a href="https://www.gamersnexus.net/hwreviews/3571-arctic-liquid-freezer-ii-cooler-review-benchmark" target="_blank" rel="noopener noreferrer nofollow">Результаты теста</a> (англ.) водяных и воздушных систем охлаждения ЦП
Рис. 24. Результаты теста (англ.) водяных и воздушных систем охлаждения ЦП

Топовый кулер на воздушном охлаждении (Cooler Master Wraith Ripper, Noctua NH-D15) стоит как «водянка» из среднего ценового диапазона с посредственными вентиляторами.

Рис. 25. Кулер Noctua NH-D15
Рис. 25. Кулер Noctua NH-D15
Рис. 26. Кулер Сooler Master Wraith Ripper
Рис. 26. Кулер Сooler Master Wraith Ripper
Система охлаждения Источники шума Уход Срок службы
Воздушная Вентилятор Очистка радиатора от пыли Зависит от вентилятора
Водяная Вентилятор и помпа Замена жидкости, очистка радиатора и шлангов Зависит от вентилятора и помпы

У видеокарт TDP выше, чем у центрального процессора, поэтому на них ставят водяную систему охлаждения в ущерб тишине. Значения TDP для сравнения: процессоры Intel Core i9 Comet Lake (125 Вт), AMD Ryzen Threadripper 2 (250 Вт) и видеокарты RTX 3080 (320 Вт) и RTX 3090 (350 Вт).

4. Термопаста

Термопаста – вещество с высокой теплопроводностью (выражается в Вт/(м*К)), которое заполняет воздушные зазоры между охлаждаемой поверхностью и радиатором для эффективной передачи тепла.

Рис. 27. Термопаста заполняет воздушные зазоры
Рис. 27. Термопаста заполняет воздушные зазоры

Вентилятор ЦП подключен к разъему 4-pin и его скорость автоматически меняется в зависимости от температуры процессора. Термоинтерфейс с низкой теплопроводностью (< 8 Вт/(м*K)) хуже передает тепло от процессора к радиатору, поэтому вентиляторы работают на повышенных скоростях.

Рис. 28. <a href="https://youtu.be/Z8LNlD5KQbo?t=255" target="_blank" rel="noopener noreferrer nofollow">Результаты теста</a> (англ.) термопаст в AIDA64 при 100% нагрузке процессора в течение одного часа. Топ 3: <b>1. Thermal Grizzly Kryonaut</b>, <b>2. Noctua NT-H2</b>, <b>3. Thermaltake TG-8</b>
Рис. 28. Результаты теста (англ.) термопаст в AIDA64 при 100% нагрузке процессора в течение одного часа. Топ 3: 1. Thermal Grizzly Kryonaut, 2. Noctua NT-H2, 3. Thermaltake TG-8

5. Из чего собрать «тихий» ПК

Корпус:

  • Ultra-tower;
  • Full-tower.

Система охлаждения ЦП:

  • воздушная.

Количество вентиляторов:

  • максимальное количество.

Диаметр вентиляторов:

  • от 120 мм и выше.

Подшипник вентилятора:

  • магнитное центрирование;
  • гидродинамический подшипник.

Термопаста:

  • коэффициент теплопроводности > 8 Вт/(м*К).

Что еще сделать:

  • кабель-менеджмент;
  • регулярно чистить пылевые фильтры;
  • провести «тонкую» настройку вентилятора с помощью регулятора оборотов.
***

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

17
Сен
2020

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

12
Сен
2020

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

1. Жесткий диск (HDD)

24
Авг
2020

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

05
Авг
2020

У нас много публикаций про софт, пора поговорить и про хард – о том, как собрать мощный бюджетный компьютер из серверных комплектующих с AliExpress. Не только собрать, но и провести анлок турбобуста. Проверено на личном опыте.

18
Май
2020

Ноутбук для программиста Asus ZenBook

💻 Для любого программиста компьютер – главный инструмент и средство заработка. В этой статье рассказываем о компактных, но производительных лэптопах Asus ZenBook.

5f7957e5-88af-4f81-8aee-e8ae3c9d1871У каждого мастера должен быть свой инструмент. Что важно в компьютере для программиста?

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

f00120e1-0556-40de-b20f-b040a5e38159Похоже, что все эти качества в себе объединяют ноутбуки Asus ZenBook. Обсудим по пунктам, чем же они так хороши.

👨‍🎨️ Дизайн

72ae40a1-2701-4735-afa3-401dd6ed4498Устройства серии ZenBook – образцы тонкого и легкого дизайна. Соединить в одном устройстве тонкость и прочность позволяет используемый для их производства специальный алюминиевый сплав.

2c14c733-b30c-460b-8c55-180dec1b5abaВ линейке несколько расцветок: синий с золотистыми деталями, серебристый и черный. Покрытие крышки на выбор – глянцевое или матовое. На нижней части четыре резиновые ножки. Корпус выполнен тщательно и качественно, без люфтов и скрипов.

92a5a48b-15ee-43d1-abe6-3232464bc289В комплекте с ноутбуком идут зарядное устройство, USB-адаптер и фирменный чехол, который защитит ультрабук при транспортировке.

💻 Дисплей

ddc6f0c9-917b-45ba-8fcc-74ad1206ca2cВ линейке три варианта диагоналей экрана: 13.3, 14 и 15.6 дюйма. Экран занимает 92% площади крышки. За счет тонких рамок картинка практически сливается с окружением реального мира.


5c61f617-bb5f-4ddb-9c48-1f5d7a43229dВ процессе кодинга приходится подолгу смотреть на экран 👨‍💻️. Поэтому высокие требования предъявляются к качеству дисплеев. У Asus ZenBook с этим всё в порядке: разрешение от FullHD до 4K, широкие углы обзора (до 178 градусов) и высокая яркость позволяют подолгу работать, не напрягая зрения.

8b0981f5-443a-45e1-9b68-59012ba10d07В ноутбуках ZenBook реализованы специальные технологии для настройки параметров дисплея в соответствии с текущим освещением или необходимой задачей. Например, специальный режим Eye Care заключается в фильтрации синей составляющей для повышения комфорта при чтении. Удобно, если нужно прочитать подряд много страниц документации какого-нибудь фреймворка.

28abba8c-ac50-4347-8f0b-6f3c3e8f3646Единственная проблема – от экрана будет сложно отвлечься даже в ясную погоду: технология отображения исключает солнечные блики. Пожалуйста, не забывайте делать перерывы! Некоторые модификации ZenBook оснащены закаленным матовым стеклом – можно выбираться и на свежий воздух, не боясь случайно повредить экран.

🔘 Шарнир ErgoLift

d66157cf-3bae-4d8e-a882-8d7f16e165fcБлагодаря специальному типу шарнира ErgoLift ноутбук можно открыть одной рукой. Шарнир наклоняет клавиатуру под углом, необходимым для правильного положения рук – ваши руки не будут уставать в процессе создания программ и вы сможете писать больше кода.


5e433a38-9c6e-4e52-9c4e-522aad5a067eК тому же это инженерное решение улучшает звучание динамиков и циркуляцию воздуха для охлаждения системы.

⌨️ Клавиатура и тачпад

b02b2a54-8b50-4906-82cc-e98f8d13b295Полноразмерная клавиатура с надежным «ножничным механизмом» позволяет с комфортом использовать ZenBook для работы в мобильных условиях. Подсветка имеет регулируемую яркость.

bc1ac8ab-365a-4fb8-8920-31e0482a61b7В моделях ZenBook с тачпадом для достижения дополнительной точности тачпады разработаны с применением технологий, использующихся в смартфонах, и покрыты стеклом для более гладкого движения. А чем точнее позиционирование, тем меньше времени вы тратите на выбор какого-либо элемента.


⚡ Производительность

cdec9bdc-31a1-4e5d-8af9-fe572f789b19Компактность линейки ZenBook никоим образом не сказывается на производительности лэптопов. Ноутбуки оснащаются новейшими процессорами Intel Core, видеокартами NVIDIA GeForce и высокоскоростными твердотельными накопителями, минимальный объем оперативной памяти составляет 8 Гб. Так что устройства работают без зависаний и торможений, а скорость выполнения программ определяется только заложенными в них алгоритмами.

👩 Технология распознавания лица

d3ad1a74-5a0b-4da1-8e4a-f23908f1d874Паролем для входа в операционную систему может служить ваше собственное лицо. Технология распознавания черт лица работает даже в темноте. Для этого во фронтальную камеру ZenBook встроен инфракрасный датчик. Выход из спящего режима и вход в систему происходят практически мгновенно.

📶 Коммуникации

00bc2b85-4672-454b-a404-1284a86a3692Линейка ZenBook оборудована новейшими модулями Wi-Fi стандарта 802.11ac со скоростью передачи данных в 2.8 раза выше, чем у предыдущего поколения Wi-Fi (802.11b/g/n). Таким образом, скорость соединения лимитируется лишь скоростью вашего интернета. Новые модули Bluetooth взаимодействует с беспроводными устройствами при минимальном энергопотреблении.


99371b4c-f917-4f76-8a92-71222642a3baНесмотря на компактность, во всех ноутбуках линейки есть необходимые разъемы: стандартные порты USB, USB Type C, USB 3.0, картридер, порт для наушников и HDMI.

🔋Аккумулятор

aa72982a-eab7-4a20-aaa6-f3b530ee0fc4Лэптопы ZenBook оснащаются аккумуляторами высокой емкости – в зависимости от активности использования 8–14 часов работы без подзарядки. Полная зарядка занимает 2 часа. Ноутбук никогда не подведет вас на протяжении длительного рабочего дня, и компиляции программы или выполнение кода не оборвется за минуту до завершения. Супер!

🙂 Где брать?

924a54d5-bfa4-4446-8cba-cd5c96d16ecbВ подготовке этого материала нам помог украинский интернет-магазин Цитрус – там любой Asus ZenBook можно приобрести с официальной гарантией и оперативной доставкой.

02
Апр
2020

Гайд по виртуальным мирам: AR и VR

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

1. Допо…

18
Фев
2020

Зачем и как строить Интернет вещей с Node.js

О том, как применить Node.js для серверной части Интернета вещей. Разбираемся с вопросами безопасности и показываем пару реальных примеров интеграции платформы в IoT.

Публикация представляет собой перевод поста на freeCodeCamp Олега Романюка – главы отдела входящего маркетинга в KeenEthics.

1. Оценка состояния рынка

В 2019 году рыночная выручка IoT достигла 212 миллиардов долларов. В мире насчитывается около 26,7 миллиарда подключенных устройств IoT. К 2025 году это число достигнет 75,4 миллиарда.

По
оценкам ООН, на февраль 2020 года численность
населения
составляет 7,7 миллиарда человек. У
среднестатистического
человека есть около 3-4 устройств IoT. Наверняка у вас есть хотя бы одно из таких устройств: смарт-часы, фитнес-трекер, смарт-ТВ или, может быть, даже «умная» машина.

Ожидается,
что в 2025 году численность
населения достигнет
8,1 миллиарда человек и
на каждого человека
будет приходиться
9-10 IoT-устройств.

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

Статистические данные получены от Statista и ООН.

2. Выбор правильного фреймворка

Клиентская часть IoT-устройств представлена самим аппаратным обеспечением. Она написана на C, C++, Lua и других низкоуровневых языках программирования. Из-за аппаратных ограничений с этим ничего не поделаешь.

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

Но вы никак не ограничены в выборе фреймворка и языка программирования для серверной части IoT-приложений. На наш взгляд, Node.js – правильный выбор. И вот почему.

2.1. Быстрота и производительность

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

Node.js работает на высокоэффективном и масштабируемом JavaScript движке V8 от Google. Вследствие этого Node.js является основной платформой для работы с приложениями, работающими в режиме реального времени и постоянно меняющимися данными.

2.2. Node.js легко интегрируется с протоколами IoT

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

2.3. Модули Node.js облегчают разработку IoT

В Node.js есть npm (менеджер пакетов, англ. Node Package Manager) с множеством полезных пакетов для IoT-устройств. Существует около 80 пакетов для Intel IoT Edison, Arduino и Raspberry Pi. Кроме того, он содержит более 30 пакетов для различных датчиков, маячков и модулей.

2.4. Ресурсоэффективность и масштабируемость

Разработчики предпочитают работать с Node.js, так как он не требует большого объема ресурсов. Процессор и оперативная память не перегружены. Кроме того, Node.js обладает высокой масштабируемостью, что абсолютно необходимо для большинства современных компаний.

3. Избегаем подводных камней

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

3.1. Безопасная аутентификация

Существует множество инструментов для аутентификации в Node.js: токены, JWT, Auth0 и т. д. Каждый из них имеет свои преимущества и недостатки. Для начала посмотрим на них с точки зрения IoT.

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

Однако,
аппаратное обеспечение (сканеры, датчики,
хабы
и другие штуки IoT) должно хранить этот
токен
или
данные логина в прошивке.
Это означает, что злоумышленники могут
украсть токен,
если у них есть физический доступ к
аппаратным средствам. То же самое
касается JWT и Auth0.

С другой стороны, вы можете использовать любые инструменты для аутентификации на стороне сервера и интегрировать такой инструмент в платформу Node.js. Есть много npm-пакетов, которые позволяют сделать это вручную: Auth0, Passport и JWT. Есть также пакеты для интеграции с облачными IoT-сервисами: @azure-iot/authentication, aws-iot-device-sdk и т. д.

3.2. Безопасные HTTP запросы

Обратите внимание на HTTP-запросы с IoT-устройств. Вы должны проверить, получаете ли вы запрос от соответствующего IoT-устройства.

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

В Node.js это довольно легко реализовать:

            const express = require('express');
const https = require('https');
const http = require('http');
const fs = require('fs');
const options = {
  key: fs.readFileSync('path/to/your/key.pem'),
  cert: fs.readFileSync(path/to/your/certificate.cert')
};
const app = express();
http.createServer(app).listen(80);
https.createServer(options, app).listen(443);
        

HTTPS использует протоколы SSL или TLS для шифрования данных. Чтобы убедиться, что вы получили запрос от нужного сервера или клиента, используйте дополнительное шифрование данных. Например, вот так можно использовать подпись:

            const fetch = require('node-fetch');
const verifier = crypto.createVerify('RSA-SHA1')
const SIGNATURE_FORMAT = 'base64';
//check if it trusted url for your certificate
const trustedUrl = ‘https://trustedUrl/’
const isTrustedUrl = trustedUrl.match(url);
If (isTrustedUrl) {
verifier.update(req.body, 'utf8')
	fetch(isTrustedUrl)
    .then(certificate => {
	// check signature
const isValidSignature = verifier.verify(certificate, reg.header.signature, SIGNATURE_FORMAT);
   })
    .catch(err => console.log(err));
}
        

Далее:

  • Проверьте доверенный URL вашего сертификата.
  • Подпишите тело запроса открытым ключом из сертификата.
  • Сравните подпись из тела запроса с подписью из заголовка.

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

4. Пара примеров примнения Node.js в IoT на практике

4.1. Asama – трекинг перемещений сотрудников компании


Asama — это система микролокации, использующая смарт-часы и Bluetooth-маячки для отслеживания передвижения и другой активности сотрудников компании. Смарт-часы определяют местоположение сотрудника и анализируют, носит ли его нужный человек, спит ли сотрудник или работает. Данные передаются в мобильное приложение, которое устанавливается и настраивается на телефоне работодателя. Приложение работает на Node.js.



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


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

PREE – поиск ваших вещей

PREE – система Bluetooth-маячков
и мобильное приложение,
помогающее людям перестать терять
свои вещи. Это помощник
для тех, кто часто забывает телефон,
сумку, ключи, бумажник или любые другие
ценные аксессуары.


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

Эта система IoT построена на Node.js, Express и Mongo на бэкенде и Ionic с Cordova на фронтенде.

***

Если статья вас убедила в выборе платформы для серверной части IoT, Библиотека программиста подготовила еще несколько популярных статей по Node.js:

А по Интернету вещей у нас даже есть отдельный тег IoT.