Кейс: разработка ИИ для распознавания блюд.

В этой статье расскажу, как мы создали искусственный интеллект, который распознает блюда всего за 1–2 секунды. Эта функция была разработана для Фотобокса — системы, которая контролирует списание продуктов при выдаче блюд в системе Шведская линия. Но такую технологию можно использовать и на производстве для контроля качества или количества продукции. Все подробности разработки — дальше!

Один из интерфейсов Фотобокса
Один из интерфейсов Фотобокса

Содержание:

На одном из последних мероприятий для рестораторов обсуждали актуальные тренды отрасли. В тройке лидеров оказались:

  • персонализация под требовательных потребителей (развитие отношений с клиентами через программные продукты, такие как CRM)
  • разработка ИИ
  • роботы и умное производство.

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

Мы, например, уже несколько лет сотрудничаем с London Restaurant Group — одной из крупнейших сетей ресторанов на юге России. Мы разработали для них:

  • мобильное приложение (кейс в статье ниже ⬇)
  • систему автоматизации учета (кейс ниже ⬇)
  • и Фотобокс — аппаратно-программное обеспечение, разработанное для контроля списания продуктов при выдаче готовых блюд в системе шведская линия.

Я оставила ссылки на статьи, чтобы вы могли ознакомиться с каждым кейсом подробнее. В этой статье расскажу о доработке Фотобокса — разработке системы ИИ.

Когда мы впервые презентовали Фотобокс, многие крупные ресторанные сети и сервисы доставки готовых рационов интересовались, когда распознавание блюд будет происходить с помощью ИИ, а не ручным поиском в веб-приложении.

И вот этот день настал. Собственник Фотобокса решил сократить время работы официантов и автоматизировать процесс.

Почему мы решили разработать ИИ?

Если вы не знакомы с кейсом про Фотобокс, позвольте кратко описать принцип его действия.

Прежде всего, что такое Фотобокс?

Фотобокс — это конструкция из нержавеющей пищевой стали, оснащенная датчиками, которые собирают полную информацию о подаваемом блюде. Основные компоненты Фотобокс:

  • Фотокамера — используется для создания снимков блюда.
  • Нажимные весы — служат для определения веса блюда, что позволяет сравнить его с эталоном.
  • Поверхностный термодатчик — помогает составить тепловую карту поверхности блюда.
  • Датчики движения на входе и выходе из Фотобокса — фиксируют момент установки или передачи блюда в Фотобокс и на выдачу.
  • Сенсорный экран — позволяет выбирать из базы данных наименования блюд и соответствующую тару.
  • Программное обеспечение — обеспечивает регистрацию факта выдачи блюда и передачу собранной информации в сторонние учетные программы, такие как 1С-Общепит, Store-House, iiko и другие.
Один из видов фотобокса - модуль Hotel

Как происходил процесс работы с фотобоксом без ИИ?

Механика системы
Механика системы

1. Этап планирования:

Сначала служба питания составляет заявку на еду - завтрак, обед или ужин. Они рассчитывают, сколько гостей ожидается и какие блюда нужно приготовить.

На основании отправленной заявки, технологических карт и имеющегося бюджета шеф-повар вместе с технологом и бухгалтером-калькулятором согласовывают план-меню в «1С:Общепит» или иной системе учета.

Затем информация о рационе (дата, время, блюда/товары/напитки, объем/вес/количество) передается в систему Фотобокс, которая создает блоки готовых к выдаче блюд со следующими параметрами:

  • наименование;
  • вес;
  • фотография;
  • температура

Так как блюда отдаются не порционно, а определенными партиями по весу или количеству, в систему заранее выгружают данные о таре и гастротаре (название, размеры, вес, фотография и др.). Это позволяет учитывать фактический вес блюд без учета посуды. То есть, когда сотрудник ставит блюдо на весы, он просто выбирает из списка, в какой именно посуде оно выносится.

2. Этап фиксации фактических данных:

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

Роли в системе Фотобокс
Роли в системе Фотобокс

Если нужно добавить продукты в блюдо, это можно сделать через функцию возврата. Также с помощью дополнительных датчиков и камер система позволяет отследить передвижения продуктов/товаров/блюд вне пределов зоны выдачи.

3. Этап передачи информации в базу данных:

Когда питание заканчивается, Фотобокс отправляет собранные данные обратно в основную систему учета. Туда попадают фотографии блюд, их вес, температура и количество.

