Авторы Кейт Шефер и Ален Николе

Проблема черного ящика

В Chick-fil-A мы работаем над созданием более умного ресторана. Мы хотим объединить, проанализировать и автоматизировать наши рестораны в максимально возможной степени, чтобы помочь масштабировать наш бизнес, увеличить пропускную способность наших ресторанов и облегчить жизнь наших ресторанных операторов и их сотрудников.

Когда вы откусываете восхитительный бутерброд с Chick-fil-A, знайте, что он был в путешествии. Все начинается с панировки (в ресторане), а затем жарки / гриля. Оттуда он переходит в процесс, называемый «горячая выдержка», который представляет собой переход между приготовлением и приготовлением пищи. У каждого продукта есть максимальное время, в течение которого он может находиться в горячем состоянии, прежде чем его следует выбросить. Поскольку все горячие продукты следуют этому процессу, очень важно, чтобы мы могли управлять таймерами для отслеживания партий продукта на протяжении всего их жизненного цикла, от приготовленного до горячего хранения и подачи. Это гарантирует высокое качество и безопасность пищевых продуктов, которых вы ожидаете от Chick-fil-A.

В задней части каждого ресторана Chick-fil-A есть панель таймера, которую часто ласково называют «черным ящиком» или «таймером табло». Его задача проста: следить за таймерами качества для всех различных продуктов, которые мы продаем. Таймер, который сегодня существует в большинстве ресторанов, был разработан и изготовлен специально для Chick-fil-A. Хотя он хорошо служил нам в течение многих лет, это (в прямом и переносном смысле) черный ящик. Чтобы работать и масштабироваться более успешно, нам нужны данные.

Средний ресторан Chick-fil-A делает более чем в два раза больше продаж, чем любой другой ресторан быстрого обслуживания в США. Это создает очень беспокойную кухню и множество членов команды ресторана, которые стремятся максимально оптимизировать свои рабочие процессы. Итоговый принцип работы нашего умного ресторана - всегда…

«Сделайте то, что правильно, простым делом».

Решение с таймером черный ящик не поддерживает эту цель - для запуска таймеров требуется несколько нажатий со стороны членов команды ресторана и мучительное трехсекундное нажатие и удержание для отмены существующего таймера. Процитирую Кимберли Sweet Brown Уилкинс: Ни у кого нет на это времени! »

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

Двигаясь в правильном направлении

Первым шагом команды было создание простого таймера для сенсорного экрана. Мы сделали это, создав собственное приложение ChromeOS, которое работает на планшете с сенсорным экраном в режиме киоска.

Это решает основные проблемы удобства использования старого таймера и аспект черного ящика, поскольку мы строим все это на нашей специальной платформе Ресторанного Интернета вещей (IoT).

Используя нашу платформу IOT, все данные нашего нового таймера теперь автоматически доступны для других устройств в ресторане через нашу структуру обмена сообщениями pub / sub и автоматически передаются в наше озеро данных для запросов, отчетов и других рабочих нагрузок аналитики. . Мы также получаем «бесплатное» подключение устройств и управление идентификацией.

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

Сканирование с помощью 3D-камер

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

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

Каждый лоток для переноса был обожжен лазером со штрих-кодом на его верхних краях.

Над областью панорамирования / кронштейна мы установили 3D-камеру. Каждый раз, когда кастрюля помещается в скобу, мы можем обнаружить запрет и прочитать штрих-код, чтобы узнать, какая сковорода была «просканирована». Затем мы можем запустить правильный таймер для сковороды (например, для пикантной курицы).

Поскольку у нас есть 3D-камера, мы также можем подсчитать, сколько курицы находится в каждой кастрюле, что дает нам очень набор данных для повышения динамичности производства курицы!

Установка

Как мы это сделали?

Сначала мы выбрали камеру Intel RealSense D415, которая стоит около 150 долларов. Он оснащен некоторыми фантастическими функциями, такими как Intel Vision Processing Unit (VPU). VPU - это специализированный чип, который выполняет всю тяжелую работу по сшиванию стереоизображений вместе для расчета глубины каждого пикселя. Это позволяет выполнять большую часть тяжелой работы на борту камеры и снижает потребность в любом внешнем вычислительном решении рядом со станцией. Это важно, поскольку ресторан - прекрасная среда, но очень враждебная по отношению к компьютерам.

Сканирование штрих-кода довольно тривиально - мы используем pyZBar для сканирования каждого изображения на предмет штрих-кода. Также забавно, что Музей естественной истории поддерживает порт Python3 для ZBar ... но он работает! Однако процесс определения того, когда сканировать - когда панорама находится в кронштейне, а не только в поле зрения камеры, - немного сложнее.

Мы подтвердили идею обнаружения сковороды с помощью простого кода «подсчета пикселей». Мы буквально вручную пометили пиксели там, где, как мы ожидаем, должна быть верхняя кромка сковороды. Затем мы получаем значение глубины для каждого пикселя и смотрим, сколько из них находится на нужном расстоянии от камеры. Поскольку наша камера и панорама установлены на прочной нержавеющей стали, практически не оставляя места для маневра, это действенный способ решения проблемы, и он хорошо работает в нашей лаборатории.

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

Машинное обучение встречает курицу

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

Данные обучения

Чтобы собрать данные для обучения, мы настроили нашу 3D-камеру и начали собирать некоторые наборы данных.

Сначала мы сделали снимки «без панорамирования» и присвоили им соответствующие теги. Чтобы смоделировать реальную обстановку ресторана, мы смоделировали сборку бутербродов поблизости, но без сковороды в кронштейне.

Затем мы поместили поддон в кронштейн под камерой и сделали то же самое, чтобы сделать несколько тысяч изображений с меткой «панорамирование». Изображение в этом случае на самом деле представляет собой массив значений глубины 1280 x 720.

Реализация нейронной сети

Мы использовали Keras в качестве оболочки для TensorFlow для создания сверточной нейронной сети (CNN), которую мы хотим обучить. Мы остановились на очень простой архитектуре CNN с двумя сверточными слоями, одним плотным и одним выпадающим слоем.

Большинство CNN принимают файлы в формате JPG или PNG - фактические файлы изображений. Камера RealSense предоставляет нам изображения, но мы определили, что данные о глубине на самом деле являются более чистым источником данных, который можно использовать для того, что нам нужно. Чтобы передать матрицу значений глубины в нашу CNN, мы делаем некоторую магию предварительной обработки, чтобы преобразовать значения глубины в полутоновый png, который мы можем использовать для обучения. Это очень естественно работает с инструментами Keras для обучения CNN.

В целях обучения мы уменьшили изображение до 96 x 96 пикселей и прогнали 2 эпохи по 600 пакетов (32 изображения в пакете) с 30 пакетами проверки. Это обучалось очень быстро (даже на Mac без поддержки графического процессора) и было невероятно точным.

Обученная модель занимает всего 27 МБ на жестком диске, оценивается за 0,005 секунды и использует только около 15% доступного процессора на маломощном Intel NUC (без графического процессора). Это намного надежнее, чем наш метод «подсчета пикселей», и на самом деле он был разработан быстрее. Оглядываясь назад, мы бы начали здесь. Модель не идеальна, поэтому мы планируем продолжать собирать больше обучающих данных, включая общие крайние случаи, и переобучать модель, чтобы сделать ее еще более надежной.

Глубина к объему

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

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

Что дальше?

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