{"id":6504,"title":"\u0417\u043d\u0430\u043d\u0438\u044f \u0438\u043b\u0438 \u043d\u0430\u0432\u044b\u043a\u0438 \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u0438 \u2014 \u0447\u0442\u043e \u0432\u0430\u0436\u043d\u0435\u0435 \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430","url":"\/redirect?component=advertising&id=6504&url=https:\/\/vc.ru\/fsteamchallenge\/288106-studentam-predlozhili-ocenit-svoi-kompetencii-i-gibkie-navyki&placeBit=1&hash=118553100066d9bc16989880064450525097b2f22a603a7346eca248be17a7ff","isPaidAndBannersEnabled":false}
Machine learning
NTA

Контроль соблюдения масочного режима на базе Raspberry Pi и Google Coral

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

Сегодня мир столкнулся с угрозой, аналогов которой современное поколение не встречало. Да, это COVID-19. И хотя человечество не раз встречалось с эпидемиями, уничтожавшими целые страны: чума, оспа, испанка и т.д., сейчас мы имеем значительные преимущества: развитая гигиена, высокий уровень медицины, а главное — мощные технологии.

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

Расскажем подробнее о том, как определить наличие медицинских масок на людях на базе Raspberry Pi и Google Coral.

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

Сегодня Raspberry Pi – наиболее популярная платформа своей области. Она используется как мозг робота, сервер или просто компьютер.

Нашей задачей является сконфигурировать программно-аппаратный комплекс для распознавания медицинских масок на маломощных устройствах обработки данных. Нам потребуется Raspberry Pi 3 model B ссылка на ресурс.

Перед началом работы необходимо:

  • установить на миникомпьютер Raspberry Pi OS на базе OC Debian 20.04 для ARM процессоров ссылка;
  • настроить автоматическое подключение к источнику Wi-Fi или LAN-подключение. Для этого воспользуйтесь универсальной инструкцией по настройке для Debian/Ubuntu-подобных систем младше версии 18.04 — ссылка;
  • настроить SSH-server для удаленного терминального доступа и настройке. Для этого устанавливаем OpenSSH из терминала командой:
1. sudo apt-get install ssh

В метапакете SSH содержится как клиент, так и сервер. При установке SSH-сервер автоматически прописывается в автозагрузку. Управлять его запуском, остановкой или перезапуском можно с помощью команд:

1. sudo service ssh stop|start|restart

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

Затем мы использовали камеру IR-CUT B с интерфейсом CSI по ссылке, но работа возможна и с обычной USB-камерой. В нашем случае достаточно в самой ОС запустить raspi-config для консольного управления конфигурацией Raspberry Pi и выбрать пункт «Включить камеру». Проверить работу CSI-камеры можно с помощью следующих команд:

1. raspistill -o image.jpg -w 1920 -h 1080 2. raspivid -t 10000 -p video.h264

Подробная инструкция: здесь.

Далее необходимо установить зависимости для работы Google Coral по инструкции размещена по ссылке. Мы использовали связку Coral USB Accelerator с Raspberry Pi. Coral предназначен для использования упрощенных моделей TensorFlow – TensorFlow Lite. На этом процесс конфигурации завершен.

