🍷 Поиск вина по фото этикетки

Покупатель фотографирует бутылку в магазине — система находит это вино в каталоге и подбирает аналоги. Проект для хакатона ЛЦТ 2026

🎯 Проблема

Покупатель стоит у полки и хочет узнать о вине больше, а каталог винного сервиса — это ~2000 позиций:

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

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

💡 Решение

Сервис, который узнаёт вино по «визуальному отпечатку» этикетки и честно говорит, насколько уверен в ответе:

✅ Поиск по фото этикетки ✅ Чтение текста только при сомнении ✅ Уверенность словами ✅ Аналоги, если вина нет ✅ Работает в браузере телефона

🔧 Как это работает

Этап Что происходит Результат
1. Кроп этикетки Модель YOLO вырезает этикетку из кадра, чтобы поиск не отвлекался на ценники и соседние бутылки. Этикетка не найдена — поиск идёт по всему кадру Изображение этикетки
2. Векторный поиск Дообученная модель SigLIP превращает этикетку в вектор и находит в базе (PostgreSQL + pgvector) пять самых похожих вин Топ-5 кандидатов
3. Чтение этикетки при сомнении Если модель не уверена или лидер почти не отличается от второго места, система читает текст (OCR): производителя, сорт, цвет — и выбирает среди найденных кандидатов. Текст меняет ответ только при надёжном совпадении Уточнённый ответ
4. Уверенность Результат показывается словами: высокая, средняя, низкая или «не найдено» Честный ответ без «угадывания»
5. Аналоги Вина того же сорта от других производителей; если вина нет в каталоге — подбор по сорту, прочитанному с этикетки (в том числе латиницей) Пользователь остаётся в каталоге
6. Обратная связь Вопрос «Это то вино? Да / Нет» копит данные для дообучения и пополнения каталога Данные для улучшения модели

💻 Пример интерфейса

1. Сканер

Экран сканера

Съёмка камерой или загрузка фото этикетки

2. Результат с уровнем уверенности

Результат поиска

Карточка найденного вина с меткой уверенности и вопросом «Это то вино?»

3. Вино не найдено — аналоги по этикетке

Подбор аналогов

Вина нет в каталоге — система прочитала сорт с этикетки и предложила похожие вина

✨ Ключевые преимущества

  • Честная оценка качества — похожие вина одной линейки размечены и не попадают одновременно в обучение и проверку, поэтому точность не завышена
  • Обучение на реальных фото — к каталожным снимкам добавлены фото с полок и имитация съёмки на телефон: модель учится переходу «телефон → каталог»
  • Простая и сопровождаемая модель — сложные схемы обучения прироста не дали, выбрана простая: её легко переобучить при обновлении каталога
  • Страховка на каждом шаге — нет этикетки — поиск по кадру; недоступен локальный OCR — резервная модель по API; и она не ответила — лучший ответ по картинке
  • Пользователь не уходит ни с чем — если вина нет в каталоге, сервис предлагает аналоги
  • Один сервис — интерфейс и API — веб-интерфейс, JSON API и журнал решений работают на одном пайплайне

📈 Метрики

Показатель Значение
Верное вино на 1-м месте 96% (без чтения этикетки)
Размер каталога ~2000 вин
💡 Как считали: собственная контрольная выборка из 52 фото с телефона, снятых в тех же условиях, что у покупателя. Эти фото не использовались при обучении модели.
💡 Статус проекта: решение для хакатона ЛЦТ 2026. Публичное демо развёрнуто на сервере без GPU.

🚀 Варианты улучшения

Направление Что добавить
Магазины рядом Где купить это вино и по какой цене — место в интерфейсе уже заложено
Цифровой сомелье Подбор вина к блюду
Больше реальных фото Расширение обучающей выборки и чистка дублей в каталоге — прямой рост точности
Настройка по отзывам Пороги включения OCR и доверия модели уточняются на реальных сканах и ответах «Это то вино?»
Аналитика для партнёров Какие вина и где сканируют чаще всего, что ищут, но не находят в каталоге

🛠️ Технологии

Python FastAPI Jinja2 YOLO SigLIP2 DINOv2 ONNX Runtime OCR LLM API PostgreSQL pgvector Docker Caddy

🔗 Ссылки

🚀 Открыть демо @ Написать в Telegram

Нужен поиск товаров по фото для вашего каталога? Напишите мне — обсудим адаптацию под ваши данные.