Динамический ресайзинг изображений (Image Previewer)

В данной статье рассматривается создание сервиса для динамического изменения размеров изображений с функциями проксирования и кэширования, а также приводится вариант его применения.

Работаем с фото и видео

В данной статье рассматривается создание сервиса для динамического изменения размеров изображений с функциями проксирования и кэширования, а также приводится вариант его применения.

Каждый день через системы «Честного знака» проходят тысячи страниц: контракты, акты, техдокументация, анкеты. Всё это нужно не просто перевести в текст — а сразу пустить в работу: поиск, анализ, генерация выжимок, передача в другие сервисы. Одна ошибка OCR — и вместо «субподрядчика» система получает «cy6пoдpялчика», а дальше никакие регулярки не спасут.
Меня зовут Искандер, я - AI-инженер в Лаборатории искусственного интеллекта «Честного знака». Мы протестировали лучшие open-source OCR-движки на реальных русскоязычных документах — от простых текстов до многостраничных PDF со сложными таблицами и изображениями. Специфика задачи: кириллица, широкий разброс форматов, нулевая терпимость к ошибкам на продакшне.
Чтобы получить честные результаты, мы собрали собственный модуль тестирования и сформировали репрезентативный датасет из 6 наборов реальных документов. В статье — методология, метрики и то, кто из движков реально справился, а кто только обещал «максимальную точность даже на луне».

21 апреля OpenAI выпустила gpt-image-2 - и это не просто новая версия генератора картинок. Модель поддерживает разрешения до 4K, значительно улучшенный рендеринг текста на десятках языков, Thinking Mode с reasoning и веб-поиском, а также мультишаговое редактирование.
Я разобрала, что реально изменилось и сравнила с Nano Banana 2 и Nano Banana Pro от Google - с ценами, скоростью и честным взглядом на то, где каждая модель выигрывает.

Мир нейросетей не стоит на месте и движется вперед достаточно быстро. В последнее время я плотно сосредоточился на платформах, инструментах и сервисах, так или иначе завязанных на генерации текста. Сегодня же мне попалась новость о том, что вышла очередная модель для создания фотографий. Размышления на эту тему привели меня к идее создать подборку различных платформ и нейросетей для генерации изображений.
В топ войдут как бесплатные варианты, так и платные. Однако пробный период или бесплатный тариф будет присутствовать везде. Присаживайтесь поудобнее, ну а я начинаю свое повествование.

В мире строительства и дизайна интерьеров работу по подбору мебели из каталога, имея на руках чертеж, до сих пор делают вручную: специалисты часами листают каталоги, сверяют размеры и характеристики. Эта рутина отнимает десятки человеко-часов на каждый проект.
Мы нашли, как автоматизировать подбор мебели по архитектурным чертежам. В этой статье мы рассказали, как построили AI-систему с несколькими моделями и Gemini во главе, а также семантическим поиском по каталогу. Расскажем, как нам удалось достичь точности рекомендаций в 87%.

Обратил внимание на радужку глаза человека как на неповторимую биометрическую характеристику сродни отпечатку пальца Фрэнсис Гальтон. В 1888 году в своей статье в журнале «Nature» «Personal identification and description («Идентификация личности и ее характеристики») он писал, что тело человека можно порезать на микротоме на 800 миллионов слоев толщиной в одну десятитысячную дюйма, и на каждом их них мы под микроскопом увидим неповторимую картинку. В случае же бороздок на коже подушечки пальца и в радужке глаза никого резать не надо, природа предоставляет нам уникальные узоры уже в готовом виде. При этом, добавляет он, «отметины на радужной оболочке глаза никогда не были должным образом изучены, разве что производителями глазных протезов, которые распознают тысячи их разновидностей. Эти отметины вполне заслуживают того, чтобы их сфотографировали с натуры в увеличенном масштабе».
Их фотографировали много раз и довольно быстро убедились, что узор радужки каждого человека действительно не менее уникален, чем отпечатки пальцев. В 1935 году криминолог Карлтон Саймон и главный врач отделения офтальмологии нью-йоркской больницы Маунт-Синай Исидор Гольдштейн опубликовали в «New York medical journal» статью под заголовком «Новый научный метод идентификации», где как раз утверждалось, что рисунок радужки глаза уникален и потому подходит для идентификации человека. В том же году они доложили об этом на ежегодном съезде полицейских начальников в Нью-Йорке. Разумеется, утверждать это Саймон и Гольштейн могли лишь с определенной степенью вероятности, больница Маунт-Синай хоть была самой большой в городе, но выборка проверенных на сходство радужки ее пациентов удовлетворяла только 95% порогу вероятности. Спустя ровно 20 лет другой окулист доктор Пол Тауэр показал, что рисунки радужки отличаются, причем сильно, у шести исследованных им пар гомозиготных (однояйцовых) близнецов, что произвело гораздо большее впечатление на криминалистов, чем доклад Гольдштейна и Саймона.

