Почему классический OCR сдаётся перед врачебным почерком
Представьте архив медицинских журналов. Тысячи страниц. Почерк, который кажется зашифрованным посланием инопланетной цивилизации. Tesseract смотрит на это и молча закрывается. Cloud Vision API от Google хоть что-то выдаёт, но каждая страница стоит денег, а главное — эти записи о пациентах улетают в неизвестность.
Конфиденциальность медицинских данных — не абстрактное понятие. В Европе за нарушение GDPR штрафуют на миллионы. В России требования 152-ФЗ тоже никто не отменял. Отправлять сканы в облако — играть в русскую рулетку с репутацией клиники.
Вот здесь и появляется Qwen2.5-VL. Не очередной узкоспециализированный OCR движок, а полноценная vision-language модель. Она не просто ищет знакомые символы — она понимает контекст. Видит, что после слова "доза" обычно идут цифры. Догадывается, что каракули в графе "препарат" — это "амоксициллин", а не "амоксиклав". Работает с таблицами, смешанным текстом (печатный + рукописный), даже с простыми схемами.
Qwen2.5-VL против конкурентов: кто реально работает на MacBook Air
Теория прекрасна. Но попробуйте запустить LLaVA-Next-34B на MacBook Air M2 с 8 ГБ общей памяти. Увидите красивый спиннер и через пять минут — падение системы. Даже Qwen3-VL-8B, который мы тестировали ранее, требует минимум 12 ГБ для комфортной работы.
| Модель | Минимум RAM | Скорость (стр/мин) | Точность на почерке | Работает оффлайн? |
|---|---|---|---|---|
| Google Vision API | Не применимо | 50+ | Средняя | Нет |
| LLaVA-Next-34B (Q4) | 24 ГБ | 2-3 | Высокая | Да |
| Qwen2.5-VL-3B (INT8) | 5-6 ГБ | 8-10 | Хорошая | Да |
| Qwen2.5-VL-7B (Q4) | 8-9 ГБ | 4-5 | Очень высокая | Да |
Qwen2.5-VL-3B в INT8-квантовании — это компромисс, который работает. 70-80% точности 7B-версии, но в два раза меньше памяти и в два раза выше скорость. Для архивации исторических журналов, где важна полная оцифровка, а не идеальная точность каждого символа — идеально.
Три шага к работающему OCR на вашем Mac
1 Выбор оружия: MLX или трансформеры?
Здесь ошибка стоит дорого. Если возьмёте стандартный transformers от Hugging Face — будете ждать вечность. Apple Silicon хочет родной фреймворк. MLX — как PyTorch для Neural Engine, только проще.
2 Настройка памяти: как не утонуть в 8 ГБ
Самое важное — контроль загрузки изображений. Нельзя просто взять и скормить модели сканы в 300 DPI. Даже одна такая картинка может съесть 2 ГБ памяти.
- Ресайз до 1024px по большей стороне (этого достаточно для чтения)
- Конвертация в grayscale для медицинских журналов (экономит 2/3 памяти)
- Batch size = 1. Да, медленно. Но стабильно.
- Принудительная очистка кэша после каждой страницы
Если у вас Mac с 16 ГБ — можно пробовать batch size 2-3. Но помните про опыт с Mac Studio: память заполняется быстрее, чем кажется.
3 Промпты, которые работают с медицинским контекстом
«Прочитай текст» — слишком просто. Qwen2.5-VL нужно объяснить, что именно вы хотите.
Рабочий промпт для медицинских карт: "You are analyzing a scanned medical journal page. Extract ALL handwritten text exactly as written. Preserve line breaks. For medication names and dosages, if the handwriting is unclear but context suggests a common drug, note it in [brackets]. Ignore printed headers and footers unless they contain patient data."
Ключевое слово — «exactly as written». Без этого модель начнёт «исправлять» орфографические ошибки врачей, что недопустимо для архивных документов.
Кому это реально нужно? (Спойлер: не только медикам)
Да, медицинские архивы — самый очевидный кейс. Но есть ещё:
- Юридические фирмы с рукописными протоколами 90-х годов
- Музеи, оцифровывающие дневники и письма
- Лаборатории, где до сих пор ведут журналы наблюдений от руки
- Пенсионные фонды с кипами бумажных заявлений
Объединяет их одно: документы нельзя выносить из помещения, нельзя отправлять в облако, а платить за API тысячи долларов — не вариант.
Что делать, если Qwen2.5-VL всё равно не влезает в память?
Бывает. Особенно с цветными сканами высокого разрешения. Тогда идём на крайние меры:
- Пробуем Qwen2.5-VL-1.5B (да, есть и такая). Точность упадёт до 60%, но хоть что-то
- Разрезаем страницу на 4 части, обрабатываем по отдельности, склеиваем результат
- Используем техники из Parakeet TDT: прогрессивную загрузку, где модель видит сначала low-res версию, потом детали
- Смиряемся и покупаем Mac с 24 ГБ. Серьёзно, иногда это дешевле, чем месяцы оптимизации
Будущее, которое уже здесь (но пока тормозит)
Qwen2.5-VL — не идеал. Она путает похожие буквы в слитном почерке. Иногда "придумывает" слова, которых нет. Работает медленнее, чем хотелось бы.
Но альтернатива — либо нарушать законы о персональных данных, либо нанимать студентов-медиков для перепечатывания архивов. Первое — рискованно. Второе — дорого и ненадёжно.
Следующий шаг — специализированные fine-tune'ы на медицинский почерк. Представьте Qwen2.5-VL, дообученную на 10 000 страниц из разных больниц. Она будет узнавать конкретные сокращения, почерк конкретных врачей, даже местный сленг.
А пока — скачайте INT8-версию 3B модели. Возьмите десять сканов самых нечитаемых журналов. Запустите. Да, первый запуск займёт 15 минут (модель грузится в память). Да, первая страница обработается за 30 секунд. Но когда увидите, как система выдаёт "в/в капельно 200 мг каждые 6 часов" из каракулей, которые вы сами не разобрали — поймёте, зачем всё это.
P.S. Если решитесь на fine-tuning под свой архив — не используйте живые данные даже для обучения. Возьмите старые журналы 80-90-х годов, где пациенты уже... ну, вы поняли. Или сгенерируйте синтетические данные. Этика в AI начинается с таких мелочей.