Работа в системе
Работа в системе

Учетная программа получает эту информацию и автоматически списывает продукты, которые были использованы для приготовления блюд.

Задача, которую необходимо решить с помощью ИИ.

После внедрения Фотобокса мы столкнулись с главной трудностью: официанты тратили много времени на выбор блюд в веб-приложении Фотобокса, даже с учетом встроенного поиска. Дело в том, что названия блюд придумывают шеф-повара или технологи, и они могут быть довольно замысловатыми. Официанты не всегда знают точные наименования, и поиск нужного блюда мог занимать до 20 секунд. В час пик это становилось критичным.

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

Как происходи процесс работы фотобокса с ИИ

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

Несколько вариантов может быть, если официант ставит блюдо со схожими ингредиентами. Например, морковь. Система может предложить выбрать между свежей натертой морковью и морковью по-корейски.

Другими словами, разработанная система ИИ помогает быстро находить нужные блюда в Фотобоксе, что существенно ускоряет выдачу.

Несколько цифр

Экономия времени после внедрения ИИ в 6,5 раз
Экономия времени после внедрения ИИ в 6,5 раз

Этапы разработки ИИ.

Кратко расскажу об этапах разработки ИИ. Прежде всего - Аналитика.

Напоминаю, что перед разработкой каждого проекта мы проводим исследование. И если можно обойтись “малой кровью”, мы всегда говорим об этом заказчику. Так и в данном случае, мы изучили потребности клиента и готовые решения на рынке. И знаете что? Ничего подходящего мы не нашли!

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

Разработка системы ИИ

В целом, процесс разработки ИИ схож с процессом разработки любого ПО. Мы расписываем задачу на подзадачи, ставим ответственных, выделяем команду и фиксируем сроки.

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

Шаг 1. Собрать данные и сформировать датасет. Нужно было собрать достаточное количество фотографий в едином облаке и подготовить их для передачи в нейросеть.

Шаг 2. Обучить нейросеть на фотографиях (датасетах) и на выходе получить модель, которая будет определять блюдо.

Шаг 3. Доставить обученную модель до каждого фотобокса на объекте.

Что под капотом, капаем глубже!

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

Разработали сервис, который формирует данные для отправки в нейронную сеть

Дело в том, что данные с каждого Фотобокса отправляются на облачный сервер и сохраняются в его базе, в то время как фотографии хранятся на отдельном S3-сервере (это сделано для экономии дискового пространства основного сервера). Еще важно учитывать, что в каждом программном объекте, который был создан официантом в веб-приложении, кроме основной информации, есть множество дополнительной.

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

Процесс передачи данных с Фотобоксов в нейронную сеть
Процесс передачи данных с Фотобоксов в нейронную сеть

Разработали сервис определения блюд с помощью сверхточной нейронной сети.

Во время разработки ИИ, мы столкнулись с некоторыми трудностями:

  • Неудовлетворительная скорость определения блюд для некоторых устройств (4 секунды).
  • Неудовлетворительное качество распознавания из-за неодинакового количества фотографий блюд (датасет), поступающих на вход нейронной сети.
  • Также качество распознавания ухудшалось из-за захвата лишнего фона на изображениях, например, когда рядом лежали предметы.

Дабы решить эти проблемы, мы:

  • Экспериментальным путем подобрали самую быструю сверточную сеть RESNET151, подходящую под наши задачи.
  • Разработали функционал динамической балансировки количества фотографий (датасетов), поступающих на вход сверхточной нейронной сети.
  • Создали функционал для точной подготовки фотографий (датасетов): обрезка фотографий, накладывания маски на блюдо (определения границ блюда).

Результат:

  • После правильного подбора сверточной сети, балансировки датасетов и дополнительной подготовки фотографий, определение блюд занимало 1,5-2 секунды на микрокомпьютере Raspberry Pi. К сведению: на компьютере с GPU-модулем (видеокарта) распознавание происходит за доли секунды.
  • Качественные показатели распознавания улучшились до 90-95%.

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

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

  • BatchSize. Влияет на количество выделяемой видеопамяти. Увеличение памяти ускоряет процесс обучения.
  • TRAIN PROPORTION. Часть данных (в процентах), на которых обучается сверточная нейронная сеть, а оставшаяся часть поступают на тестирование обученной модели.
  • NUM EPOCHS. Количество итераций обучения. Влияет на качество обучения.
  • VALIDATION_RATIO. Функционал, который позволяет дополнительно проверять качество обучения модели и составлять отчеты.
