Проект: 🥦 ScanFood.AI — Telegram-бот, который считает калории по фото еды  Публичный пост
18 июня 2025  1183
🥦 ScanFood.AI — Telegram-бот, который считает калории по фото еды
https://scanfood.ai

Привет, клуб! Я Юра, бэкенд-разработчик, но это не точно :D
Недавно мы с другом запустили своего Telegram-бота — ScanFood.AI, который помогает анализировать еду по фото, тексту и даже голосовому сообщению. Это бот для тех, кто хочет вести пищевой дневник, но без занудства и ручного ввода.

В этом посте расскажу, как он появился, что внутри и какие грабли пришлось обойти.

🤔 Как появилась идея?

Я часто задумывался, почему в 2025 году мы по-прежнему считаем калории вручную. С одной стороны — технологии развиваются, ИИ умеет распознавать лица, писать код и даже сдавать экзамены. С другой — чтобы узнать, сколько калорий в тарелке пасты, всё ещё нужно открывать приложение, искать блюдо, вводить граммы… и терять мотивацию.

В какой-то момент я подумал: почему бы не сфотографировать еду и сразу получить разбор — что это, сколько калорий, БЖУ и так далее?

Я начал искать, есть ли такие решения. Нашёл несколько — но у всех был один и тот же набор минусов:

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

Тогда мне пришла идея: встроить такой функционал прямо в Telegram. Никаких установок, логинов и баннеров — просто отправляешь фото, голос или текст боту и получаешь понятный анализ еды.

Так появился ScanFood.AI. Сначала сделал для себя. Потом — для друзей. А потом захотелось довести до ума и сделать удобно для всех.

🔥 MVP: что вошло в первую версию?

Первый прототип был максимально простой:

  • можно было отправить фото еды,
  • бот прогонял его через OpenAI GPT-4 Vision,
  • и возвращал анализ: название блюда, примерные калории и БЖУ.

Постепенно добавились дополнительные способы ввода:

  • текстовые описания — можно просто написать, например, «гречка с курицей»;
  • голосовые сообщения — бот распознаёт речь и делает анализ по голосовому описанию;
  • дневник питания — с выбором приёма пищи (завтрак, обед, ужин и т.д.);
  • логика очистки сообщений — бот сам удаляет свои предыдущие реплаи, чтобы не засорять чат;
  • база анализов и блюд — для отслеживания повторов и экономии ресурсов на повторных запросах.

Также появилась возможность отправить сразу несколько фото в одном сообщении — бот распознаёт каждое изображение по отдельности и возвращает отдельный анализ на каждое. Это удобно, если, например, обед состоит из нескольких блюд.

В целом, точность анализа оказалась на удивление хорошей — отклонения обычно в пределах 10–15%. Но бывают и пограничные случаи: например, если фото тёмное или блюдо похоже визуально (кабачковая икра vs арахисовая паста).

Мне сразу показалось удобным, если в таких случаях пользователь сможет сам поправить результат — особенно для тех, кто любит точность или просто немного придирчив 🙂
Вносить изменения можно как текстом, так и голосом — и это автоматически сохраняется как корректировка к исходному анализу.

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

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

⚙️ Стек технологий

С самого начала я хотел, чтобы бот был максимально простым и автономным. Вся логика живёт в одном асинхронном процессе на aiogram 3, который отлично справляется с FSM и параллельной обработкой сообщений.

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

⚙️ Текущий стек:

  • Python 3.11
  • aiogram 3 — основа FSM, роутеров и всей логики бота
  • Redis — для хранения состояний, временных данных, лимитов
  • PostgreSQL — для хранения пользователей, анализов, дневника, истории правок
  • OpenAI GPT-4o (Vision + Text) — вся магия анализа
  • matplotlib + PIL — генерация графиков и отчётов
  • Docker — для локальной разработки и запуска в проде
  • Grafana + Loki — мониторинг логов, ошибок и времени отклика

🔒 Безопасность данных

С самого начала я заложил принцип: никаких фамилий, логинов, телефонов или email. Бот не собирает персональные данные, и вся информация в БД строго обезличена. Мы храним только chat_id, которого недостаточно, чтобы понять, кто именно стоит за пользователем (если он сам не скажет).

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

📷 Обработка изображений

Все фотографии обрабатываются полностью в оперативной памяти, без сохранения на диск и без загрузки в сторонние хранилища. Бот скачивает изображение как байтовый поток, отправляет его напрямую в OpenAI Vision API, получает результат и тут же очищает файл из памяти.

👉 У меня как у разработчика нет и не может быть доступа к вашим изображениям.
Я не вижу, не сохраняю и не могу восстановить ни одно фото, которое вы отправили боту. Ни в логах, ни в базе, нигде. Даже если бы я очень захотел — технически это невозможно.

Все данные, которые сохраняются, — это только результат анализа: обезличенный JSON с информацией о блюде и питательной ценности. Никакие изображения, имена файлов или оригинальные медиа в БД не хранятся.

