Drive AI — это онлайн-веб-приложение, разработанное членами команды MEAN Machines во время хакатона IEEE-NSUThackNSUT’19. Drive AI обеспечивает 3-кратное средство искусственного интеллекта для вашего автомобиля:

  • Обнаружение сонливости — уведомление о тревоге
  • Распознаватель настроения с помощью выражений лица — Музыкальный проигрыватель
  • Обнаружение объекта и оценка расстояния — уведомление о тревоге

Угловой 7 + Python 3 + Фласк

Фронтенд был обработан с использованием фреймворка Angular 7. Бэкэнд был обработан с помощью Flask. Для обработки ошибки Cross Origins для запуска сервера и клиентской части использовался CORS.

Обнаружение сонливости

Эта функция была выполнена с использованием библиотеки OpenCV Python. Для реализации этой функции выполняются следующие шаги:

  • Снимайте ориентиры на лице и особенности
  • Математическая оценка соотношения сторон глаза в кадрах реального времени
  • Отслеживайте изменение EAR в выбранном количестве кадров и подавайте звуковой сигнал при выполнении заданного условия.
def eye_aspect_ratio(eye):
# compute the euclidean distances between the two sets of
# vertical eye landmarks (x, y)-coordinates
A = dist.euclidean(eye[1], eye[5])
B = dist.euclidean(eye[2], eye[4])
# compute the euclidean distance between the horizontal
# eye landmark (x, y)-coordinates
C = dist.euclidean(eye[0], eye[3])
# compute the eye aspect ratio
ear = (A + B) / (2.0 * C)
# return the eye aspect ratio
return ear

Музыка настроения

Что касается обнаружения чего-либо с использованием какой-либо модели машинного обучения, наиболее важным аспектом является набор данных, на котором мы обучали нашу модель. Для распознавания выражения лица использовался набор данных fer2013, который был опубликован на Международной конференции по машинному обучению 5 лет назад. fer2013 — это набор данных с открытым исходным кодом, который сначала был создан для текущего проекта Пьером-Люком Кэрриером и Аароном Курвиллем, а затем опубликован для конкурса Kaggle незадолго до ICML 2013. Этот набор данных состоит из 35 887 оттенков серого, размером 48x48. изображения лиц с 7 различными эмоциями, все помечены.

Эмоции, помеченные в базе данных fer2013:

0: 4593 изображения – Злой
1 : 547 изображений – Отвращение
>2: 5121 изображение – Страх
3: 8989 изображений – Счастливый
4 :6077 изображений – Грустно
5: 4002 изображения – Сюрприз
6: 6198 изображений – нейтральные

Теперь начнем с концепций машинного обучения, используемых для определения выражений лица. Я использовал архитектуру CNN, вдохновленную архитектурой ResNet50, с почти 7 тысячами обучаемых параметров. Полное создание модели и часть обучения выполняются в Google Collaboratory.

def Unit(x,filters,pool=False):
    res = x
if pool:
    x = MaxPooling2D(pool_size=(2, 2), padding=”same”)(x)
    res = Convolution2D(filters=filters, kernel_size=[1, 1], strides=[2, 2], padding=”same”)(res)
out = BatchNormalization()(x)
    out = Activation(“relu”)(out)
    out = Convolution2D(filters=filters, kernel_size=[3, 3], strides=[1, 1], padding=”same”)(out)
out = BatchNormalization()(out)
    out = Activation(“relu”)(out)
    out = Convolution2D(filters=filters, kernel_size=[3, 3], strides=[1, 1], padding=”same”)(out)
out = add([res,out])
return out
def makeModel(input_shape):
    images = Input(input_shape)
    net = Convolution2D(filters=64, kernel_size=[3, 3], strides=[1, 1], padding=”same”)(images)
net = Unit(net,64,pool=True)
    net = Unit(net,64)
net = Unit(net,128,pool=True)
    net = Unit(net,128)
net = BatchNormalization()(net)
    net = Activation(“relu”)(net)
    net = Dropout(0.25)(net)
net = AveragePooling2D(pool_size=(2,2))(net)
    net = Flatten()(net)
    net = Dense(units=7,activation=”softmax”)(net)
model = Model(inputs=images,outputs=net)
return model
adam = Adam(lr=0.0001)
model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['accuracy'])
hist = model.fit(data,label,epochs=20,shuffle=True,batch_size=512,validation_split=0.25)

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

Обнаружение объектов, оценка расстояния и генерация предупреждений

  • Обнаружение объекта было выполнено с использованием трансферного обучения на модели YOLO-tiny. Для обнаружения было установлено только выбранное количество меток, в том числе автомобиль, автобус, грузовик, поезд, велосипед, человек и велосипед.

  • Часть оценки расстояния была выполнена с использованием библиотеки OpenCV Python. Мы следовали правилу сходства треугольников, используемому в принципе сортировки. Мы могли бы использовать оценку расстояния путем определения полосы движения, но это могло создать проблему на дорогах без полос движения. Подобие треугольника выглядит примерно так: допустим, у нас есть маркер или объект с известной высотой H. Затем мы размещаем этот маркер на некотором расстоянии D от нашей камеры. Мы делаем снимок нашего объекта с помощью нашей камеры, а затем измеряем видимую ширину в пикселях P. Это позволяет нам получить воспринимаемое фокусное расстояние F нашей камеры как F = (P x D) / H. Я могу применить подобие треугольника для определения расстояния объекта до камеры как D' = (H x F) / P.

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

Зачем управлять ИИ?

  • Упрощенный, но оптимально безопасный инструмент, использующийfast ML/AI algorithms
  • Требуется no explicit interaction со стороны пользователя
  • Музыкальный проигрыватель на основе настроения improves overall UX и расширяет функциональность
  • УТП — удобство, функциональность и передовые технологии
    Мы стремимся разработать локальное, но эффективное программное решение, которое может оказывать влияние на сообщество и способствовать распространению новых способов использования. ОД/ИИ

Технический стек

  • Внешний интерфейс: Angular 7, Bootstrap, HTML5, SCSS, Typescript
  • Верхняя часть: Flask-RESTful, Python, OpenCV, Numpy, Scipy, Pandas, Sklearn, Keras, Tensorflow, MongoDB Atlas
  • IDE и другие ресурсы: Jupyter Notebook, VS Code, Google Collaboratory, Sublime Text, Kaggle.

Дорожная карта на будущее

  • Завершение оптимизированного прогрессивного веб-приложения (PWA) для улучшения осуществимости и тестирования продукта.
  • Интеграция 3 функций с портативным оборудованием: камеры Raspberry Pi и USB на приборной панели.
  • Делаем проект открытым исходным кодом и доступным сообществу для дальнейшего развития

Документация

Для проекта была создана презентация mdx. Ссылку на то же самое можно найти ниже: -

https://mdx-deck-git-master.abhishekdudeja.now.sh/#0