![](https://habrastorage.org/webt/aq/uy/mg/aquymgce4gwgsqitn07m6el3fka.jpeg)
Каждый автомобилист знает — водителям свойственно уставать. Бывает, что глаза слипаются, даже когда едешь с работы домой, а у дальнобойщиков это вообще одна из главных профессиональных проблем: каждый год происходят тысячи аварий из-за того, что люди засыпают за рулём. Всё дело в том, что водителям-дальнобойщикам нужно постоянно соблюдать баланс между отдыхом и безопасным вождением с одной стороны, и утомляемостью с более высоким заработком с другой. Велик соблазн поменьше поспать, но зато быстрее довезти груз и получить новый заказ. Не говоря о том, что у водителей есть своя личная жизнь и они не всегда отправляются в рейс выспавшимися.
Чтобы дороги стали безопаснее, мы запустили свой проект по контролю состояния водителей: по требованиям заказчиков создаём программно-аппаратные решения, которые могут отслеживать самочувствие водителя в дороге и предупреждать стадию засыпания, чтобы не «проснулся» на том свете.
Недремлющее Око
Основная идея в том, чтобы с помощью камеры отслеживать утомляемость и опасные реакции водителей. Прибор сначала собирает статистику, как ведёт себя конкретный водитель за рулём. И, если на основании этой статистики система решает, что водитель проявляет признаки утомления или вот-вот увидит сны, она ему об этом сигнализирует. Если же водитель начал часто клевать носом или реагирует на события как сонная муха, то система ещё и сообщает об этом диспетчеру.
Мы с помощью видеоаналитики отслеживаем, насколько водитель сосредоточен и смотрит ли он на дорогу. Камера постоянно снимает лицо и руки, а система отслеживает ряд ключевых точек. Мы ожидаем, что у водителя всё время открыты глаза, взгляд направлен в сторону лобового стекла или боковых зеркал. Если глаза закрываются, или голова наклоняется вперёд и подбородок падает на грудь, или лицо надолго отворачивается от лобового стекла, то система подаёт сигнал.
Конечно, это отслеживание и сигнализирование работают не постоянно, а только когда машина движется, для этого используется GPS-датчик. Также мы предусмотрели возможность принудительного включения и отключения системы, ведь ситуации бывают разные. Но при этом мы сопоставляем длительность движения машины и времени, когда система отключена. При необходимости устройство может сообщить диспетчеру, что водитель давно едет с выключенным «контролем».
Реализация
Проект состоит из двух частей: аппаратной и программной.
Каким образом система определяет, что водитель сейчас заснет? С помощью библиотеки OpenCV, в основе которой лежит машинное обучение. OpenCV позволяет определять в видеопотоке ключевые точки: подбородок, руки, глаза (в том числе их размер и широту раскрытия). И на основании этих параметров система определяет, устал водитель, или нет.
Аппаратная часть состоит из камеры Waveshare RPi Camera (F) и Raspberry Pi, собранных в едином корпусе. Создать аппаратную часть сложнее, чем может показаться на первый взгляд: нужно не соединить и спаять компоненты, а продумать их сочетание так, чтобы устройство длительное время работало надёжно и без сбоев. По сути, это отдельная интеграционная задача. А интеграционные риски, как правило, самый высокие. Ведь одно дело, когда программный комплекс работает на твоём ноутбуке, под твоей ОС и с твоими ограничениями, и совсем другое дело, когда его переносят на Raspberry Pi, под иную ОС, где гораздо слабее процессор и меньше памяти.
Конечно, если продукт ставить в серию, то он будет реализован уже не на Raspberry Pi. Железка слабенькая, её мощности не хватает, чтобы обрабатывать видеопоток в полном разрешении и распознавать лицо, поэтому при такой аппаратной начинке приходится идти на ухищрения.
Кроме того, мы реализовали ночной режим, чтобы система умела будить водителя и в тёмное время суток, когда люди чаще всего и засыпают. То есть пришлось научить компьютер обрабатывать видеоряд с инфракрасной камеры. Здесь мы не были первопроходцами, подобная задача решается и в системах умного дома. Для определения утомлённости водителя не нужно знать подробностей о его внешности: цвета волос, глаз, оттенка кожи. Нам нужно лишь чётко определять положение рук и ключевые точки на лице. Как ни странно, но работать с глазами в инфракрасном режиме оказалось даже проще, чем в обычном. Если вы когда-нибудь видели снятые автоматическими камерами ролики с животными в дикой природе, то знаете, что при удачном ракурсе глаза у них светятся, словно лазерные.
Этот эффект оказался нам очень кстати: так проще определять факт закрытых глаз. Конечно, потребовалась дополнительная настройка всех алгоритмов, потому что спектр у изображения совсем иной, но, в целом, глаза распознаются увереннее.
Зато в инфракрасном режиме система хуже распознаёт ситуации, когда водитель говорит по телефону, прижимая его ухом к плечу. Это тоже опасная ситуация, ПДД прямо запрещают говорить по телефону за рулём.
Конечно, как и любая модель машинного обучения, наша тоже не работает со стопроцентной точностью. Но нужно хорошо понимать, от чего именно зависят ошибки распознавания. Например, мы пока не тестировали свою систему на водителях с неевропейской внешностью. Возможно, в этом случае доля точного распознавания глаз и утомляемости снизится. Однако, при внутреннем тестировании система срабатывала точно в 8-9 случаях из 10.
* * *
Сегодня в открытом доступе есть очень много хороших алгоритмов, и мы брали уже готовые, что позволило не просто решить задачу, но и сэкономить много времени. Сейчас можно быстро найти модель, подходящую для решения какой-то уникальной задачи, и оперативно её доработать. Конечно, для этого нужны навыки и опыт решения задач компьютерного зрения и быстрой адаптации. Тогда до получения прототипа на ноутбуке уходит всего один-два дня. А дальнейшая работа зависит от задачи, от доступных мощностей, хранилища и прочих факторов. Например, можно быстро доработать нашу систему, чтобы она выполняла другую роль: скажем, в качестве охранного устройства, которое следит за тем, чтобы в помещение в определённое время суток входили только конкретные люди. То есть, можно оперативно создать решение под самые разные задачи, связанные с компьютерным зрением.