Кроме того, у Telegram есть особенность: он автоматически обрабатывает и перекодирует изображения, даже если это то же самое фото, отправленное дважды. Поэтому обычный хеш (например, SHA256) не позволяет понять, было ли это фото уже загружено ранее.

Чтобы избежать лишних обращений к OpenAI, я реализовал кастомную систему хеширования, которая использует визуальный хеш (через imagehash) и дополнительные параметры — это позволяет боту распознавать одинаковые фото, даже если Telegram немного изменил их под капотом. Благодаря этому удалось снизить количество повторных анализов и сэкономить ресурсы.

🚀 Первый запуск

Всё началось с локального запуска и тестов на себе. Потом — показал бота друзьям, коллегам, родным. Получил первые отзывы и начал постепенно улучшать: фиксил баги, уточнял промпт, добавлял фичи.

Когда стало не стыдно показывать шире, я просто начал рассказывать о боте всем, кому мог: скидывал ссылку знакомым, просил делиться дальше, упоминал при любом удобном случае — будь то разговор за обедом или чат с одногруппниками. Чистой воды сарафанное радио. Никакой рекламы, никакого продвижения — только личный энтузиазм.

Так появились первые настоящие пользователи. Люди начали присылать фото, удивляться точности и просить новые функции. Самый частый запрос был:
«А можно посмотреть отчёт за неделю?»
После этого я добавил генератор визуальных отчётов, который показывает калории и БЖУ по дням, средние значения и отклонения от нормы — всё в виде аккуратной картинки, прямо в чат.

Позже сделал небольшой лендинг на Durable — просто чтобы было, куда скинуть ссылку. Сейчас он доступен по адресу https://scanfood.ai. Там же подключены простые UTM-метки, чтобы отслеживать, откуда приходят люди.

Отдельное Telegram-приложение или WebApp делать пока не хочется. Всё работает в одном окне диалога, без установок, регистрации и лишних кликов — и это главное преимущество. Хочется оставить именно такой лёгкий и нативный опыт.

😅 Неожиданные трудности

Как ни странно, большая часть проблем возникла не с ИИ, а с людьми и интерфейсом Telegram.

🔄 Похожие блюда

GPT справляется хорошо, но бывают спорные случаи — особенно если фото тёмное, блюдо не сфокусировано или подано «без подписи». Например, бот может спутать овсянку с семенами чиа: и то, и другое похоже на сероватую массу в миске с фруктами сверху. Или принять творожную запеканку за чизкейк, особенно если нет чётких визуальных ориентиров.

Ошибки не критичные (разброс обычно в пределах ±10–15%), но для внимательных пользователей это имеет значение. Именно поэтому возможность вручную отредактировать результат — как голосом, так и текстом — стала одной из ключевых фич.

💾 Redis и FSM

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

👀 Люди — внимательные

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

🌍 Поддержка часовых поясов

Когда появились отчёты за день и неделю, встал логичный вопрос: а какой сейчас “день” у пользователя? Telegram не передаёт часовой пояс, а считать всё по UTC — значит путать понедельник с воскресеньем и ломать логику дневника.

Но оказалось, что объяснить большинству пользователей, что такое “UTC+3” — не так-то просто. Не все разбираются в таймзонах, а некоторые живут в нестандартных регионах или часто путешествуют.

Решение оказалось простым и почти гениальным: мы просто спрашиваем у пользователя текущее местное время, например:

Это не идеально (мы знаем), но достаточно точно для целей ведения дневника. Главное — оно работает, понятно, и не вызывает лишних вопросов.
А все отчёты после этого автоматически формируются с учётом локального времени: пользователь видит “завтрак во вторник”, даже если живёт в UTC+9.

⚖️ Профиль и логика зависимостей

Чтобы бот мог корректно рассчитывать норму калорий и формировать отчёты с отклонениями, пользователь должен заполнить свой профиль: пол, возраст, рост, вес, цель (похудение, набор, поддержание), уровень активности и, опционально, целевой вес. На первый взгляд — всё просто. Но на практике за этим стоит довольно сложная система взаимозависимых значений и логических проверок.

Например:

  • Если цель — поддерживать вес, то целевой вес должен совпадать с текущим. Если пользователь вводит другую цифру — это сразу считается противоречием, и бот мягко подсказывает исправить.
  • После заполнения всех полей бот показывает саммари, где пользователь может проверить и отредактировать любые данные перед сохранением.
  • Есть возможность задать свою норму калорий вручную, если пользователь считает, что формула ему не подходит. При этом бот всё равно отображает рекомендованную норму, рассчитанную по классической формуле (например, по Mifflin-St Jeor), — просто как ориентир.

Всё это требует строгой логики внутри FSM, с чёткой валидацией на каждом шаге. Задача — не только не допустить невозможных комбинаций, но и сделать так, чтобы взаимодействие оставалось понятным и комфортным даже для тех, кто вообще не знает, что такое БЖУ и TDEE.

💰 Сколько потратил и как можно монетизировать?

💸 Расходы

