Разобрать меню

AI: как модель читает страницу меню и оценивает каждую позицию

Смартфон снимает страницу меню на столе кафе

Снимок страницы меню превращается в список блюд с калорийностью и КБЖУ. Со стороны это выглядит как одно действие, но операций две, и ошибаются они по-разному: одна читает текст с фотографии, другая догадывается, что стоит за прочитанным названием. Первая почти не ошибается. Вторая ошибается всегда, и вопрос только в том, насколько.

Две операции, а не одна

Разбор страницы меню распадается на два независимых шага, и путать их не стоит — они лечатся разным.

  1. Прочитать названия. Модель видит фотографию и выписывает строки: «Борщ украинский со сметаной», «Салат «Цезарь» с курицей». Это распознавание текста, и на читаемом снимке оно работает почти безошибочно.
  2. Оценить каждое название. Для каждой строки — калорийность, белки, жиры, углеводы и вес порции. Здесь нет ни фотографии блюда, ни рецепта, ни весов: есть название и всё, что модель знает о блюдах с таким названием.

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

Почему названия не переводятся

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

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

Где накапливается ошибка

Погрешность приходит из второго шага, и у неё три источника разной величины.

ИсточникНасколько велик
Рецепт конкретной кухниНаибольший. Количество масла и сливок не задано названием, а именно оно двигает число
Вес порцииСущественный. «Паста» — это и 220 г, и 400 г
Состав блюда с непрозрачным названиемПеременный. «Фирменный салат шефа» не сообщает вообще ничего

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

Вес порции модель называет явно, и это сделано ради проверяемости: «600 ккал» не оспорить, а «600 ккал за 400 г» уже видно и можно поправить. Как оценивать вес самостоятельно — в материале про вес порции.

Что делать с непрозрачными названиями

Строка «Фирменное блюдо по-домашнему» не содержит сведений о еде. Честный ответ на неё — не число, а признание, что оценки нет: позиция остаётся в списке с пустыми значениями вместо правдоподобной выдумки.

Это сознательный выбор в пользу дырки в списке. Укоротить меню на нераспознанную строку значило бы соврать о том, что в нём есть; подставить среднее число — соврать о самом блюде. Пустое поле сообщает ровно то, что произошло.

Чего этот разбор не делает

Как снимать, чтобы прочиталось

Читаемость снимка влияет на первый шаг, и только на него: если строка распозналась, дальше её качество на оценку не влияет. Что помогает:

Коротко

Разобрать меню по фото

Частые вопросы

Как приложение определяет калорийность блюда по фотографии меню?
В два шага. Сначала с фотографии считываются названия позиций — это распознавание текста, и на читаемом снимке оно почти безошибочно. Затем по каждому названию даётся оценка калорийности и КБЖУ: рецепта и веса порции модель не видит, она отвечает на вопрос, сколько обычно бывает в блюде с таким названием.
Почему названия блюд не переводятся на мой язык?
Потому что человек держит карту в руках и сверяет выдачу с ней построчно. Переведённое или сокращённое название перестаёт совпадать со строкой в меню, и список остаётся правдивым, но бесполезным. По той же причине сохраняется исходный порядок позиций и заголовки разделов.
Какая точность у оценки калорийности по меню?
Это оценка порядка величины. Наибольшую погрешность дают рецепт конкретной кухни и вес порции: блюдо в полтора раза жирнее ожидаемого и в полтора раза больше по весу даёт двукратное расхождение. Для сравнения позиций между собой этого достаточно, для точного учёта — нет.
Что происходит, если название блюда ничего не говорит о его составе?
Позиция остаётся в списке с пустыми значениями. Подставить правдоподобное число значило бы соврать о блюде, а выбросить строку — соврать о том, что есть в меню. Пустое поле честно сообщает, что оценки нет.

Читайте также

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

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