Comments 24
Отсканированные пачки документов часто содержат кривой и вообще набок положенный текст, мистраль ocr его как картинки обрабатывает, вставляет в текст надпись <тут картинко>
А кто такой текст хорошо обработает?
Chatgpt и gemini без проблем читают русский текст повернутый любым боком, раскрашенный в радужные цвета в очень низком разрешении.
А сколько будет стоить распознать 1000 страниц А4 на GPT-4o?
Вы сравниваете инструменты из разных ценовых ниш и для разного применения (если у вас текст как угодно может идти)
Я не сравнивал, не знаю про разноцветный и на боку, но локальная Florence круто текст распознает. На выходе правда не структура, а строки и координаты
1000 страниц флеш отсканирует за 40р

мистраль сделает это намного быстрее, и возможно дешевле но потеряет и исказит намного больше текста
Я сейчас хорошенько потестировал и Gemini flash litе, как у вас и сам Gemini flash
Тестировал на несложном медицинском анализе с таблицей на три строки
И получил совсем противоположные результаты по искажению. Gemini flash ломал структуру таблицы, вытаскивая из нее из определенной ячейки данные и показывая совсем в другом месте, какими бы промптами я его не просил так не делать. Ему казалось, видимо, что по смыслу они относятся к "подписи", которая была под таблицей. Также переносил данные одной ячейки в другую.
Mistral OCR возвращал всегда одну и ту же markdown таблицу, где все данные были в своих ячейках
Скрытый текст


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