ScanFood.AI начинался как личный эксперимент, но даже у “пет-проектов” быстро появляется статья расходов:

  • Домен scanfood.ai — ~$140 за 2 года (AI-домены — не из дешёвых).
  • Хостинг — VPS от Hetzner с бэкапами и мониторингом, примерно $30/мес.
  • OpenAI API — зависит от активности, в среднем уходит $15–30/мес.
  • Лендинг на Durable.co — на платном тарифе, $15/мес.

Остальное: Redis, PostgreSQL, Grafana, Loki, Docker — развернуто на том же сервере, без дополнительных затрат.

📌 В итоге, в среднем $50–70 в месяц, без учёта времени и кофе ☕️. Для чего-то, что пока не приносит денег — вполне терпимо, но на долгой дистанции хочется выйти хотя бы в самоокупаемость.

💡 Идеи для монетизации

Главное правило: монетизация не должна мешать простоте и честности. Поэтому план такой:

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

Планируется:

  • триальный период на 3–4 дня, чтобы спокойно попробовать всё вживую;
  • затем — простая и прозрачная подписка, без рекламы, пушей и навязчивых окон.

В подписке также появятся новые удобные функции:

  • копирование еды из дневника в другую дату — удобно для повторяющихся приёмов пищи;
  • избранное — можно будет сохранять часто употребляемые блюда и добавлять их в один клик.

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

🛠 Планы на будущее

У ScanFood.AI уже достаточно мощный фундамент, но список идей и улучшений всё ещё длиннее, чем ToDo-лист в Notion. Вот что планируется в ближайшее и среднесрочное время:

✅ Практичные функции:

  • Копирование еды в другую дату — если вы едите одно и то же несколько дней подряд, это сэкономит много времени.
  • Избранное — сохранение часто повторяющихся блюд, чтобы не пересылать фото заново.
  • Составить меню на неделю — подборка блюд по индивидуальной норме, с учётом калорий и БЖУ.
  • Сгенерировать блюдо на X калорий — с нужным соотношением белков, жиров и углеводов (например, «что-нибудь на 500 ккал, с упором на белок»).

📊 Отчёты и аналитика:

  • Автоматическая отправка отчётов — возможность настроить автодоставку дневного и/или недельного отчёта в определённое время.

🔧 Технические и архитектурные:

  • Вынесение тяжёлых задач в фоновые воркеры — для масштабируемости.
  • Отдельный модуль для аналитики — чтобы можно было проще развивать отчётность.

🌍 Пользовательский опыт:

  • Новые языки — сначала английский, затем возможно испанский.

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

🤝 Чем может помочь Клуб?

ScanFood.AI сейчас активно развивается, и мне всегда интересна обратная связь. Вот с чем особенно хотелось бы помощи или фидбэка:

  • UX/UI-идеи: где удобно, а где — не очень? Что сбивает с толку? Где можно сделать проще?
  • Идеи для монетизации, которые не испортят опыт.
  • Контакты с сообществами, где могут быть полезны такие боты: нутрициологи, ЗОЖ-чаты, спорт-группы и т.д.
  • Продвижение — если вы делаете обзоры, ведёте Telegram-канал, блог или подкаст на тему питания, технологий, ИИ или просто интересных инструментов — буду рад сотрудничеству.

Бот полностью открыт, бесплатен и уже работает. Если вам интересно рассказать о нём аудитории — пишите, я с радостью поделюсь деталями, инсайдами и помогу подготовить обзор. Сейчас на этапе роста для меня важна именно аудитория и фидбэк.

  • Ну и если вы хотите интегрировать анализ еды в свой проект — можем пообщаться про API.

💬 Что могу посоветовать другим?

  • Начинайте с боли, а не с идеи. Если вы делаете что-то, что сами бы хотели использовать — это уже полпути к продукту.
  • Думайте о пользователе. Если на каждое действие нужно три клика — это не магия, а работа.
  • Не бойтесь запускать "сырой" MVP. Без фидбэка всё равно ничего не улучшится. Только не забудьте про логи.
  • Следите за качеством запросов к ИИ. Хороший промпт решает 90% магии.
  • Ограничивайте всё, что может взорваться. OpenAI, Redis, Telegram API — у всего есть предел. Лучше лимит заранее, чем падение на проде.

И ещё: просто делать — это уже много. Всё остальное можно дописать потом.

Всем, кто дочитал до конца — спасибо!
Если хотите попробовать бота — вот ссылка:
👉@ ScanFood.AI

Буду рад фидбэку, критике, багам, похвале и идеям. Пишите прямо сюда или в Telegram — я читаю всё.

55 комментариев 👇

Минутка душноты:

У меня как у разработчика нет и не может быть доступа к вашим изображениям.
Я не вижу, не сохраняю и не могу восстановить ни одно фото, которое вы отправили боту. Ни в логах, ни в базе, нигде. Даже если бы я очень захотел — технически это невозможно.

Если ваш бот получает от юзера картинки и отправляет в openai, значит у вас есть к ним доступ, вы просто "на честном слове" не смотрите их

И технически невозможно только одно - удостовериться, что это действительно так

  Развернуть 1 комментарий

