Почему роботы так долго готовят нам еду?

Одно из самых интересных приложений робототехники и искусственного интеллекта (а именно компьютерное зрение) находится на кухне! Есть много стартапов, работающих над сложными роботами-поварами и использующими робототехнику для автоматизации процессов приготовления, таких как приготовление гамбургеров:

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

Приготовление стейка - довольно простая задача, и для ее завершения обычно требуется видение. Если у нашего робота-повара есть камера и механизм для переворачивания и извлечения стейка (а-ля лопатка), все в порядке. Вот простой алгоритм обработки стейка роботом-поваром.

Основная концепция этого алгоритма заключается в том, что он будет использовать модель распознавания изображений для обработки изображений в видеопотоке с камеры. Мы воспользуемся невероятной мощностью сверточных нейронных сетей для обработки стейка с течением времени. Кто-то может возразить, что вы можете просто взять гистограмму цвета стейка и сравнить ее с течением времени, от сырого (красного) до приготовленного (коричневого). Однако CNN будет лучше обобщать в случае добавления приправы к стейку, плохого освещения и т. Д.

Эти изображения не нужно обрабатывать в режиме реального времени (или что-то вроде 1/30 кадров в секунду), поскольку это не критичная по времени задача. Чтобы сэкономить вычислительные ресурсы и ускорить алгоритм, мы будем просто обрабатывать каждый 6-й кадр, чтобы проверять состояние стейка. Кроме того, мы будем поддерживать дополнительную инфраструктуру в нашем цикле, необходимую для приготовления стейка.

Начальная конфигурация: создайте классификатор изображений, чтобы сопоставить стейки от "сырых" до "редких", "редких-средних", "средних", "средне прожаренных". ', 'отличная работа'. Поскольку эти классы следуют логическому порядку, вместо этого мы просто сопоставим стейк от 0 до 5.

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

Когда классификатор достигает точности ~ 95%, классифицируя стейки как сырые или приготовленные, псевдокод записывается в стиле Питона

def cookSteaks(target):
timer = 0 # used to flip the steaks arbitrarily
side = True # flag used to label sides of the steak as cooked
side0Finished = False
side1Finished = False
Finished = False
seq = 0 # require 5 consecutive classifications to finish
Process every 6 frames
   Classify frame
   if (frame == target): # target indicates ['rare', ..' well-done']
     seq += 1
     if (seq == 5):
        if (side):
          side0Finished = True
          if (side1Finished):
            Finished = True
            exit;
          else:
            seq = 0
            flip()
        else:
           ....
    ...
   timer += 1
   if (timer == 120):
     flip()
     side = !side
     timer = 0

Я думаю, что логика, лежащая в основе алгоритма, четко определена, не заполняя псевдокод для этого.

Здесь работают 4 основные части:

  1. Используйте модель распознавания изображений для обработки входящих кадров из видеопотока (не обязательно иметь возможности реального времени для этой задачи).
  2. Требовать последовательных классификаций для запуска ответа из-за некоторой ошибки в модели классификации (без огромных объемов обучающих данных точность 95% будет считаться довольно хорошей моделью для задачи двоичной классификации), мы можем Не позволяйте роботу переворачивать стейк каждый раз, когда с классификатором случается неудача. В этом примере мы экспериментируем с использованием 5 в качестве порога для переворота, но это может быть слишком мало.
  3. Флаги для обрамления задачи, используйте логические флаги для направления цикла и убедитесь, что обе стороны приготовлены, и чтобы не отставать от переворачивания, выполняемого на протяжении всего приготовления.
  4. Таймер для произвольного переворачивания. Мы хотим произвольно переворачивать стейк каждые 2 минуты или около того, чтобы не готовить одну сторону, а затем перевернуть ее и приготовить другую, от начала до конца. Я уверен, что у опытных поваров есть лучшая стратегия, чем эта, но этого будет достаточно для нашей задачи.

Сбор данных для обучения классификатора

Мы подадим набор данных, состоящий из подобных изображений. Обозначенные изображения основаны на перспективе при просмотре панорамы.

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

CShorten

Коннор Шортен - студент факультета информатики Атлантического университета Флориды. Научные интересы в области науки о данных, глубокого обучения и разработки программного обеспечения. В основном кодирование на Python, JavaScript и C ++. Следите за дополнительными статьями по этим темам.