Кирилл Фисюкович
Разработчик ItFox

Главная сложность была в интеграции ИИ на архитектуру ARM Raspberry PI 4 и балансировки фотографий. Это было сделано для того, чтобы нейронная сеть могла обучиться даже на блюдах с маленьким количеством фотографий.

Сделали функционал запуска всех наших сервисов и утилит для обучения модели по нажатию всего одной кнопки в веб-приложении облачного сервера.

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

Разработали функционал доставки обученной модели от S3-сервера на фотобокс.

Дело в том, что моделей может быть большое количество, а доставить в Фотобокс нужно только самую «свежую». Поэтому мы создали функционал, благодаря которому к каждой модели присваивается дата и время ее создания. Когда Фотобокс получает модели, он проверяет эти данные и забирает актуальную.

Оптимизировали процесс обучения.

Это оказалось одной из самых сложных задач. Прежде всего мы определили оптимальное количество фотографий на блюдо, чтобы обучить нейронную сеть. После уже занялись настройками, чтобы сделать процесс распознавания максимально быстрым. Первые тесты показывали время обработки (распознавания) около 3–4 секунд, но после ряда доработок мы смогли сократить его до 1,5–2 секунд. Сейчас блюда определяются молниеносно, и персонал тратит минимальное время.

Внедрение

Что ж… Наконец-то мы подошли к самому интересному — к вопросу внедрения. Всё оказалось не так просто. И я считаю, важно подсветить проблематику, потому что внедрение — одно из наиболее сложных этапов при разработке систем ИИ.

  • Прежде всего, мы провели серию тренингов для сотрудников, чтобы показать, как правильно пользоваться фотобоксом — как делать фотографии и как работать с оборудованием. Это основа основ, потому что без фотографий модели по распознаванию блюд не с чем работать. На тестовых стендах мы выяснили, что для надежного распознавания нужно около 300 фотографий. Так что проблема номер один была — научить и мотивировать персонал делать эти замеры правильно и регулярно.
  • Проблема вторая, о которой нельзя умолчать, — это сложности внедрения на операционном уровне. Сфера общепита имеет свои особенности, и одна из основных проблем — это текучка кадров. Новый сотрудник должен вникнуть в процессы, запомнить, где что лежит, перестать «метаться» от шкафа к шкафу в поиске необходимого. И, естественно, когда мы пытались внедрить новую систему, требующую дополнительного времени на замеры, все шишки летели в нас. 😀 Мол, мы задерживаем выдачу. Однако под чутким руководством собственника и его поддержке нам все-таки удалось справиться с данной проблемой...
  • И, наконец, организация производства. Мы поняли, что фотобокс должен быть расположен рядом со шкафами, где хранятся готовые блюда. Почему? Потому что повар готовит блюдо, и оно не сразу идет в зал, оно на время попадает в горячий шкаф. Если фотобокс будет далеко, сотрудникам придется бегать туда-сюда, что очень неудобно. Соответственно, оборудование должно быть максимально рядом. То же самое с холодным цехом — сотрудники не должны бегать через горячий цех и делать замеры через их фотокассу. Вообще, мы пришли к выводу, что у горячего цеха должен быть свой фотобокс, рядом с теплошкафами. У холодного цеха свой — рядышком с холодильным оборудованием, а третий фотобокс может размещаться в кондитерском цеху, близко к их холодильникам.

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

Резюме

В завершении статьи, хочу привести ТОП-3 совета, которые дает наш руководитель проектов по разработке ИИ тем, кто желает создать и внедрить искусственный интеллект на своем предприятии.

Вячеслав Черкасюк
менеджер проекта

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

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

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

Таким образом, если у вас есть четкое понимание этих трех аспектов, то шансы на успешную разработку и внедрение систем ИИ в ваш бизнес значительно возрастут.

Если у вас есть вопросы по поводу разработки и внедрения ИИ, вы всегда можете их задать либо в комментариях к данной статье, либо в телеграм / вацап. Буду рада помочь.

Заказать веб-разработку интернет магазина с ItFox: https://mobile.itfox-web.com/main/ru

Заказать мобильную разработку:

Также вы можете ознакомиться с некоторыми нашими статьями по разработке в сфере фудтех:

1010
2 комментария

Круто! Молодцы

1
Ответить

Андрей, спасибо :)

Ответить