@Defqon1, Спасибо за комментарий — очень точное замечание.

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

  1. Экономия ресурсов — хранение медиаконтента быстро раздувает диски, особенно при активном использовании.
  2. Нет желания тратить время на поддержку, чистку, мониторинг и обеспечение безопасности хранилища изображений.
  3. Юридический риск - пользователь может прислать всё что угодно, включая контент, который лучше вообще нигде не хранить. А хранить персональные изображения на сервере - это уже потенциальная ответственность по GDPR и другим законам о защите персональных данных.
  4. И да, моральный аспект тоже есть — я не хочу иметь доступ к личным фото людей, даже если это “просто еда”. Это вопрос доверия, и я не хочу его подрывать.

Поэтому всё сделано так, чтобы изображения обрабатывались в памяти и сразу удалялись. Это не «невозможно технически» - это сознательное и осмысленное архитектурное решение.

  Развернуть 1 комментарий

@Defqon1, продолжу минутку душноты!

И технически невозможно только одно - удостовериться, что это действительно так

Технически, если использовать TEE (например, Intel SGX/TDX / AMD SEV / etc), то можно верифицировать, что код запущенный в виртуалке соответствует заявленному хэшу и не был изменен. В таком случае надо иметь доверие к аттестующей стороне (производителю процессора) и иметь reproducible сборку этой вмки из открытых сорцов.

В случае с телеграмным ботом это сделать сложнее, потому что нет возможности проверить, что webhook/апдейт от телеграма прочитает именно аттестованный инстанс. Если пофантазировать, можно сделать протокол при котором аттестация происходит не через телегу, согласуется эфемерный ключ шифрования не покидающий этот инстанс, и уже им шифруется отправляемая в телеге фотка, но это ломает юзабилити)
Attested TLS вряд ли поддерживается браузерными движками, но в апке такое точно можно сделать.

  Развернуть 1 комментарий

Начну душнить, добрый вечер.
Если подсчёт калорий реализован с точностью +/- 15% то можно считать, что он не реализован совсем. Потому как на правильных и эффективных диетах как раз таки эти проценты отличают набор от удержания, а удержание - от похудения.
Поэтому при всей прикольности стартапа, практической пользы от него может быть только вред в виде иллюзии контроля :(

  Развернуть 1 комментарий

@FEARmeR, Спасибо за замечание, очень дельный комментарий — и да, я с вами отчасти согласен: в питании именно эти "+/- 10–15%" часто и решают, особенно на жёстких дефицитах или при точной работе над телом.

Но тут важно понимать контекст и условия. Точность сильно зависит от источника информации.
Если человек просто прислал фото запеканки без описания — да, модель может ошибаться, потому что по внешнему виду невозможно определить важные детали: например, использовался ли сахар или сахарозаменитель, был ли творог жирным или обезжиренным, добавлялось ли масло в тесто и т.д.

Но если:

  • блюдо простое (например, рис с овощами и курицей),
  • видны порции, текстуры, составляющие,
  • пользователь добавил описание (например: «фарш 5%, жарено без масла»),

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

Кроме того, в боте предусмотрены удобные инструменты для уточнения:

  • можно отредактировать результат вручную (текстом или голосом),
  • можно ввести своё БЖУ и калорийность вместо предложенного варианта,
  • всё это сохраняется как корректировка и отображается в отчётах.

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

Для "достаточно хороших" фото и ясных описаний результат действительно оказывается очень близким к реальности.
А если хочется точности в пределах 1 г жира — тогда, конечно, лучше весы, тетрадка и личный диетолог :)

  Развернуть 1 комментарий

@yuragazaryan, А вопрос такой, проверяли на одной и той же порции в разных тарелках?
Я просто сам занимаюсь периодически подсчётом и пробовал для рецептов чат-гпт в том числе (платный), и мне это сильно напоминает как в fat secret некоторые забивают «круассан с шоколадом - 1 штука», а 50 он граммов или 200 - ну как повезет…
То есть сферическое блюдо в вакууме оно знает, а вот именно чтобы условно процент мяса в плове посчитать - уже нет

  Развернуть 1 комментарий

@FEARmeR, Да, очень в точку. Мы тоже тестировали одну и ту же порцию в разных тарелках и ракурсах, и действительно — модель иногда меняет свою "оценку" объёма. Например, на широком белом блюде порция кажется меньше, чем в глубокой миске.

Это, к сожалению, ограничение самого визуального подхода: модель не "знает", сколько граммов на фото — она оценивает по визуальному контексту, а не по весам.

Сравнение с FatSecret очень уместное:

«круассан с шоколадом — 1 штука»

и да, эта "штука" может быть как 120 ккал, так и 500 — и модель не узнает, если не указать порцию явно, так как просто тупо не видно сколько в этом круассане шоколада (например)

ScanFood.AI работает точно так же:

Если просто прислать фото "плова", то модель определит состав, но может не точно определить, сколько там грамм мяса.

Если подписать "плов, 250 г, на говядине, 20% мяса", то результат сразу становится на порядок точнее.