Большинство инструментов для замены лиц это Python-скрипты, склеенные из PyTorch, OpenCV и надежды. Они работают, но тащат за собой гигабайты зависимостей, требуют правильно настроенного CUDA и разваливаются в тот момент, когда ты пытаешься запустить их в реальном времени.
Мне стало интересно: можно ли собрать весь пайплайн на чистом Rust? Без Python. Без PyTorch. Без обёрток. Один бинарник, который скачал, распаковал и запустил.
Оказалось, можно. 60 fps на веб-камере.
Пайплайн
На каждом кадре последовательно отрабатывают четыре нейросети.
RetinaFace находит лица и извлекает пять ключевых точек. ArcFace вычисляет 512-мерный эмбеддинг исходного лица. InSwapper принимает регион целевого лица и эмбеддинг источника, на выходе отдаёт заменённое лицо. GFPGAN опционально улучшает результат для более высокого качества.
Все четыре модели работают через ONNX Runtime. Никаких кастомных CUDA-ядер, никакого оверхеда фреймворков. Тензор на вход, тензор на выход.
Архитектура потоков
Три потока, ноль блокировок на горячем пути.
Поток захвата получает кадры с веб-камеры через nokhwa и публикует их через ArcSwap. Поток пайплайна подхватывает новые кадры, прогоняет инференс и публикует обработанные кадры через второй ArcSwap. Поток UI читает актуальный буфер и рендерит через egui.
Никаких мьютексов на данных кадра. Никаких каналов. Никакого async. Только атомарные счётчики поколений и lock-free замена указателей.
Структуры разделяемого состояния занимают ровно по 64 байта каждая и выровнены по кэш-линиям, чтобы исключить false sharing между ядрами. Это проверяется compile-time ассертами.

Готовь сани летом, а план доставки ML-модели конечным пользователям — еще на этапе разработки. Иначе даже самая крутая обученная система будет пылиться без дела, а большинство пользователей о ней даже не узнает.
Запуск ML-моделей в production-среде — это тот еще квест:
• необходимо хранить и версионировать модели;
• нужен мониторинг ресурсопотребления, производительности и дрейфа данных в реальном времени;
• нужна поддержка разнородных сценариев — пакетная обработка или стриминг.
К счастью, есть специальные инструменты, которые существенно облегчают такую задачу. В этой статье рассмотрим сервинг модели Grounding DINO при помощи популярного фреймворка BentoML. Под катом вас ждет много кода, скриншоты и практические советы.

Мысленная визуализация задействует те же сенсорные нейронные коды, что и физическое зрительное восприятие. Это открытие дает ключ к пониманию механизмов воображения и открывает новые пути для архитектур искусственного интеллекта.
Способность человека мысленно визуализировать образы критически важна для извлечения воспоминаний, пространственного планирования и творческого синтеза. Несмотря на это, нейронные механизмы воображения остаются малоизученными. Предыдущие эксперименты с функциональной визуализацией (например, фМРТ) показывали, что воображение задействует те же области мозга, что и зрительное восприятие. Однако низкое разрешение этих методов не позволяло достоверно подтвердить, участвуют ли в обоих процессах одни и те же нейроны с идентичными характеристиками отклика. Для решения этой проблемы потребовалась регистрация активности отдельных нейронов человеческого мозга.
Эксперименты с внутричерепной записью активности одиночных нейронов показали, что мы повторно используем одни и те же сенсорные коды как при восприятии, так и при воображении. Вентральная височная кора (ВВК, ventral temporal cortex) использует распределенное осевое кодирование (axis code) для обработки визуальных образов. Часть этих нейронов реактивируется, когда человек представляет визуальные стимулы в уме, причем амплитуда их отклика пропорциональна той, что наблюдается при разглядывании реальных объектов.
Эти результаты подтверждают гипотезу о генеративной модели мозга: абстрактные репрезентации запускают внутренний сенсорный код, образуя явный физиологический механизм воображения.