Так как Google Coral предназначен для работы с моделями TensorFlow Lite, воспользуемся официальными noteboo`ами для дотренеровки подготовленных моделей, используя colab.research.google.com.

Минимальным требованием является использование модели для классификации изображений по двум классам — «человек в маске», «человек без маски».

Для этого воспользуемся Image classification with TensorFlow Lite Model Make — предварительно сформированный dataset с необходимыми классами изображений (лица людей с масками и без) загружаем в notebook, в котором выполняем дотренеровку и экспорт модели в TensorFlow Lite (.tflite).

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

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

Рассмотрим фрагмент кода, который объединяет код из примеров по классификации и определению объектов на фотографии — из видеопотока CSI-камеры анализируем покадрово изображения на наличие лиц людей. Если такие объекты были найдены, обрезаем данные фрагменты изображения и проводим классификацию для выявления на лице медицинской маски.

1. def main(): 2. interpreter_classify, labels_classity = init_models("classify") 3. interpreter_obj_detect, labels_obj_detect = init_models("obj_detection") 4. 5. with picamera.PiCamera(resolution=(CAMERA_WIDTH, CAMERA_HEIGHT), framerate=30) as camera: 6. camera.start_preview() 7. try: 8. stream = io.BytesIO() 9. annotator = Annotator(camera) 10. 11. # Получение потока видео в виде jpeg снимков 12. for _ in camera.capture_continuous(stream, format='jpeg', use_video_port=True): 13. stream.seek(0) 14. # Конвертируем кадр в цветовое пространство RGB без альфа канала 15. image = Image.open(stream).convert('RGB').resize( 16. (input_width, input_height), 17. Image.ANTIALIAS 18. ) 19. start_time = time.monotonic() 20. 21. # Поиск объектов на фотографии - лица людей 22. objects = detect_objects(interpreter_obj_detect, image, args.threshold) 23. results = list() 24. for obj in objects: 25. ymin, xmin, ymax, xmax = obj['bounding_box'] 26. XY = ( 27. int(xmin * CAMERA_WIDTH), 28. int(xmax * CAMERA_WIDTH), 29. int(ymin * CAMERA_HEIGHT), 30. int(ymax * CAMERA_HEIGHT), 31. ) 32. 33. # По каждому найденному объекту определяем наличие маски 34. results.append({ 35. "XY": XY, 36. "class_img": classify_image(interpreter_classify, image.crop(XY)) 37. }) 38. 39. elapsed_ms = (time.monotonic() - start_time) * 1000 40. annotator.clear() 41. annotate_objects(annotator, results, ["with_mask", "without_mask"]) 42. annotator.text([5, 0], '%.1fms' % (elapsed_ms)) 43. annotator.update() 44. 45. stream.seek(0) 46. stream.truncate() 47. 48. finally: 49. camera.stop_preview()

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

Таким образом, Coral ускоряет работу в 10 раз. Кроме того, скорость более 10-13 кадров в секунду является достаточной для использования комплекса в режиме реального времени. Отметим также, что минимальные энергозатраты, около 2.5 Вт/ч, делают возможным применение комплекса не только в офисах с развитой энергосетью, но даже и в общественном транспорте.

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

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

{ "author_name": "NTA", "author_type": "editor", "tags": ["\u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439\u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442","raspberrypi"], "comments": 2, "likes": 8, "favorites": 8, "is_advertisement": false, "subsite_label": "ml", "id": 136982, "is_wide": true, "is_ugc": false, "date": "Thu, 25 Jun 2020 07:15:27 +0300", "is_special": false }
0
2 комментария
Популярные
По порядку

Отличная подача материала. Спасибо . Какого уровня ошибки смогли достичь? Освещение / расположение камеры тестировали?

2

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

0
Читать все 2 комментария
«Тинькофф» начал тестировать технологию выявления мошенников по анализу поведения клиентов при использовании смартфона Статьи редакции

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

«Яндекс.Такси» выделит 1 млрд рублей на программу страхования водителей и курьеров Статьи редакции

Сумма компенсации в день будет составлять от 800 до 2000 рублей.

Как IT-компания делает продукты: история собственной торговой марки Яндекс.Лавки
Популярный ресурс indiehackers.com заблокирован РКН

Уже почти целый месяц популярный среди независимых разработчиков по всему миру ресурс www.indiehackers.com заблокирован РКН по решению Кудымкарского городского суда Пермского края.

ЕС представит законопроект об едином разъёме для зарядного устройства смартфонов и планшетов — Reuters Статьи редакции

Принятие проекта сильнее всего повлияет на компанию Apple, которая оснащает устройства собственным разъёмом.

Evrone News #08: выступили на конференциях и провели первый Evrone Fest

В этот раз наша традиционная подборка посвящена мероприятиям. Во-первых, наши спикеры отлично выступили на PyCon и RnDTechConf, а во-вторых, мы провели свой первый Evrone Fest. Подробности ниже.

Пивозавро-стикеры для IT

Мы вдохновились мемом про пивозавра и сделали про него айтишные стикеры

Премьера второго сезона сериала «Молодые и сильные. Проклятие выживших»
Amazon впервые с 2018 года обновит Kindle: в новой версии — увеличенный экран и режим автономной работы до 10 недель Статьи редакции

Стоит от $140.

Kindle Paperwhite Amazon
null