📌 И как ты правильно сказал — AI может адекватно оценить "сферическое блюдо в вакууме", но если нужны точные цифры, особенно по весу или пропорциям, то входные данные должны быть максимально точными.

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

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

@rtyke, А что в этом плохого? 🙂 Я этого и не скрываю.
Я пишу как думаю, а AI помогает превратить поток мыслей в связный и читаемый текст. Без лишней воды, с нормальной структурой и без «эээ... ну короче». Больших талантов к писательству у меня нет, зато есть желание донести идею понятно — и для этого это отличный инструмент.

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

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

@rtyke, видимо это вопрос восприятия, я больше воспринимаю суть, когда что то читаю и не сильно важно как это написано, а вы, вероятно, эмоцию которая эта суть соправождает :)) Каждому свое, в любом случае, наверное стоит понаблюдать за этим ))

  Развернуть 1 комментарий

@FEARmeR, можно подумать, подсчёт в "ручном" режиме даёт лучшую точность. Данные на упаковке указаны с какой-то погрешностью, весовка идёт с какой-то погрешностью, и т.д. и т.п. В итоге, я думаю, всё и выходит на сравнимый уровень погрешности. У каждого свой метаболизм и как он изменяется при изменении внешних условий (дохулион им число). В конечном счёте важен только один параметр – набираешь ты вес или теряешь его.

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

Для объективности отмечу, что проблемы лишнего веса у меня нет. Калории не считаю вообще. Чисто так, примерно знаю, что вот тут "почти нет калорий", вот тут "надо бы пореже жрать", а вот тут "инсулиновая бонба, раз в месяц так уж и быть". Моя религия – здоровый похуизм.

  Развернуть 1 комментарий

@Spaider, Да, ручной подсчет работает лучше и точнее. Возможно, ты не высчитываешь калории идеально как в лаборатории, но рацион конкретного человека если он готовит дома из понятных +/- одинаковых продуктов (а в среднем это на 80% одно и то же) может быть зарегулирован очень точно.
В принципе, переменных в этом уравнении ровно две: меньше/больше кушать и меньше/больше двигаться. Подсчет калорий решает первую. И пофиг, какая у тебя погрешность в абсолютных цифрах, если она всегда в одну сторону и на похожее значение. Главное - сравнивать свой обед со вчерашним. И этот вопрос весы и ручной подсчет решают, а бот с распознавалкой (по моему мнению) - нет.

  Развернуть 1 комментарий

@FEARmeR, ручной подсчёт — разумеется один из самых точных способов, если взвешивать продукты, готовить дома и использовать одни и те же ингредиенты. Но давай честно: это далеко не для всех. Постоянно всё записывать, сверяться с этикетками, держать в голове БЖУ — быстро надоедает и скорее демотивирует продолжать. Особенно если ты голодный, а тут ещё перед тем как поесть стоишь, как дурак, и считаешь, сколько калорий.

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

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

  Развернуть 1 комментарий

@yuragazaryan, Ну я с одной стороны согласен , с другой - не очень :)
Для себя лично я сделал вывод, что я точно знаю, какие продукты мне штаны ушивают. И если вес ползет наверх - что делать. Но это скорее вопрос опыта. Я сам много раз видел в интернете "калорий не работают", именно от таких вот на-глаз подсчётов. Но если кому-то удобно - то хорошо, признаю, имеет право на существование

  Развернуть 1 комментарий

Эх :(

Я уже, наверное, в 4-й раз «ведусь на маркетинг» подсчета калорийности по фото и в 4-й раз разочаровываюсь

Здесь бот не узнал кусок свинины по центру

А тут промахнулся с весом ;)

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

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

Когда сидишь на диете и борешься за возможность съесть лишнюю печеньку - это не придирчивость, а вопрос выживания 😄

  Развернуть 1 комментарий

@mpoznyak, Очень понимаю, правда. Я сам с детства борюсь с лишним весом — у меня не то чтобы "генетическая склонность", скорее культурная: попробуй вырасти в армянской семье и не набрать после каждого застолья 😄. Там если не поел вторую порцию — значит, болеешь.

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

Сейчас я стараюсь строить питание вокруг баланса, сытости, спокойствия — не "либо строго, либо никак", а "как делать, чтобы жить". Поэтому и бот создавался не как судья, а как помощник, который может снизить фоновую нагрузку: не считать вручную, не запоминать, не переписывать — просто скинул и получил понятный ответ.

Так что да — контроль важен, дисциплина важна, особенно если ты в дефиците. Но самоконтроль — это работа, которую бот не сделает. Он может помочь, но не подменить личное внимание к себе.

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

Зашёл ещё раз поделиться результатами своего эксперимента. Напомню, я не поборник считать сожратые калории до копеечки. Так, прикидываю на глазок. Так вот, решил я чуть подправить внутреннюю калибровку и сфоткал свой обед. Заслал в бот и его оценка была практически ровно в два раза меньше, чем мне выдали бесплатный ChatGPT и платный Perplexity. Вся еда предельно опознаваема. Про неопознаваемые нюансы я написал (фаршированность курицы без рентгенографии не увидишь :) ). Я сфоткла свою ладонь для определения масштаба. Фиг там, оценка не сильно изменилась.

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

