Недавно в WWDC 17 компания APPLE запустила CoreML и ARKit. Это открыло шлюзы для безграничных возможностей для создания удивительных приложений, доступных миллионам людей прямо на их мобильных телефонах. Используя эти новые технологии, мы подумали, почему бы не разработать приложение, которое может помочь каждому в повседневных поездках. После мозгового штурма мы решили создать приложение для видеорегистратора с системой помощи водителю.

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

Обнаружение объекта:

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

Алгоритмы глубокого обучения, которые особенно известны проблемой обнаружения объектов, - это R-CNN, Fast R-CNN, Faster R-CNN, YOLO, YOLO 9000, SSD, MobileNet SSD.

Потратив один месяц на тотальный мозговой штурм и кодирование, мы достигли рубежа в обнаружении объектов, реализовав YOLO с использованием инфраструктуры CoreML.

Мы задокументировали, как мы достигли этой задачи, в следующем блоге - Ссылка.

Расчет глубины:

Глубину препятствия можно определить как расстояние, на котором препятствие находится от камеры.

Обычно глубину можно рассчитать сразу с помощью специального оборудования, известного как камеры RGBD. Популярная камера RGBD потребительского уровня - это Microsoft Kinect (Xbox). Но в потребительских телефонах нет датчиков глубины. Это просто камеры RGB (также известные как монокулярное зрение). Как мы будем рассчитывать глубину?

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

  1. Временной метод - при котором мы вычисляем глубину на основе временной последовательности движения в изображениях (например, визуальная одометрия).
  2. Покадровый метод - при котором глубина, вычисленная в текущем кадре, не зависит от предыдущих кадров (например, методы триангуляции или методы глубокого обучения и т. Д.)

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

Sensor Fusion:

После того, как мы вычислим глубину на вышеупомянутом этапе, мы будем использовать объединение датчиков, чтобы объединить различные датчики в мобильном телефоне, чтобы получить скорость нашей машины. Затем мы используем его в простых кинематических формулах для вычисления T.T.C (Time To Collide) в этом конкретном кадре. Основываясь на исследовании среднего времени реакции человека на оповещение, мы стратегически разделили T.T.C на три этапа системы оповещения.

Кроме того, если предположить, что алгоритм обнаружения автомобилей надежен и имеет хорошее поле зрения, есть очень большая вероятность, что мы обнаружим много автомобилей в кадре. В этом случае нам может потребоваться найти именно тот автомобиль, с которым мы можем столкнуться в будущем. Благодаря объединению датчиков мы надежно вычисляем траекторию нашего автомобиля с помощью методов обработки изображений, чтобы свести проблему от «n» автомобилей к 1 автомобилю, а затем вычисляем TTC. для этой конкретной машины.

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

Будущая работа:

В этом блоге мы показали, как мы можем использовать возможности CoreML, Computer Vision и Sensor Fusion для создания приложения, которое действительно может помочь людям в их повседневных поездках на работу. Мы активно работаем над улучшением оценки глубины обнаруженных транспортных средств, используя либо методы глубокого обучения, либо надежные методы визуальной интерциальной одометрии. Кроме того, мы планируем использовать мощность двух камер, представленных в iPhone 7 Plus (система камер с узкой базовой линией), для оценки глубины. Эта область оценки глубины объектов в сцене из изображений, снятых с двух разных точек обзора (или двух камер), называется «Глубина из стерео». Эта область возникла на основе визуальной системы человека, и рисунок ниже может суммировать то, что я пытаюсь объяснить.

Я хотел бы поблагодарить вас за чтение этого блога и, пожалуйста, оставляйте свои комментарии / мнения о нашей работе. Я также хотел бы поблагодарить команду Apple CoreML за их великолепный API, с помощью которого это стало возможным.