Подсказка названия по фотографии

Фото выбрано в форме — приложение показывает его модели и предлагает название
с прочитанными надписями. «Подставить» переносит в поля, «Не надо» прячет.
Само не подставляется, и это принципиально: модели домысливают марки
и артикулы, когда надписей не видно. В замере клипсу для кабеля модель назвала
«конструктором LEGO Technic, 8376, 401 шт.». Запрет на выдумывание в промпте
помог: та же вещь стала «красной щёткой для посуды».

Смотрит gemma3:4b. Выбрана замером на настоящих снимках из базы:
  gemma3:4b     3.5 с, отвечает всегда, надписи читает верно
                («Лампа светодиодная C35, Нейтральный белый, 9 Вт LED, E14»);
  qwen3-vl:8b   11-32 с и часто пустой ответ — это ризонер, ему нужен бюджет
                в 2000+ токенов, и уменьшение картинки не спасает.
Проверялась и гипотеза, что дело в размере снимка: у gemma3 разницы между
1280 и 512 px почти нет, у qwen3-vl время падает с 62 до 41 с, но ответ
всё равно пуст. Картинка всё же уменьшается до 768 px — незачем гонять лишнее.

Генерация тегов чинилась по ходу: на «Стабилизатор 7805 (TO-220)» модель
отвечала массивом объектов с пояснениями, не укладывалась в 256 токенов,
и JSON обрывался на полуслове — теги выходили пустыми. Бюджет поднят до 500,
промпт требует плоский массив строк, а из битого ответа строки теперь
вытаскиваются регуляркой: лучше несколько живых тегов, чем ничего.

Pillow добавлен в зависимости — для уменьшения картинки перед распознаванием.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-31 01:24:49 +03:00
co-authored by Claude Opus 5
parent 01d7f17f89
commit bae5116d77
9 changed files with 329 additions and 8 deletions
+27
View File
@@ -18,6 +18,7 @@
```
ollama pull qwen3:8b разбор фраз и теги
ollama pull bge-m3 поиск по смыслу
ollama pull gemma3:4b подсказка названия по фото (необязательно)
```
### Какую модель выбрать
@@ -102,6 +103,7 @@ start.cmd запускает сервер и печатает адреса
| `OLLAMA_HOST` | `http://localhost:11434` | адрес Ollama |
| `HLAMINGO_CHAT_MODEL` | `qwen3:8b` | разбор фраз и теги |
| `HLAMINGO_EMBED_MODEL` | `bge-m3` | поиск по смыслу |
| `HLAMINGO_VISION_MODEL` | `gemma3:4b` | подсказка по фото; пусто — выключено |
| `HLAMINGO_PORT` | `5000` | порт веб-интерфейса |
| `HLAMINGO_DATA_DIR` | — | другая папка для данных и `.env`; используется тестами |
@@ -175,6 +177,31 @@ start.cmd запускает сервер и печатает адреса
Модель разбирает фразу за ~1,5 с, места из неё создаются сами.
### Подсказка по фотографии
Когда фото выбрано в форме заведения вещи, приложение показывает его модели
и предлагает название с прочитанными надписями:
```
фото коробки лампы → «Лампочка LED E14»
надписи: Лампа светодиодная C35, Нейтральный белый, 9 Вт LED, E14
```
Кнопка **«✓ Подставить»** переносит это в поля, **«Не надо»** прячет.
Само оно не подставляется, и это принципиально: модели домысливают марки
и артикулы, когда надписей не видно. В замере клипсу для кабеля модель
назвала «конструктором LEGO Technic, 8376, 401 шт.». Поэтому — только
подсказка, решает человек.
Смотрит **`gemma3:4b`** (`HLAMINGO_VISION_MODEL`, 3,3 ГБ). Выбрана замером
на настоящих снимках: 3,5 с и всегда отвечает, тогда как `qwen3-vl:8b` — 1132 с
и часто пустой ответ, потому что это ризонер, которому нужен бюджет
в 2000+ токенов. Перед отправкой картинка уменьшается до 768 px: снимок
разворачивается в токены, а для чтения крупных надписей столько не нужно.
Распознавание отключается пустым `HLAMINGO_VISION_MODEL` — тогда блок
подсказки просто не появляется.
### Фото
Две кнопки: **«📷 Снять»** открывает камеру, **«🖼»** — готовые снимки в галерее.