Я понимаю, это единичный случай. Но всё же, это очень простой и понятный пример. И "голые" нейрочатики справились сильно лучше.

  Развернуть 1 комментарий

@Spaider, привет! спасибо за фидбек :) У модели бывают галюцинации, согласен. Есть идея прикрутить еще в сторонке проверочную модель, но пока, к сожалению, в рамках пет проекта времени на это особо нет. Если не сложно пришли мне пожалуйста фотографию, с которой возникли проблемы, мы постараемся поработать над проблемой. Если не хочешь публично, можно в телеграм: @ygazaryan

  Развернуть 1 комментарий
Anton Re Управляющий партнер 18 июня в 06:20

Крутая штука, спасибо

Я использую YAZIO для регулярного подсчета (как Fatsecret, но симпатичный).

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

Самый неудобный кейс, это когда ешь в кафе - натыкать там набор продуктов это всегда боль.

Поэтому если бы был какой-то экспорт бот-приложение для подсчета было бы супер. Хоть я и понимаю, что там такого апи скорее всего нет

  Развернуть 1 комментарий

@AntonRe, есть не особо официальная дока на yazio rest api

По идее, можно намутить какой-то такой пайплайн для еды из кафе

Фотка (для веса) + голос (перечислить ингредиенты) и послать все это в yazio

Кто бы сделал :)

  Развернуть 1 комментарий

@yorlov, круто, спасибо

все хотел попробовать какой-то вайбкодинг, возможно это будет моей штукой

  Развернуть 1 комментарий

@AntonRe, спасибо за идею. Мы скорее думаем над импортом данных из этих приложений к нам в бота, чтобы пользователи могли перейти к нам, а не помогать им использовать конкурентов ))

  Развернуть 1 комментарий

@yuragazaryan, импорт как раз там сделать можно. Физикл импортирует в свою платформу, можно у них подсмотреть.

  Развернуть 1 комментарий
Egor Suvorov Программист/преподаватель C++ 18 июня в 02:53

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

Он разве не равен пользовательскому user_id?

  Развернуть 1 комментарий

@yeputons, да, chat_id в приватных чатах действительно равен user_id, но сам по себе он ничего не даёт.

Если пользователь в Telegram не указал username, а в поле имени у него стоит "qwerty" или эмодзи, то я как разработчик никак не могу понять, кто это. У меня нет ни телефона, ни ника, ни имени - только числовой ID, который сам по себе не идентифицирует личность.

Плюс ко всему - все эти данные в Telegram можно изменить в любой момент: имя, username, даже фото. А вот user_id остаётся тем же, и без добровольно предоставленной информации я не могу установить связь между пользователем и его анализами.

  Развернуть 1 комментарий
Egor Suvorov Программист/преподаватель C++ 18 июня в 02:54

Решение оказалось простым и почти гениальным: мы просто спрашиваем у пользователя текущее местное время

Огонь! Уже придумали, что делать с переводом часов, особенно когда в разных странах по-разному переводят?

Или с путешественниками?

  Развернуть 1 комментарий

@yeputons, пока есть только возможность изменить местное время вручную. хороших идей как это сделать пока нет.

  Развернуть 1 комментарий

@yuragazaryan, я в одном из пет проектов (тоже телеграм бот) делал так - спрашивал у пользователя его город -> отправлял в openai api (там любая недорогая модель с этим справится) -> получал таймзону в нужном мне формате

пользователю это проще и UX почище чем куча кнопочек с цифрами :)

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

  Развернуть 1 комментарий

О, кайф, давно мечтал. Начинаем тестирование!

  Развернуть 1 комментарий

@gramlin, спасибо!) Если будут вопросы, комментарии - велком, всегда рад :)

  Развернуть 1 комментарий

Молодец! Сам подумывал о чём-то подобном, но с рождением ребёнка пришлось отложить эту идею в дальний ящик.

Не думал выпустить мобильное приложение? Кажется, что тг бота будет сложнее продавать и продвигать.

  Развернуть 1 комментарий

@buzur, спасибо)

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

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

  Развернуть 1 комментарий
Юрий Газарян Oracle Database/Apps administrator, Software developer автор 17 июня в 21:31

@yorlov, спасибо большое за тестирование и подробные примеры — это действительно помогает улучшать бота.

Честно говоря, на первом фото я сам бы не сразу понял, что в центре — именно свинина :) Там визуально вообще неочевидно, что это мясо, и тем более — какое именно. Как раз для таких случаев и существует кнопка «Внести изменения»: если модель ошибается или не распознаёт что-то важное, всегда можно быстро скорректировать результат. Чем чётче фото — тем выше точность.

