Вдруг кому-то будет полезно. Возникла задача быстрого распознавания данных с фотографий и получения из них структурированной информации. Так же важно было отсутствие требовательного к ресурсам ПО и легкость разворачивания системы. Поэтому было решено попробовать использовать в качестве подключаемого модуля мультимодальные LLM запускаемые под Ollama, т.к. у неё есть REST API по которому удобно обращаться к модели.
В последних версиях Ollama появился графический интерфейс, но он неудобен. Модели в ollama проще всего загрузить из командной строки. Например: ollama pull codellama.
В этом случае на экране должно быть выведено что-то вроде:

Документацию по Rest Api Ollama можно найти на их сайте: https://docs.ollama.com/api/introduction
Все тесты производились на следующем железе:
M/B Asus Prime B450M-A, ЦП Ryzen 5 2400G, 32GB ОЗУ, Видеокарта KFA 2 RTX 3060 12 GB. OC Win10 установлена на M2 SSD FX900 Plus, на ней же расположены участвующие в тестах модели. К сожалению, материнская плата, в отличие от видеокарты, поддерживает только PCI-E 3, поэтому потенциал карты остался не раскрыт.
В сравнении участвовали следующие модели:
Модель | Размер ollama list | Размер ollama ps |
qwen3-vl:8b | 6.1 GB | 11 GB |
qwen2.5vl:32b | 21 GB | 24 GB |
gemma3:27b | 17 GB | 20 GB |
llava:latest | 4.7 GB | 4.9 GB |
Для проведения тестирования и выбора модели было написано тестовое приложение OllamaTestClient на dotnet 9, которое обращалось к Ollama через RestAPI.
Сравнение проводилось на фотографиях титульных страниц книг со следующим промтом:
Файлы на каких проводились тесы можно найти в репозитории на гитхабе:
https://github.com/BlackEric001/OllamaTestClient/tree/main/Images.
При работе нужно учитывать, что при первом запуске ollama загружает модель, поэтому время первого ответа будет больше. В таблице везде время второго запуска.
В результате получилась следующая картина:
Файл: Скоробогачева_Айвазовский.jpg
Модель | Результат | Время распознавания | Есть ошибки | Использование ресурсов (ollama ps) |
llava:latest | {"Автор": "Стефан Иванов", "Название": "Абдulбакир Абдулрахман", "Год издания": 2019, "Издательство": "Московский университет", "Гoрод издания": null} | 00:06.0577822 | Совсем неверно. Каждый раз другой вывод. | 100% GPU |
gemma3:27b | { "Автор": "Екатерина Скоробогатова", "Название": "Айвазовский", "Год издания": null, "Издательство": "Молодая гвардия", "Город издания": "Москва" } | 00:42.9661306 | Да. Ошибка в фамилии автора | 48%/52% CPU/GPU |
qwen2.5vl:32b | { "Автор": "Екатерина Скоробогачева", "Название": "Айвазововский", "Год издания": 2021, "Издательство": "Молодая Гвардия", "Город издания": "Москва" } | 01:08.2151583 | Нет | 55%/45% CPU/GPU |
qwen3-vl:8b | {"Автор": "Екатерина Скоробогачева", "Название": "АЙВАЗОВСКИЙ", "Год издания": 2021, "Издательство": "МОЛОДАЯ ГВАРДИЯ", "Город издания": "МОСКВА"} | 00:10.6235716 | Нет | 18%/82% CPU/GPU |
llava:latest дальше не тестировали, т.к. совсем не работает.
Файл: Орир_Физика.jpg
gemma3:27b | { "Автор": "Джей Орир", "Название": "ФИЗИКА. ПОЛНЫЙ КУРС. примеры, задачи, решения", "Год издания": null, "Издательство": null, "Город издания": null } | 00:41.5113788 | Нет | 48%/52% CPU/GPU |
qwen2.5vl:32b | { "Автор": "Джей Орир", "Название": "Физика. Полный курс. Примеры, задачи, решения", "Год издания": null, "Издательство": "Учебник", "Город издания": null } | 00:59.6325552 | Да. Неверно указано издательство | 55%/45% CPU/GPU |
qwen3-vl:8b | {"Автор": "Джей Орир", "Название": "ФИЗИКА полный курс примеры, задачи, решения", "Год издания": null, "Издательство": "Университет", "Город издания": null} | 00:06.0786742 | Нет | 18%/82% CPU/GPU |
Файл: Школьник_Птицы.jpg
gemma3:27b | { "Автор": "null", "Название": "Птицы. Полная энциклопедия", "Год издания": "2007", "Издательство": "Эксмо", "Город издания": "Москва" } | 00:37.9917091 | Да. Потерян автор | 48%/52% CPU/GPU |
qwen2.5vl:32b | { "Автор": "Юлия Школьник", "Название": "Птицы", "Год издания": 2007, "Издательство": "Эксмо", "Город издания": "Москва" } | 00:57.0005204 | Нет. Отсутствие в выводе «Полная энциклопедия» не критично | 57%/43% CPU/GPU |
qwen3-vl:8b | {"Автор": "Юлия Школьник", "Название": "Птицы. Полная энциклопедия", "Год издания": 2007, "Издательство": "ЭКСМО", "Город издания": "Москва"} | 00:06.2948445 | Нет | 18%/82% CPU/GPU |
Файл: Kirby_History.jpg
gemma3:27b | { "Автор": "RICHARD SHELTON KIRBY, SIDNEY WITHINGTON, ARTHUR BURR DARLING, FREDERICK GRIDLEY KILGOUR", "Название": "ENGINEERING IN HISTORY", "Год издания": null, "Издательство": null, "Город издания": null } | 00:46.2798199 | Нет | 48%/52% CPU/GPU |
qwen2.5vl:32b | { "Автор": "Richard Shelton Kirby, Sidney Withington, Arthur Burr Darling, Frederick Gridley Kilgour", "Название": "Engineering History", "Год издания": null, "Издательство": null, "Город издания": null } | 00:55.4729723 | Да. Пропущено In в названии | 55%/45% CPU/GPU |
qwen3-vl:8b | {"Автор": "RICHARD SHELTON KIRBY, SIDNEY WITHINGTON, ARTHUR BURR DARLING, FREDERICK GRIDLEY KILGOUR", "Название": "ENGINEERING IN HISTORY", "Год издания": null, "Издательство": null, "Город издания": null} | 00:06.8475652 | Нет | 18%/82% CPU/GPU |
Файл: Ионцева_Биология.jpg
gemma3:27b | { "Автор": "А.Ю. Ионцева", "Название": "БИОЛОГИЯ. ВЕСЬ ШКОЛЬНЫЙ КУРС В СХЕМАХ И ТАБЛИЦАХ", "Год издания": "2019", "Издательство": null, "Город издания": "Москва" } | 00:53.5258399 | Нет | 48%/52% CPU/GPU |
qwen2.5vl:32b | { "Автор": "А.Ю. Ионцева", "Название": "Биология", "Год издания": "2019", "Издательство": null, "Город издания": "Москва" } | 00:54.0656173 | Нет | 57%/43% CPU/GPU |
qwen3-vl:8b | {"Автор": "А.Ю. Ионцева", "Название": "Биология", "Год издания": 2019, "Издательство": null, "Город издания": "Моск��а"} | 00:08.5062277 | Нет. Считаем, что эмблему издательства можно не распознавать. Название только «Биология» | 18%/82% CPU/GPU |

Qwen3-vl:8b оказался оптимальным для этой задачи. Собственно, все эти сравнения проводились еще летом, незадолго до выхода qwen3. Поэтому мы не могли сразу найти оптимальное соотношение по ресурсам, качеству и времени распознавания.