Вдруг кому-то будет полезно. Возникла задача быстрого распознавания данных с фотографий и получения из них структурированной информации. Так же важно было отсутствие требовательного к ресурсам ПО и легкость разворачивания системы. Поэтому было решено попробовать использовать в качестве подключаемого модуля мультимодальные 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. Поэтому мы не могли сразу найти оптимальное соотношение по ресурсам, качеству и времени распознавания.