По поводу второго фото — да, здесь сработал неудачный сценарий, и это, скорее всего, баг в промпте. Спасибо, что обратил внимание. Я специально доводил поведение модели до такого состояния, чтобы при обнаружении большого количества несвязанных продуктов GPT не пытался угадывать, а честно писал, что “слишком много еды” и не может корректно обработать. Видимо, в этом случае модель “передумала” и всё же решила проанализировать. Буду дорабатывать промпт, чтобы подобных ситуаций было меньше.

И в целом — это не магия :) Модель действительно может ошибаться, особенно в сложных или пограничных случаях. Я делаю акцент не на абсолютной точности, а на удобстве: бот должен быстро переводить фото, текст или голос в осмысленный результат, который легко отредактировать и использовать в дневнике.

Спасибо ещё раз — такие фидбеки бесценны.

  Развернуть 1 комментарий

@yuragazaryan, как раз очень смущает во всех таких приложениях тот факт, что по фото вообще далеко не всегда можно понять, что входит в блюдо. В простых случаях как здесь, когда ты знаешь, что должна быть свинина, а ее нет, можно вручную внести исправление, но так не всегда получается.

Один из западных фитнес блогеров хороший пример привел. Пусть у тебя в блюде есть фарш, можно ли по фотке понять, какой он жирности, 3%, 5%, 10%, 30%? Я нормальных способов не знаю, а разница в калориях от ответа может быть заметная, особенно для похудения.

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

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

  Развернуть 1 комментарий

@n1ckpr0s, абсолютно справедливое замечание. Я тоже считаю, что фото - это далеко не идеальный источник информации о составе блюда, особенно когда речь идёт о таких вещах, как жирность фарша, добавки, масло, соусы и т.д. И ни один AI (пока) не сможет угадать, что ты жарил котлеты на кокосовом масле или добавил в кашу сливки.

Но в Telegram есть очень удобная фишка: к каждому фото можно добавить подпись (caption) - и бот её читает вместе с изображением. Это идеальный способ передать то, что нельзя “увидеть”:

🥣 «овсянка с бананом, без сахара, на воде»
🥩 «котлета из говядины, фарш 5%, жареная на сухой сковороде»

В примере с фаршем:

В таких случаях модель действительно сильно точнее попадает в состав и калорийность, потому что не гадает по картинке, а учитывает то, что сказал человек. А бот при этом всё равно возвращает удобный, структурированный результат в ответ.

Так что я согласен - "фото без контекста" - это просто ориентир, а “фото с подписью” - это уже полноценный анализ.

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

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

Круто, что довёл идею до реализации!

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

В этом к сожалению сложность приложений-оберток над api – малый moat

Энивэй, удачи с продвижением идеи! Критиковать легко, делать сложно, знаю по себе

  Развернуть 1 комментарий

@AlexanderSh, да, все так. Также, мне кажется важным, что телеграм довольно популярное приложение и мы туда очень часто заходим в течении дня, почитать новости, ответить на сообщения, полистать мемы. Для многих это как бы и так ежедневная рутина в которую можно встроить еще и полезную привычку записывать то что ты ешь :)

  Развернуть 1 комментарий
Сергей Васильев бэкенд -разработчик, IT-сантехник 18 июня в 07:12

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

по делу: при открытии дневника выпадает слишком много данных и картинка с цифрами на белом фоне уходит далека вверх. может удобнее было бы вывести отдельно статистику за день, типа сколько сожрано/ сколько ещё можно сожрать

  Развернуть 1 комментарий

@makryun, спасибо, подумаем как можно пересортировать более понятно.

  Развернуть 1 комментарий
Andrei Kulesha QA Manager / Resource Manager 18 июня в 08:54

Привет!

Спасибо за возможность попробовать, пока попробовал только добавление текстом, но хочу и с фото поэкспериментировать.

Пару моментов, которые мне бросились в глаза, но они абсолютно не критичны:

  • Было бы здорово при стартовом сообщении добавить приглашение заполнить профиль. Сейчас это интуитивно не понятно и я заметил кнопку "Профиль" только потому, что почитал статью.
  • После заполнения профиля бот рассчитывает калорийность в день. Если цель - похудение, то было бы здорово сделать какой-то прогноз или рекомендацию по тому, сколько времени может занять процесс похудения с выбранным видом активности.
  • Было бы здорово добавить еще клетчатку в добавок к КБЖУ и учитывать в норме при репортинге.
  • Когда добавляешь приём пищи, получаешь сообщение со всем списком продуктов в граммах и ккал. КБЖУ сумма только в конце. Было бы здорово добавить еще и БЖУ к каждому продукту, чтобы если я вношу запись до приёма пиши - мог что-то поменять.
  • Один и тот же прием пищи может считаться по разному, даже если текст был практически идентичным (погрешность в пределах нормы), но это снижает доверие в правильности расчетов
  • Сравнивал расчеты КБЖУ со своей самодельной Google таблицей - в среднем ощущение, что калорийность и жирность занижается, в то время как белок/углеводы более-менее сходятся
  • Если передавать точное название продукта, то бот с большой долей вероятности проигнорирует название и возьмет КБЖУ по обобщенному варианту. Например, Ветчина KRAKUS Szynka eksportowa - берет как 🥩 Ветчина свиная ≈ 100 г, 120 ккал (в реальности 98 ккал), ветчина MORLINY Szynka morlińska wędzona - берет как 🥓 Ветчина свиная ≈ 100 г, 135 ккал (в реальности 94 ккал)
  Развернуть 1 комментарий