Мы довели TAPe‑детекцию на COCO до уровня лучших SOTA‑моделей по точности, но с двумя порядками выигрыша по параметрам и радикально меньшими требованиями к данным и ресурсам. При этом модель держит 7–8 мс на изображение при mAP50 на уровне RF‑DETR‑2XL и работает почти одинаково быстро на GPU и CPU. В этом финальном посте нашего "дневника" мы подведем итоги эксперимента, покажем ключевые бенчмарки и объясним, почему TAPe‑подход позволяет реально экономить данные, железо и время разработки.
В итоговой детекционной модели у нас меньше 100 000 параметров — примерно в 10 раз меньше, чем у ближайших «облегчённых» моделей уровня YOLO, и примерно в 1000 раз меньше, чем у сильных DETR‑подходов вроде RF‑DETR с 127 млн параметров.

На каждой второй конференции по медицинскому AI звучит один и тот же сценарий: «Дообучим мультимодальную модель, скормим ей DICOM, и она сама выдаст диагноз». На практике, когда этот скрипт пытается попасть в реальную клинику, начинаются неожиданности. OOM на GPU, врачи не понимают, где галлюцинация модели, а где финальный отчёт, двухгигабайтные NIfTI-исследования рвут таймауты балансировщика.
Я какое-то время тоже думала, что главное — это модель. А потом пересмотрела собственный код. У меня уже есть MRI Second Opinion. Но это не нейросеть. Это контур с доменной моделью, конвейером приёма данных, циклом обработки, обязательным врачебным рецензированием, финализацией и отдельным репозиторием с открытым кодом. В медицинском IT модель — не главная проблема. Главная проблема — чтобы между входом и выходом ничего не потерялось и не сломалось.

История биометрии дерматоглифических узоров на подушечке пальца человека изучена до мелочей и опубликована сотни если не тысячи раз в кратких и подробных вариантах. Если опустить вавилонские и античные времена и историю дактилоскопии в восточных цивилизациях, то первым европейцем, обратившим на нее внимание в конце 1870-годов века, считается чиновник британской администрации в Индии сэр Уильям Гершель, а применил ее на практике в той же Индии генеральный инспектор бенгальской полиции Эдвард Генри, который составил первую классификацию узоров папиллярных линий и опубликовал ее в 1900 году (и в итоге тоже стал сэром и начальником отдела уголовных расследований Скотленд-Ярда). В классификации сэра Генри было четыре основных типа узоров – дуги (арки), петли, завитки и в дополнение к ним «композиты», то есть устойчивые композиции из этих трех «нот».
Это ключевые даты в таймлайне ранней истории дактилоскопии. Если же более детально рассматривать этот период дерматоглифической биометрии, то здесь наблюдаются загогулины почище, чем узоры складок кожи на подушечке пальца. В 1892 году Фрэнсис Гальтон опубликовал свою книгу «Finger Prints», где были те же четыре типа узоров (дуги, петли, завитки и композиты), что у сэра Генри. Ничего удивительного в этом нет, Гальтон и Генри переписывались между собой, и как раз книга Гальтона подтолкнула Генри заняться дактилоскопией. Но занявшись ею, он, будучи самым большим начальником бенгальской полиции, поручил всю черновую работу двоим своим подчиненным инспекторам-индийцам. Их звали Хан Бахадур Кази Азизул Хак и Рай Бахадур Хем Чандра Бос. Первый из них создал математический алгоритм сортировки отпечатков пальцев по их рисунку, второй усовершенствовал метод классификации отпечатков пальцев, предложенный их шефом. Теперь британские историки пишут, что тех двух индийцев наградили, произведя из инспекторов в суперинтенданты, а индийские историки пишут, как нагло их соотечественников «обокрали сэр Гальтон и сэр Генри».

