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

К нам обратилась компания «Термотех», которая занимается городскими перевозками. Организатору движения нужно было автоматически понимать, что:

  • водитель общественного транспорта не пользуется телефоном во время движения;

  • камера, установленная в салоне водителя, снимает с верного ракурса, не отвернута в сторону;

  • от камеры в целом идет сигнал, она не повреждена, не завешена и не загрязнена.

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

Как мы решали эту задачу

Машинное обучение

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

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

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

Решение задачи через детекцию позволило добиться искомой точности. Детекция осуществлялась через нейронную сеть с архитектурой YOLOv3. 

Для создания решения использовался язык Python и фреймворки Tensorflow + Keras, для деплоя — Tensorflow-Serving.

Backend

Для работы системы был разработан Backend на Django, получающий фотографии из общественного транспорта через API видеосистемы. Фото анализировались на наличие ошибок и хранились на сервере. В административной панели можно было увидеть ошибки, найденные на фото. В случае, если система обнаружения ошибок срабатывала неверно, оператор помечал фото как неверно обработанное и указывал, к какому типу его действительно нужно было отнести: таким образом собирались данные для дальнейшего дообучения нейронных сетей. 

Мы настроили мониторинг, чтобы разработчики сразу же получали сигнал об ошибках в работе системы.

Как это работает?

Камеры установлены в кабинах у водителей общественного транспорта.

Система Bus Factor по API получает фото с камер, анализирует их на предмет нарушений, выставляет каждому фото соответствующий обнаруженным нарушениям статус.

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

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

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

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

Комментарии (2)


  1. pbw
    05.04.2023 18:27
    +1

    Страна должна знать своих героев. Термотех.

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

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

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

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


    1. lenant Автор
      05.04.2023 18:27

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