флеш (лайт фри взятый на опенроутере) промпт - сохрани в маркдаун формате все элементы, маркдаун для гитхаба
| Результат | ед/изм | норма/ед |
|---|---|---|
| 617,40 | пг/мл | новорожденные: 160-1300 взрослые: 200-835 Взрослые старше 60 лет: 110-800 |
| 500,70 | пг/мл | новорожденные: 160-1300 взрослые: 200-835 Взрослые старше 60 лет: 110-800 |
| 74,60 | Нг/мл. | M-22-346 Ж -10-147 |
Исследовал: Нугаева З.М.
подпись
Вторая картинка мистраль
"""
| Исследование | Результат | $\begin{gathered} \text { Ед/ } \\ \text { изм } \end{gathered}$ | Норма/Ед |
| :--: | :--: | :--: | :--: |
| Витамин B12 <br> (B12) | 617,40 | $\begin{aligned} & \text { nr/ } \\ & \text { мл } \end{aligned}$ | новорожденные: 160-1300 взрослые: 200-835 Взрослые старше 60 лет: 110800 |
| Фолиевая <br> кислота (B9) | 500,70 | $\begin{aligned} & \text { nr/ } \\ & \text { мл } \end{aligned}$ | новорожденные: 160-1300 взрослые: 200-835 |
| Ферритин | 74,60 | $\begin{aligned} & \text { Hr/ } \\ & \text { мл } \end{aligned}$ | Взрослые старше 60 лет: 110-800 |
# Подпись:
- Нугаева 3.M.
- M-22-346
- K-10-147
Флеш
| Исследование | Результат | Ед. / Изм | Норма/Ед |
| :------------------- | :-------- | :--------- | :------------------------------------------------ |
| Витамин B12 (B12) | 617,40 | пг/мл | новорожденные: 160-1300 взрослые: 200-835 Взрослые старше 60 лет: 110-800 |
| Фолиевая кислота (B9) | 500,70 | пг/мл | новорожденные: 160-1300 взрослые: 200-835 |
| Ферритин | 74,60 | Нг/мл | Взрослые старше 60 лет: 110-800 |
Подпись:
* Нугаева З.М.
* M-22-346
* K-10-147
У меня документы - сканы бухгалтерских и юридических бумажек, там часто таблицы боком размещены, иногда даже перевернуты, печати поверх текста и таблиц наложены, некоторые элементы ручкой прописаны, мистраль просто всё это превращает в img-0.jpeg. А надо вытащить именно текст что бы его проиндексировать, расположение не так важно для поиска.
Вторая картинка - это результат Gemini, его не надо распознавать
Ок, давай пробовать
Вот эта картинка, оригинал (почти)

Openrouter FlashLite 2.0, твой промпт:
### **Врач**
| **Исследования** | **Результат** | **ед/изм** | **норма/ед** |
| ----------------------- | ------------- | ---------- | ----------------------------------------- |
| **Витамин B12 (B12)** | 617,40 | пг/мл | новорожденные: 160-1300 |
| | | | взрослые: 200-835 |
| | | | Взрослые старше 60 лет: 110-800 |
| | | | |
| | | | новорожденные: 160-1300 |
| **Фолиевая кислота (B9)** | 500,70 | пг/мл | взрослые: 200-835 |
| | | | Взрослые старше 60 лет: 110-800 |
| **Ферритин** | A09.05.076 | 74,60 | Hr/мл |
| | | | М: 22-346 |
| | | | Ж: 10-147 |
### **Интерпретацию полученных результатов проводит врач в совокупности с данными анамнеза, клиническими данными и результатами других диагностических исследований.**
### **Дата исследования**
24.03.2025г
### **Исследовал**
```markdown
Видишь поломанное?

Теперь Mistral OCR
| Исследования | | Результат | ед\/изм | норма\/ед |
| :--: | :--: | :--: | :--: | :--: |
| Витамин B12 (B12) | | 617,40 | $\\mathrm{nr} \/ \\mathrm{MJ}$ | новорожденные: 160-1300 <br> взрослые: 200-835 <br> Взрослые старше 60 лет: 110-800 |
| Фолиевая кислота (B9) | | 500,70 | $\\mathrm{nr} \/ \\mathrm{MJ}$ | новорожденные: 160-1300 <br> взрослые: 200-835 <br> Взрослые старше 60 лет: 110-800 |
| Ферритин | A09.05.076 | 74,60 | $\\mathrm{Hr} \/ \\mathrm{MJ}$ | $\\begin{aligned} & \\text { M- } 22-346 \\\\ & \\text { W-10-147 } \\end{aligned}$ |
Интерпретацию полученных результатов проводит врач в совокупности с данными анамнеза, клиническими данными и результатами других диагностических исследований.
Дата исследования
24.03.2025г

Вот эти "закорючки" потом LLM прекрасно понимаются при повторном анализе для перевода данных в json
Главное - структура таблицы правильная
А надо вытащить именно текст что бы его проиндексировать, расположение не так важно для поиска.
Ну а вот мне для анализов медицинских очень важно где что стоит
Fine Reader из 2000х годов. Без всяких ваших модных ИИ
А есть исходники для самостоятельного развёртывания?
Думаю, о, как раз проверю этот самый Мистраль по-быстрому, давно собирался. Но то ли с ботом что-то не так, то ли с Мистралем.
Кинул первый попавшийся скан (попалась транспортная накладная) - "текст на изображении не обнаружен". Повернул в правильную ориентацию - "не обнаружен". Хотя это вполне читаемый скан, а не фото даже.
Ну и отдельно отмечу, что бот почему-то не принимает несжатые картинки (которые отправляются как вложение, а не inline), т.е. намеренно усложняет себе работу.
Бот никак не пред-обрабатывает изображения. Если текст не обнаружен - значит Mistral OCR не смогла его найти. У нее есть ограничения по качеству документа.
И, да, повернутый набок текст она не понимает
Тогда это глубокое разочарование в Мистрале :( Анонсировалось как качественный скачок в OCR - а по факту древний Finereader справляется лучше. Большинство файлов у меня в худшем качестве (фото материалов дела из судов на телефон, ага). А в этом примере с накладной и предобрабатывать нечего - документ уже правильно выровнян, обрезан, повёрнут (во второй попытке) и скан изначально ч/б...
P.S. Погонял ещё немного на тех самых фото материалов дел, параллельно сравнивая результат с FineReader. Там особенность в том, что документы подшиты в толстый том и их фотографируют с рук, одной рукой придерживая страницы. Соответственно, текст почти всегда перекошен (иногда изогнут по дуге), часто немного размыт.
Так вот, когда качество фото выше среднего - Mistral показывает несколько лучший результат, у FineReader же проскакивают точечные ошибки. Вероятно, Mistral всё-таки учитывает весь контекст и не выдаёт явную бессмыслицу, а FineReader просто проверяет по словарю.
Но если фото ниже среднего - то FineReader бьётся до последнего, но пытается что-то из него всё-таки выжать. Получается отрывочно и с ошибками, но если нам для RAG - то лучше, чем ничего. А Mistral сдаётся сразу. Вот бы ему настройку этого самого порога качества документа, ниже которого сдаваться - у меня ощущение, что получалось бы у него тоже лучше.
Приятное исключение, где Mistral прямо молодец - проставленная печать и хвосты рукописного текста поверх печатного. FineReader выделил все такие области как картинку, Mistral успешно распознал текст под ними.
Оба инструмента пасуют на изогнутом тексте (строчки идут волной) и сильно размытом (но человеком всё равно отлично читаемом) тексте. Тут бы какую-то нормализацию предварительную прикрутить, чтобы документ "разгладить" и повысить резкость, надо погуглить, какие для этого есть инструменты.
Ну и если всё-таки прикручивать Mistral в пайплайн для RAG - то надо делать фоллбэк на API FineReader или Tesseract (тут уже от финансов зависит, первое или второе) для случаев, когда Mistral не нашёл текста.
Благодарю за исследование!
Да, у меня сложилось такое же впечатление, что Мистралю нужен контекст побольше и получше - возможно, его AI / ML функции тогда и включаются.
Чуть изогнутый текст - отказ. Я уже использую Tesseract утилиту для определения ориентации текста и предварительного поворота. Еще у меня на Андроиде есть ClearScaner программка, вот она очень круто все такие искажения исправляет - из фото под углом прям почти чисто скан получается. Но утилиты под Линукс такой не знаю, а она была была прям в самый раз для нормализации
Надеюсь, Мистраль будет дорабатывать свою OCR. Её можно хорошо так улучшить с помощью AI.А FineReader уже никуда не улучшишь )
В боте добавил для фолбэка обычную LLM (Gemini Flash)
В части предварительной обработки изображений тоже надеюсь на прогресс. В конце концов, на стороне Mistral это делать тупо эффективнее, т.к. можно получить мгновенную обратную связь ("первая строчка прочиталась, значит правильно разогнули, поехали дальше так же").
Но для частично нечитабельных документов, как мне показалось по итогам изысканий, классический OCR пока будет вне конкуренции. Т.к. если из-за нечитаемой области отдельные слова не складываются в осмысленный текст, то AI OCR лишается всех своих преимуществ.
Не распознал , пишет что текст не обнаружен
Самсунги умеют так же но зажав кнопку домой...ладно, не домой, а кнопку выделить экран.
Потестил, признаю, хреново получилось и форматирование слетело.
Впрочем не понятно нафига. Бот с api сейчас через любую LLM за 3 минуты пишется. Сливать свои фотки левому боту - ну нет.
Кода в статье нет, в общем...я не понял для кого статья...разве что реклама.
Ps а переводы на андройде(самсунг) - вшиты в ОС уже полгода. (Если что не знал - зажимаем кнопку центральную).
Спасибо, интересно!
Жаль, что Mistral OCR оправдал не все ожидания ;-)
Я уже давненько добавил в своего Телега-Обсидиан бота функцию OCR на базе бесплатного Google Tesseract, и она оказалась неожиданно удобна как в пути (для сохранения в заметочнике текстом чего-то ценного), так и за компом (как интерфейс для быстрого OCR).
Качество распознавания не супер-супер, но в большинстве случаев годится.
Исходник бота: https://github.com/dimonier/tg2obsidian
Спасибо
Интересный бот. Про Обсидиан тоже думал, но не у него облачного API ), а локально держать открытым процесс неудобно (да еще и на телефоне)
Mistral OCR мне в принципе нравится, использую для изображений и PDF (медицинские документы). И показалась ощутимо лучше локального Tesseract
Но конкретно для этого бота, наверно, добавлю обычную LLM в качестве фолбэка
Щепетильна Мистраль ко входу
Целый документ распознает, а четверть его - нет (как в примере в комментариях выше)
По-быстрому провел сравнительное тестирование Google Tesseract и Mistral OCR путем отправки одной картинки моему упомянутому выше боту и боту, описанному в этой статье.
Tesseract распознал больше половины текста, Mistral OCR - нисколько 🤷♂️
Телеграм бот для быстрого распознавания текста на фото с помощью Mistral OCR