• /
  • /

Алгоритмы компьютерного зрения OpenCV для проектов умного дома

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

OpenCV – краткий обзор

Компьютерное зрение (Computer Vision, или CV) – область искусственного интеллекта, связанная с обнаружением, обработкой и распознаванием объектов на цифровых изображениях и видео. Разработка приложений компьютерного зрения осуществляется с помощью различных решений и технологий, включая библиотеки, фреймворки и платформы. OpenCV – одно из таких решений. Это набор библиотек, куда входит более чем 2500 инструментов, от классических алгоритмов машинного обучения (Machine Learning, или ML), таких как метод линейной регрессии, метод опорных векторов (support-vector machines, или SVM) и дерево принятия решений, до глубокого обучения и нейронных сетей.
Логотип библиотеки OpenCV.
OpenCV – это решение с открытым исходным кодом, которое можно свободно использовать, изменять и распространять по лицензии Apache. Библиотека была первоначально представлена ​​Intel в 1998 году, и с тех пор корпорация поддерживает OpenCV и вносит в нее свой вклад. Например, компания добавила модуль Deep Neural Network (DNN) в версию OpenCV 3.3. Модуль позволяет пользователям обучать нейронные сети на фреймворках глубокого обучения, а затем переносить их в OpenCV для дальнейших действий.

Библиотека совместима с рядом операционных систем, включая Windows, Linux, macOS, Android, iOS и поддерживает программное обеспечение, написанное на C/C++, Python и Java. Имеет кроссплатформенные возможности и совместима с другими фреймворками. Например, вы можете легко портировать и запускать TensorFlow, Caffe, PyTorch и другие инструменты в OpenCV практически без каких-либо настроек.

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

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

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

Сферы применения OpenCV

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

Здравоохранение

В здравоохранении решения на основе OpenCV позволяют выявлять заболевания и потенциальные угрозы здоровью, используя алгоритмы обнаружения и классификации для анализа изображений тканей и органов пациентов. Так, наша команда использовала библиотеку OpenCV при разработке iOS-приложения для выявления меланомы кожи. Приложение может находить края родинки, определять ее цвет, форму и другие параметры. На основании этих данных программа выдает заключение о характере новообразования и отправляет результаты врачу для дальнейших исследований. Команде удалось сократить время обработки данных до менее чем 0,1 секунды и достичь точности диагностики 80%.
Разработчик КЕДР Solutions тестирует работу специальной линзы, которая крепится к смартфону, и приложения для определения характера новообразований кожи.
Приложение анализирует родинку и с высокой точностью определяет, является ли она злокачественной.

Автономные транспортные средства

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

Мы использовали библиотеку OpenCV при разработке ПО для агроробота. Автономное роботизированное устройство обрабатывает посадки на поле без участия человека, с помощью алгоритмов компьютерного зрения определяя лунки на грядках для внесения удобрений.

Дополненная реальность

Компьютерное зрение, интегрированное в мобильное программное обеспечение, может стать основой приложений дополненной реальности (augmented reality, или AR), позволяя пользователям интегрировать виртуальные объекты в реальный мир. Решения AR на основе алгоритмов OpenCV могут визуализировать архитектурные и дизайнерские проекты, улучшать процесс обучения в школах и университетах, а также помогать компаниям продвигать свою продукцию и оптимизировать взаимодействие с клиентами.

Распознавание лиц

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

OpenCV для домашней автоматизации

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

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

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

Наш опыт применения OpenCV в проекте умного дома

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

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

На первом этапе команда с помощью OpenCV реализовала компьютерное зрение для обнаружения человека и визуализации скелета. С помощью данных в свободном доступе мы построили и обучили нейронные сети, способные идентифицировать человеческое тело. Мы использовали BodyPix на основе TensorFlow для сегментации скелета. Эта модель машинного обучения с открытым исходным кодом сегментирует тело на 24 части и визуализирует каждую из них как набор пикселей одного цвета.
Видео иллюстрирует, как происходит процесс сегментации и визуализации каждой части тела в своем цвете в модели BodyPix.
BodyPix сегментирует человеческое тело и визуализирует каждую часть в своем цвете.
Затем система определяет биомеханические данные тела: его геометрию и движения. Для расчета и классификации этих параметров мы использовали алгоритмы отслеживания движения OpenCV.

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

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

Мы разработали систему связи, которая собирала данные со всех камер, установленных в доме. При обнаружении падения она отправляет соответствующее уведомление с изображением в службу неотложной медицинской помощи. Также в планах было разработать специальный планшет Android, с помощью которого пациенты могли бы связаться со своими родственниками и получить онлайн-консультацию врача.
Программа обнаружила падение человека.
Обнаружение падения.
В ходе работ мы пробовали разные типы камер – от простых RGB-камер до камер глубины Orbbec Astra и Intel RealSense. Они отслеживали людей в течение дня и отправляли изображения на одноплатный компьютер NVIDIA Jetson Xavier NX для последующей обработки.

Intel RealSense давала высококачественные изображения RGB-D, что упрощало работу алгоритмов компьютерного зрения. Камеры глубины использовали инфракрасный свет и могли обнаруживать события даже в темноте, но они были довольно дорогими и требовали больше времени для обработки изображений. Оптимальным решением по соотношению цена/качество стала камера RGB. В сочетании с BodyPix она давала те же результаты, что и камеры глубины, но с меньшим временем на обработку изображений.

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

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

Сложности распознавания людей с помощью OpenCV

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

Изначально мы использовали простые алгоритмы машинного обучения OpenCV для дифференциации поз – человек идет, лежит или падает. Реализация скрытых моделей Маркова (Hidden Markov Model, или HMM) позволила нам предсказывать падение на основе предыдущего поведения человека. Система обнаруживала контуры тела, определяла его центр масс и анализировала отклонения от этих данных кадр за кадром. Чем более явными были отклонения, тем выше вероятность падений.

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

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

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

Заключение

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

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

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