Последние 2 года мы в Content AI активно тестируем Vision Language Models (VLM) для обработки документов. Модели вроде Qwen2.5-VL или Gemini 2.5 отлично работают с простыми формами — чеками, типовыми договорами. Но на документах со сложными фонами, многоуровневыми таблицами или нестандартной версткой VLM часто галлюцинирует, теряет строки и путается в реквизитах.
В одной из предыдущих статей мы пришли к выводу, что будущее за комбинированным подходом, когда VLM усиливает IDP-решения.
В этот раз мы проверили гипотезу: пусть VLM не распознает документ с нуля, а проверяет черновик из IDP-системы и исправляет ошибки, опираясь на исходное изображение. Базовым OCR движком выступила наша платформа ContentCapture.
Практическая цель эксперимента — автоматизировать верификацию документов. Сейчас в крупных компаниях сотни операторов вручную сверяют распознанные данные с оригиналами.

В этом посте продолжаем дневник TAPe‑детекции на COCO: добавляем сегментацию по контрастным патчам на границе объектов, дорабатываем классификацию, избавляемся от learning rate и смотрим, как ведёт себя YOLO на нашем маленьком датасете.
А уже завтра покажем базовые и COCO‑бенчмарки, сравнения с YOLO и RF‑DETR по точности (mAP50/mAP50‑95), скорости, числу параметров и требованиям к данным, а заодно чуть подробнее поговорим про аннотацию и то, почему нам хватает десятков изображений на класс там, где другим нужны сотни тысяч.

Вы когда-нибудь хотели нарисовать комикс, но упирались в то, что не умеете рисовать? Руки помнят только школьные каракули на полях тетради, а персонажи в голове так и остаются в голове.
Сейчас это перестало быть проблемой. Нейросети для генерации изображений стали полноценным рабочим инструментом. Они не заменят художника полностью, но помогут сделать законченный комикс за вечер вместо месяца. Да, с кривыми пальцами иногда, с ошибками в перспективе, но живой и ваш.
В этой статье я покажу пошагово:
- как выбрать нейросеть для комикса;
- как сделать так, чтобы персонаж не менял лицо в каждом кадре;
- как добавить облака с текстом и не сойти с ума;
- и, конечно, на какие кнопки нажимать.
Работать я буду в BotHub - это агрегатор нейросетей. Если вам надоело прыгать по сайтам, постоянно включать и выключать VPN, регистрироваться и разбираться, где какая кнопка, BotHub собирает Midjourney, DALL-E 3, Kandinsky и другие популярные модели в одном интерфейсе. Оплата по факту использования - сколько нагенерировал, столько и заплатил. К тому же сервис дарит 300 000 капсов всем новым пользователям по ссылке, можно затестить прямо сейчас!
Одна просьба перед стартом: не ждите от нейросети идеала с первой попытки. Это не голливудский ИИ.
Поехали, приятного прочтения!

В предыдущей статье я подробно рассказывал про свой "аниме завод" — пайплайн, который автоматически превращает эпизоды в готовые Shorts. Но внутри этой системы есть один особенно важный узел, который заслуживает отдельного разбора: виртуальная камера для автоматического кадрирования.
В этой статье я разберу не просто "функцию автокропа", а полноценный алгоритм виртуальной камеры для вертикального видео. Это тот случай, когда задача на первый взгляд кажется простой: есть горизонтальный ролик, нужно сделать 9:16, удержать человека в кадре и не превратить результат в дёрганый автофокус из начала 2010-х.
Но как только начинаешь делать это не для демо, а для реального пайплайна, сразу всплывают инженерные проблемы:
Каждый день в российском бизнесе происходят миллионы телефонных звонков. Колл-центры, клиники, юридические конторы, отделы продаж - везде, где есть телефон, есть поток неструктурированных данных, который никто не обрабатывает. Менеджер повесил трубку, записал в CRM “клиент интересовался” - и 80% информации из разговора потерялось.

