Telegram bot · @oshtracker_bot
Калории по фото: что видит ИИ и как уточнить результат
По фото бот узнаёт блюдо и прикидывает порцию по посуде, но масло в зирваке и точный вес на снимке не видны. Их уточняют одной фразой — «плов 400 г», «самса жареная» — и бот пересчитывает калории и БЖУ.
Проверить своё блюдо по фотоКоротко: по фото бот узнаёт блюдо и прикидывает порцию по посуде — этого хватает для первой цифры. Но масло в зирваке, курдюк в начинке и реальный вес порции на снимке не видны, поэтому самый сильный ход — уточнить их одной фразой: «плов 400 г», «самса жареная», «шурпа с лепёшкой». Бот пересчитает калории и БЖУ, а запись останется в дневнике. Ниже — что видно на фото и условный расчёт на плове, самсе и шурпе.
Что видно на фото, а что нет
Снимок несёт две вещи: что за блюдо и как выглядит порция. Плов от лагмана, самсу от мантов, шурпу от маставы нейросеть отличает по форме, цвету и подаче. Размер порции она оценивает по косвенным признакам: лаган или коса, насколько заполнена посуда, есть ли горка. Так получается первая оценка — блюдо из базы и его стандартная порция.
Но часть калорий на фото не видна в принципе. Жир — самый плотный по энергии компонент еды: 1 г жира даёт 9 ккал, 1 г белка или углеводов — 4 ккал. Масло растворяется в зирваке, курдюк — в фарше, сахар — в чае, и снаружи домашний плов и свадебный выглядят одинаково. Вес на снимке тоже не написан.
| Видно на снимке | Не видно | Как уточнить |
|---|---|---|
| Тип посуды и насколько она заполнена | Точный вес в граммах | «плов 400 г», «две самсы», «полкосы» |
| Иногда способ готовки — по корочке | Масло в зирваке, курдюк в начинке | «жареная», «свадебный, жирнее», «снял жир» |
| То, что попало в кадр | Лепёшка, катык, сладкий чай за кадром | «с лепёшкой», «плюс катык», «плюс чай с сахаром» |
Узнать блюдо и посчитать калории — разные задачи
Систематический обзор в Annals of Medicine (2023) собрал 52 работы, где оценку рациона по изображениям сравнивали с оценкой людей и с эталонными измерениями. Методы, наборы снимков и сами эталоны оказались настолько разными, что единого сводного показателя точности авторы вывести не смогли. Видно и другое: отдельный продукт вроде варёного яйца и смешанное блюдо вроде плова, где часть ингредиентов скрыта, — задачи разной сложности.
Команда Google Research в проекте Nutrition5k (CVPR 2021) показала, что нужно, чтобы вывести из снимка не название, а граммы: каждый компонент блюда взвешивали, а к изображениям добавляли данные о глубине для оценки объёма порции. Авторы отдельно описывают скрытые ингредиенты, которых на снимке нет, и ограниченное разнообразие кухни: данные собраны в столовой в США, о плове и самсе они ничего не говорят.
Отсюда два вывода. Первый: в базе должны быть местные блюда — с их маслом и рецептом, а не «рис с мясом». Второй: оценку по фото нужно исправлять одной фразой, без поиска по базе и ввода граммов на каждый ингредиент. На этом построен Osh Tracker.
Условный расчёт: плов, самса и шурпа от фото до записи
Это не измерение и не тест, а условный расчёт по нашей таблице блюд: калории на 100 г считаем как 4 × белки + 9 × жиры + 4 × углеводы, потом умножаем на вес порции.
| Блюдо | Первая оценка по фото | Уточнение одной фразой | Пересчёт |
|---|---|---|---|
| Плов в лагане | 100 г: 4 × 6,9 + 9 × 12,6 + 4 × 19 = 217 ккал; стандартная порция 300 г — 651 ккал | «плов 400 г» | 217 × 4 = 868 ккал (+217) |
| Самса, 1 шт | Тандырная с мясом: 4 × 8 + 9 × 10,5 + 4 × 24 = 222,5 ккал/100 г; 150 г — около 334 ккал | «самса жареная» | Из фритюра: 4 × 8 + 9 × 17,5 + 4 × 25 = 289,5 ккал/100 г; 150 г — около 434 ккал (+100) |
| Шурпа в косе | Говяжья: 4 × 3,5 + 9 × 5 + 4 × 6 = 83 ккал/100 г; 300 г — 249 ккал | «снял жир сверху» | 4 × 3,5 + 9 × 2,5 + 4 × 6 = 60,5 ккал/100 г; 300 г — около 182 ккал (−67) |
| Шурпа в косе | 249 ккал | «с четвертью лепёшки» | Лепёшка 259 ккал/100 г × 120 г = 311 ккал; итого 249 + 311 = 560 ккал |
Роль масла видна особенно хорошо: в порции плова 300 г — 12,6 × 3 = 37,8 г жира, то есть 37,8 × 9 ≈ 340 ккал из 651 — больше половины. Каждые лишние 10 г масла в порции — ещё 90 ккал, и на фото это никак не отражается. Поэтому для плова из чайханы и свадебного фраза «жирнее обычного» важнее идеального ракурса.
Как уточнить результат одной фразой
Ответ бота — предложение, а не приговор. Три рычага, которые меняют цифру сильнее всего:
- Масса. Знаете вес — напишите: «плов 400 г», «полкосы», «две самсы». Если весов нет, ориентир даёт посуда: коса, лаган, штучная выпечка.
- Масло и рецепт. «Свадебный, жирнее», «самса жареная», «шурпа баранья», «снял жир». Важно не посчитать масло дважды: в цифре плова и лагмана масло рецепта уже есть, отдельной строкой идёт только то, что добавили сверху — подробно в гиде о скрытых калориях в масле и соусах.
- Добавки за кадром. Лепёшка, катык к мантам, ачик-чучук с маслом, пиала сладкого чая — 28 ккал на 100 мл, 56 на пиалу 200 мл. Допишите «с лепёшкой» или «плюс чай с сахаром».
Все три уточнения можно отправить одним сообщением — текстом или голосом. Бот пересчитает калории и БЖУ и обновит запись в дневнике.
Как сфотографировать, чтобы первая оценка была ближе
- Снимайте сверху или под небольшим углом — так видно, насколько заполнена посуда.
- Вся тарелка в кадре, с краями: по обрезанному снимку трудно понять размер лагана.
- Хороший свет — в темноте плов и кавурма сливаются.
- Несколько блюд — по отдельности или перечислите в подписи: «плов, ачик-чучук, лепёшка». Известен вес — тоже в подпись, бот учтёт.
Работает с узбекскими блюдами
В базе @oshtracker_bot — таблица национальных блюд: плов, манты, шурпа, дымлама и другие — с маслом и рецептом внутри цифры. Поэтому плов считается как плов, а не как «рис с мясом». Записать еду можно фото, голосом, видео или текстом; уточнить — одной фразой. Бот ведёт дневник и историю, считает дневную норму под цель — похудеть, набрать или держать вес, — хранит вес и добавки. Всё внутри Telegram, на русском и узбекском, без установки.
Цифры блюд — усреднённые оценки домашних рецептов на 100 г. Пример в статье — условный расчёт по нашей таблице, а не измерение: реальная порция и масло могут отличаться.
Источники
- AI-based digital image dietary assessment methods compared to humans and ground truth: a systematic review — Annals of Medicine, 2023
- Nutrition5k: Towards Automatic Nutritional Understanding of Generic Food — Google Research / CVPR, 2021
- Food energy — methods of analysis and conversion factors — FAO, 2003
Частые вопросы
Какая точность у расчёта по фото?
Это оценка, а не взвешивание. Систематический обзор в Annals of Medicine (2023) рассмотрел 52 работы об оценке рациона по изображениям и не смог вывести единой цифры точности — методы и эталоны слишком разные. Сильнее всего на итог влияют вес порции и масло, и именно их бот позволяет уточнить одной фразой; после этого запись отражает вашу тарелку, а не среднюю.
Как бот определяет вес порции по фото?
По косвенным признакам: тип посуды (коса, лаган, тарелка), насколько она заполнена, есть ли горка. Стартовая цифра — стандартная порция из базы, например плов 300 г — 651 ккал. Если знаете вес, напишите его: «плов 400 г» даст 217 × 4 = 868 ккал, на 217 больше.
Видит ли бот масло в плове?
Нет — масло растворено в зирваке и на фото не видно. В цифре плова из базы уже заложено масло среднего домашнего рецепта: 12,6 г жира на 100 г, около 340 ккал на порцию 300 г. Если ваш плов заметно жирнее, напишите «свадебный, жирнее» — бот пересчитает; отдельной строкой добавляйте только масло, которое положили сверху.
А супы и жидкие блюда?
Да, бот распознаёт шурпу, маставу, машхурду и другие супы. Уточните объём — «большая коса», «полкосы» — и жир: в косе говяжьей шурпы 300 г около 249 ккал (83 ккал на 100 г), а если снять жир сверху — около 182. Лепёшку к супу допишите отдельно.
Что делать, если фото нет?
Напишите название блюда текстом, отправьте голосовое или короткое видео — бот понимает все форматы. Уточнения к записи тоже можно продиктовать голосом.
Считает ли бот БЖУ?
Да, по каждой записи вы получаете белки, жиры и углеводы. Для порции плова 300 г это 6,9 × 3 = 20,7 г белка, 12,6 × 3 = 37,8 г жира и 19 × 3 = 57 г углеводов; после уточнения массы или масла БЖУ пересчитываются вместе с калориями.