Введение. Контекст как катализатор

В начале 2026 года ленты новостей принесли тревожные сообщения из Сибири: массовые вспышки опасных заболеваний у КРС (крупного рогатого скота) привели к необходимости вынужденного забоя тысяч голов. Для многих фермеров это означало потерю бизнеса и средств к существованию.

Мы задались вопросом: может ли доступный Computer Vision стать первой линией обороны? Инструментом, который позволит фермеру в отдаленном районе провести первичный скрининг (триаж) животного с помощью обычного смартфона и вовремя вызвать ветеринара, не дожидаясь начала эпидемии.

Так родился проект AI-Vet-Scanner (наше пространство на Hugging Face), определяющий признаки заболеваний по фотографии.

Часть 1. Полезный ИИ: Архитектура ветеринарного скрининга

Мы не ставили задачу заменить лабораторные анализы крови — ИИ на это не способен. Наша цель — визуальный триаж.

Технически мы реализовали пайплайн мультиклассовой классификации. Чтобы сделать инференс бесплатным для конечных пользователей, мы развернули модель на Hugging Face Spaces с использованием архитектуры ZeroGPU (динамическое выделение GPU-ресурсов только в момент запроса). Это позволило нам держать production бесплатным и отказоустойчивым.

Вдохновившись успехом, мы начали расширять диагностику на свиней (детекция пневмонии) и птицу. Но работа с тяжелым социальным контекстом и болезнями неизбежно ведет к выгоранию. Чтобы разгрузить психику, мы решили направить наши MLOps-мощности на задачу, находящуюся на абсолютно противоположном полюсе полезности.

Часть 2. «Бесполезный» ИИ и проблема 9 ГБ

Наша pet-project цель: обучить SDXL LoRA генерировать изображения современных объектов, но в аутентичной эстетике Российской Империи конца XIX века.

В качестве источника данных мы нашли цифровой архив дореволюционного журнала «Вестник Моды» (1885-1917 гг.) — 9.24 ГБ высококачественных PDF-сканов.

И тут мы столкнулись с классической проблемой: как обработать этот объем данных, имея в распоряжении только бесплатные квоты облачного Jupyter-ноутбука (16 ГБ ОЗУ, T4 GPU и жесткий лимит диска в 20 ГБ)?

Часть 3. Ghetto MLOps: боремся с OOM и лимитами диска

Если вы попробуете открыть отсканированный PDF весом 300 МБ через стандартные связки вроде pdf2image + Poppler, ядро Python моментально умрет от OOM (Out of Memory). Каждая страница в высоком разрешении распаковывается в ОЗУ в виде несжатых numpy-массивов, быстро сжирая доступные 16 ГБ.

Как мы построили конвейер экстракции:

  1. Отказ от тяжелых библиотек: Мы перешли на PyMuPDF (fitz). Это легковесная обертка над сишным движком MuPDF. Скрипт не загружает весь документ в память, а рендерит строго по одной странице на лету.

  2. Математическая фильтрация мусора: Нам нужны только гравюры и эскизы платьев. 70% страниц журнала — это скучный мелкий текст. Обучать нейросеть (например, YOLO) для детекции гравюр было бы слишком долго. Мы пошли математическим путем через OpenCV:

    • Переводим отрендеренную страницу в градации серого.

    • Вычисляем стандартное отклонение яркости пикселей: cv_img.std().

    • Текст дает равномерный серый фон (низкая дисперсия). Гравюры дают резкие перепады от черного к белому (высокая дисперсия).

    • Ставим фильтр MIN_VARIANCE = 45. Всё, что ниже — выбрасывается из памяти моментально.

  3. Агрессивный Garbage Collection: Сразу после ресайза фильтрованного кадра под стандарт SDXL (1024x1024) с помощью Image.Resampling.LANCZOS, мы принудительно вызываем gc.collect() и зануляем переменные с матрицами, чтобы не забить диск мусором.

Посмотрите, какой визуальный жир мы в итоге автоматически майним из этих архивов без единого ручного клика:

Заключение. Планы на LoRA

Прямо сейчас наш скрипт-автопилот продолжает перемалывать архивы. Как только экстракция завершится, скрипт автоматически упакует тысячи JPEG-файлов в ZIP-архив для дальнейшей тренировки нашей LoRA-модели.

Мы готовимся протестировать итоговую нейросеть вот таким промптом:

"Илон Маск в виде денди в детализированном мундире императорской гвардии 1890-х годов, золотая вышивка, держит кибер-монокль, стиль акварели и гравюры."

Если вам интересен наш подход к MLOps "на коленке" или вы просто хотите поддержать наши ветеринарные (и не очень) эксперименты, заглядывайте в гости.

Поддержать наши «исследования из желудей и палок» можно тут: pay.cloudtips.ru/p/41fb15f7