@Andrei_Kulesha, привет!)

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

хороший поинт, наверное стоит задуматься.
Если начнешь пользоваться ботом, то дальше при построении отчетов без профиля, при добавлении в дневник, бот будет напоминать о заполнении профиля и зачем это надо.

Например так:

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

вот это точно в todo list, спасибо.

Было бы здорово добавить еще клетчатку в добавок к КБЖУ и учитывать в норме при репортинге.

Тут тоже подумаем, что можно придумать.

Когда добавляешь приём пищи, получаешь сообщение со всем списком продуктов в граммах и ккал. КБЖУ сумма только в конце. Было бы здорово добавить еще и БЖУ к каждому продукту, чтобы если я вношу запись до приёма пиши - мог что-то поменять.

это было в первой версии :) Потом решили убрать БЖУ отдельных продуктов и оставить только результирующий, так это снижало читаемость, все таки мы внутри телеграма находимся, пространство ограничено.

Сравнивал расчеты КБЖУ со своей самодельной Google таблицей - в среднем ощущение, что калорийность и жирность занижается, в то время как белок/углеводы более-менее сходятся

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

Попробую внимательнее последить за этим, спасибо.

Например, Ветчина KRAKUS Szynka eksportowa - берет как 🥩 Ветчина свиная ≈ 100 г, 120 ккал (в реальности 98 ккал), ветчина MORLINY Szynka morlińska wędzona - берет как 🥓 Ветчина свиная ≈ 100 г, 135 ккал (в реальности 94 ккал)

Да, есть такая проблема. Бот не очень хорошо понимает производителей, возможна эта какая то внутренняя защита от рекламы (мое предположение). У меня такая же проблема с протеиновым молоком, ни в какую не хочет его признавать. Я в таком случае пишу, молоко X ккал / 100ml и тогда все ок.

  Развернуть 1 комментарий

ЭТО АХУЕННО!

Десертные вафли и орешки с начинкой 🍪

🥖 Вафельная трубочка с начинкой ≈ 30 г, 135 ккал
🥮 Орешек с начинкой (2 шт.) ≈ 24 г, 120 ккал

🍽️ Итого: ≈ 255 ккал
🥚 Белки: 3 г | 🧈 Жиры: 13 г | 🍞 Углеводы: 33 г

  Развернуть 1 комментарий

Привет!
Спасибо за бота, я уже неделю пользуюсь - пока что полет нормальный.
Вообще я сейчас в стадии восторга, от того, как это просто - ранее с переменным успехом пыталась заносить данные в Fat secret, но без кухонных весов или регулярного опыта взвешивания своей еды - пользоваться становится сложно, особенно, если в блюде более 2-3 ингредиентов.

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

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

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

Из интересных моментов - насыпала сухую пасту в кастрюльку (получилось в пару слоев, дно кое-где проглядывало) - бот сказал, мол там 70 грамм. Пересыпала то же количество пасты в большую тарелку, чтобы в один слой распределить - бот сказал, что на фото 40 грамм. По калориям с пастой, это конечно, было сильно по-разному.
Непонятно, в каком виде определяется точнее (мне кажется, было по факту грамм 50, так что теперь стараюсь фоткать все на большой тарелке).

  Развернуть 1 комментарий

@tequillaboom, привет! Извини за поздний ответ 🙂

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

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

Что касается фичей: напоминалки - классная идея! У нас реально много задумок, но при этом уже около 5000 пользователей, и каждую новую функцию нужно тщательно тестировать, чтобы всё работало как часы. Поэтому сейчас делаем упор на качество и внедряем только самые проверенные изменения.

В целом у нас к этому проекту огромный интерес, и мы продолжаем активно его развивать! Stay tuned, как говорится :)

  Развернуть 1 комментарий

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

@yuragazaryan я публично приношу извинения, что так активно критиковал саму идею. Время показало, что я не прав.

  Развернуть 1 комментарий

@FEARmeR, привет!) спасибо, принято 🙂

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

В любом случае очень ценю любую обратную связь - она реально помогает двигаться в нужную сторону.

  Развернуть 1 комментарий

Привет! Идея отличная. Я давно занимаюсь спортом и давно слежу за питанием, юзаю FatSecret и, конечно, уже привык, но периодически ем в ресторанах и давно думал о приложухе, которой отправишь фото и она тебе кбжу отдаст, чтобы исключить вопросы к официантам "есть ли у вас карта кбжу". Что-то пробовал в чатгпт скидывать еще давно, но он фигню писал. И трудоемко было, в тг правда проще.

Поюзаю сервис с ресторанными блюдами, дам фидбек. Спасибо за работу!

  Развернуть 1 комментарий

😎

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

Что вообще здесь происходит?


Войти  или  Вступить в Клуб