Когда аугментации в детекции «не работают», проблема часто не в модели, а в bbox после преобразований.
Неверный coord_format, перепутанные нормализованные и абсолютные координаты, агрессивные кропы, пустые боксы после фильтрации — всё это не ломает код, но quietly ломает обучение.
В статье разбираю:
— какие форматы bbox поддерживает Albumentations — как правильно настраивать A.BboxParams — когда использовать min_area и min_visibility — почему обычный RandomCrop часто плохая идея для detection — и где пайплайн чаще всего ломается на практике
Если вы работаете с COCO, YOLO, pascal_voc или просто хотите перестать обучать модель на испорченной разметке — этот материал для вас.

Биометрия в наши дни применяется довольно широко. Но она прошла долгий путь. Для начала надо вспомнить, что изначально биометрия была вовсе не тем, что сейчас мы вкладываем в это понятие. Первым попытался ввести этот термин в научный оборот немецкоязычный швейцарский демограф из Базеля Кристоф Бернулли (из известного семейства математиков Бернулли) в 1841 году. В своем «Handbuch der Populationistik: oder der Völker‑ und Menschenkunde: nach statistischen Ergebnissen» («Справочнике по популяционистике, или по народоведению и человековедению: по статистическим результатам») он девять раз употребил словосочетание Populationiſtiſche Biometrie (биометрия народонаселения), объясняя, как следует применять методы математической статистики в демографии: в оценке среднего роста населения, убывания населения, средней продолжительности жизни в данной популяции (города, региона, страны) и так далее
Но этот его термин не прижился, как и другой его термин «Populationistik», вскоре замененный на «демографию». Удачливее оказался англичанин Фрэнсис Гальтон. Он тоже увлекался демографией, но рассматривал ее с точки зрения теории естественного отбора своего кузена Чарлза Дарвина и считал, что для населения цивилизованных стран далеко не лишним был бы еще и искусственный отбор, из‑под пресса которого Homo sapiens вышел, как только стал sapiens. Поэтому сейчас Гальтона помнят прежде всего как отца‑основателя науки евгеники, причем в самой нехорошей ее расовой разновидности.
Гораздо реже вспоминают, что Гальтон увлекался антропометрией и даже устроил для посетителей Международной выставки здравоохранения в Лондоне в 1884 году показательную антропометрическую лабораторию. Желающие за четверть часа проходили там процедуру обмеров своего тела, очень похожую на бертильонаж, который в том же 1884 году ввели как обязательную процедуру в парижской тюрьме Санте. В 1892 году Гальтон опубликовал книгу «Finger Prints» («Отпечатки пальцев»), где объяснил почему вероятность совпадения их у разных людей стремиться к нулю (сами расчеты вероятности этого он опубликовал в «Proceedings of the Royal Society» в 1891 г.).

Последние несколько лет я усиленно увлекаюсь любительской видеореставрацией: беру старые мультики, прогоняю их через большие пайплайны цифровой обработки, зачастую работаю с аудио и по итогу всё это собираю в MKV-контейнеры. От «Чипа и Дейла» эпохи старого Диснея до чистой цифры в виде «Врат Штейна».
Казалось бы: «Обложка да обложка, какая разница? Главное — видео и звук!» Но вы крупно недооцениваете мою любовь к перфекционизму.
Проблема была даже не в том, что обложек нет, а в том, что ими почти никто не занимается. Ни корпорации-издатели, ни даже базы от энтузиастов вроде TheTvDB зачастую почти не уделяют нормального внимания стародавним релизам, из-за чего лично у меня возникает странный контраст: на диске лежит моя отреставрированная классика в 4К, а медиа-сервер подтягивает размытый скриншот серии с VHS-кассеты начала 2000-х. А иногда та же практика применяется и к новым релизам 0_0 Ужас ведь.
В этой статье я хочу показать свой путь проб и ошибок — от примитивных «ИИ-фильтров» на «Чип и Дейле» и автоматических скриптов для «Розовой пантеры» до освоения цветокоррекции и ручной реставрации на куче обложек для «Тома и Джерри», а затем — до сложного и зачастую ещё более муторного симбиоза ИИ-генерации и ручной доводки при создании уникальных постеров для «Врат Штейна» и других сериалов.