Обновить
60.99

Обработка изображений *

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

Сначала показывать
Порог рейтинга

Команда Datalab выпустила бесплатную OCR модель Chandra, которая превращает любые PDF и картинки в обычные текстовые документы. Просто закидываем файл и получаем вывод в формате HTML, Markdown и JSON. Легко вытаскивает таблицы, формулы и диаграммы. Понимает 40+ языков. Можно пользоваться в браузере или поставить локально. Ставим локально с GitHub или пользуемся онлайн — здесь.

Теги:
+12
Комментарии2

Инструмент Depixelization PoC вытаскивает текст из скриншотов и фото, убирает пиксельный хаос и делает буквы читаемыми. Починит даже самые безнадёжные блоки текста. Использует метод De Bruijn sequence для точного восстановления букв. Подходит для документов, конспектов, рефератов и всего учебного.

Теги:
+9
Комментарии0

Представлен ресурс Uchinoko, который восстанавливает справедливость между пушистыми питомцами и людьми. Можно детально воссоздать своего кота/собакена в цифровом формате. Результат выгружается в SNS-иконку.

Теги:
0
Комментарии0

В Кремниевой долине наступила эпоха трудоголизма, и в стартаперских кругах всё больше говорят про рабочую культуру 996. Остаётся открытым вопрос, что это — просто интересная тема для светской беседы или реальность длиной 72 часа в неделю. Тем не менее общий настрой — отсутствие отдыха и максимальная продолжительность рабочего дня.

Подобные веяния точно отразил Лоран Дель Рей, новый сотрудник Superintelligence Labs компании Meta¹. Продакт-дизайнер запустил простенькое приложение-фоторедактор Endless Summer, где пользователь делает селфи, а затем генеративная модель встраивает человека в различные отпускные контексты. Пользователь получает фотки, где он гуляет по курорту или осматривает виды европейских городов с балкона.

Конкретная модель внутри Endless Summer не указывается. В политике приватности написано лишь, что запросы идут в API сервиса Replicate, то есть это может быть что угодно — от распространённых диффузионок уровня Stable Diffusion с LoRA-надстройками до более новых пайплайнов вроде FLUX или Playground. Однако издание TechCrunch с уверенностью пишет, что это Nano-Banana компании Google.

Насколько необычно и грустно то, что люди вместо настоящего отпуска генерируют фальшивые фотки с него? На самом деле ничего уникального в этом нет.

Как пишет индонезийский стартапер Тим Виджая, для многих ИИ становится именно такой отдушиной. Тим рассказал, что в этом году он в роли консультанта помогал OpenAI проводить исследование, как индонезийцы используют ChatGPT. Там обнаружилось ровно такое же явление.

В рамках анализа Виджая была обнаружена целая группа на Facebook² на 30 тысяч участников, где индонезийцы выкладывали сгенерированные ИИ фотографии с собственным участием, при этом значительно повышая уровень своего достатка. На картинках пользователи окружали себя атрибутами роскошной жизни: суперкары Lamborghini, жизнь в Париже, шопинг в магазине Guccci и так далее. При этом подобным эскапизмом занимались в основном люди среднего или низкого достатка из глубинки Индонезии, их заработок не превышал $400 в месяц.

Дель Рей со своим Endless Summer довёл это явление до логического завершения. В приложении есть даже опция Room Service (обслуживание в номер), которая будет присылать две отпускные фотки каждое утро.

Владеющая социальной сетью Facebook (2) транснациональная холдинговая компания Meta (1) — экстремистcкая организация, деятельность обеих запрещена.

Теги:
+8
Комментарии2

ImageSorcery 06 - MVP

Это серия постов от идеи ImageSorcery до 100+ звёзд на гитхабе и ~100 ежедневных установок с PyPi.

ImageSorcery 01 - Как я свой open source вайбкодил
ImageSorcery 02 - Превращение ImageWizard в ImageSorcery
ImageSorcery 03 - шаг за шагом: PoC, Initial commit
ImageSorcery 04 - README.MD
ImageSorcery 05 - автотесты; просто покажи ему пример

По результатам предыдущих приседаний с ИИ у нас на руках прототипы detect, crop и get_metainfo - функций на python, которые понадобятся ИИ агенту чтобы выполнить задачу вроде “вырежи здание на этом фото”. Также у нас уже есть git репозиторий с работающим MCP сервером подключенным в Cline. С полным покрытием одного единственного tool hello_world тестами формата e2e на pytest. И линтер rufus.

Приступаю к тулзам. По одной за шаг. С покрытием тестами и актуализацией README. От самой простой get_metainfo к самой сложной detect. Благо есть работающие реализации от PoC, которые нужны были как пример и подстраховка.

“Изучи @README.MD и следуй правилам работы с кодом от туда. Прочитай код hello_world tool и тесты на него. Прочитай код прототипа get_metainfo/crop/detect. Реализуй соответствующий tool. Напиши тесты. Актуализируй README. Не завершай задачу пока все тесты не пройдут, а также линтер.

С реализацией проблем конечно уже не было, вот с тестами detect снова пришлось повозиться. Лентяй Gemini flash решил, что если detect tool запускается и возвращает хоть что-то - этого уже достаточно. Пришлось гонять его и в хвост и в гриву чтобы были написаны позитивные и негативные сценарии и прочие едж кейсы.

Каждый отдельный тул разумеется коммитил.

Где-то в процессе обнаружил что тесты на объявление tool могут быть также достаточно подробными. И самое главное - результаты crop (сохранение файла) оказывается есть в /tmp/pytest/.  Это означало что я могу проверять тесты, которые работают с изображениями, а не слепо доверять их коду и статусу passed. Это меня в будущем много раз выручит. Например, когда при реализации blur для теста генерировался полностью черный квадрат и после выполнения blur контрольный пиксель проверялся на соответствие цвета заблюренному черному - черному 🤦. С точки зрения алгоритма всё идеально - не прикопаешься 😅 А я глядя на два одинаковых черных квадрата ржал в голосину. Пришлось заставить его тестировать на шахматке.

blur области поверх шахматки
blur области поверх шахматки

Шаг выполнен ✅

Теперь у меня был MCP сервер, который позволял подключенному к нему MCP клиенту вроде Cline выполнить заветное “вырежи с этого фото собаку”. Был ведь? ...

В дев сборке всё работало. Но если я хотел публиковать это как MVP, мне нужно было убедиться, что те, кто найдут его на просторах гитхаба, смогут им воспользоваться. В будущем мне понадобится опубликовать пакет на pypi, но на данном этапе нужно было убедиться что хотя бы через клонирование репозитория всё заведётся.

Я удалил MCP из Cline, склонировал репу в новую директорию и попросил Cline доустановить, подключить и проверить. 

🫠 Разумеется ничего не заработало в этом моем стейдже.

Оказывается модели Ultralytics не качаются по неведомой мне причине, когда MCP запущен как процесс(?). Пока я писал прототипы, и запускал detect как отдельный python скрипт, а не как модуль в составе сервера, все нужные мне модели скачались и могли переиспользоваться в последующем. А чистая установка доступа к ним не имела и всё падало.

Такую нетривиальную проблему конечно же не смогли решить никакие ИИ, но день плотного дебага и глубоких обсуждений с Gemini и параллельно Claude (на всякий случай. По факту ничего такого, чего не знал Gemini он не сказал) привёл меня к реализации –post-installation режима и архитектурному решению с выделением отдельно от tools директории scripts, куда попали скрипты установки и скачивания моделей.

Теперь ImageSorcery была готова к публикации как MVP!

P.S. если кто-то знает как обойти проблему со скачиванием моделей в рантайме - дайте знать. Я бы очень хотел найти альтернативные решения.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Упрашивал ChatGPT нарисовать мне картинку с человеком. Ни в какую! Отказывается!

Сегодня с помощью ChatGPT генерировал картинку к Норм ЦРМ.

Я добавил мета-теги, заголовки на двух языках. Ну и картинку, которая будет подтягиваться, когда кто-то будет делиться ссылкой на проект.

Попросил нарисовать фрилансера-одиночку за уютным домашним рабочим местом. И тут — хопа — отказ. Мол, это не соответствует нашим политикам.

Тогда попросил нарисовать человека, лица которого мы не видим. Просто фигуру. Снова отказ.

Затем попросил нарисовать антропоморфного кота. И тоже нельзя.

Я удивился. Раньше никаких подобных ограничений не было. В итоге попросил сгенерировать картинку без людей, а сам пошёл разбираться, какая нейронка мне теперь подойдёт для этих целей вместо ChatGPT.

Если что, использую пятую версию с подпиской Plus.

——
Апдейт:

В комментариях пишут, что никаких ограничений нет.

Я попробовал сгенерировать в новом диалоге — и тоже ограничений не оказалось.

А вот внутри папки с проектом — не разрешает по какой-то причине.

Буду разбираться дальше.

Теги:
Всего голосов 3: ↑2 и ↓1+2
Комментарии4

RFC 9828: стандарт, который, странным образом, опоздал лет на двадцать

JPEG 2000, появившийся ещё в начале нулевых, давно используется в задачах, где требуется высокое качество изображения, а RTP как транспорт для данных реального времени уже более двадцати лет обеспечивает надёжность. Однако, и это удивительно, всё это время отсутствовал формализованный стандарт, позволяющий передавать JPEG 2000 с минимальной задержкой, по кускам кадра, не дожидаясь его полной готовности, — и лишь в 2025 году он был наконец принят. Можно только гадать, почему в мире, где запускают ракеты в космос по подписке, инженеры продолжали смиренно ждать, пока кадр целиком упадёт в буфер.

Теперь же, с появлением RFC 9828, ситуация меняется: простое на первый взгляд решение — передавать кадр частями, а не целиком, — становится официальной нормой. Как только кодер начинает производить данные, пакеты уже могут быть отправлены в сеть, а приёмник, не дожидаясь окончания всего кадра, начинает сборку изображения. И именно это означает, что впервые JPEG 2000 становится пригодным для таких сценариев, где маркетинговый термин «low latency» оборачивается критическим требованием: телевещание в прямом эфире, дистанционная хирургия или работа со сверхкачественным изображением в реальном времени.

Вместо прежнего порядка «сначала кадр, затем поток» появляется обратный — «сначала поток, затем кадр». Благодаря этому сеть получает ту самую гибкость, о которой раньше говорили как о недостижимой: лишние уровни разрешения и качества можно отбрасывать на лету, даже не вскрывая содержимое. Приёмник, в свою очередь, обретает resync-точки, благодаря которым потеря пары пакетов больше не превращается в катастрофу, а разработчики, наконец, могут избавиться от бесконечных костылей, изобретённых в обход RFC 5371.

Выгоды для бизнеса очевидны, хотя каждый сектор формулирует их по-своему. В телевидении по IP режиссёр теперь видит кадр практически сразу, а не спустя полсекунды, и значит — работа в реальном времени перестаёт быть фикцией. В медицине появляется возможность стримить эндоскопию или МРТ с качеством вплоть до lossless и при этом не терять драгоценные секунды, от которых зависит исход операции. Кинопроизводство перестаёт таскать гигабайты по дискам, потому что мастер-кадры наконец-то могут пересылаться по сети. Даже государственные сервисы, включая суды и видеоконференции, приобретают шанс выглядеть не как мем из 2008 года, а как инструмент XXI века.

Да, пока это лишь бумага. Но, как обычно бывает: сначала RFC, затем — первые SDK и FPGA-решения, а чуть позже — перепакованные в отраслевые документы SMPTE и ITU стандарты. В горизонте двух-трёх лет мы увидим первые реальные внедрения в телевидении и медицине, в горизонте пяти — широкое распространение. А дальше, возможно, даже lossless-видеозвонки без лагов перестанут казаться фантастикой.

RFC 9828 — это не просто ещё один формат. Это признание индустрии в том, что ждать конца кадра всё это время было, мягко говоря, глупо.

Ссылки, как обычно, в моём канале

——————
Менеджер? Давай сюда!
Ищи работу здесь
Технологии и архитектура

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии2

ImageSorcery 01 - Как я свой open source вайбкодил
ImageSorcery 02 - Превращение ImageWizard в ImageSorcery
ImageSorcery 03 - шаг за шагом: PoC, Initial commit

Это серия постов от идеи ImageSorcery до 100+ звёзд на гитхабе и 100+ ежедневных установок с PyPI.

В прошлый серии мы с Gemini 2.0 flash определили стек: python, OpenCV, Ultralytics и никакого ImageMagic. 

Начал я как обычно с малого. В Cline попросил своего любимого бесплатного друга Gemini накидать скрипт на python который получает данные о размере (ширина, высота в пикселях) изображения. Дальше больше - скрипт crop который обрезает изображение по указанным аргументам. С последним пришлось повозиться и даже переключиться на Pro версию, благо она тоже бесплатная, пусть и с жёсткими лимитами.

😎 one shot изи катка: detect_objects находит координаты объектов, а crop_objects их вырезает
😎 one shot изи катка: detect_objects находит координаты объектов, а crop_objects их вырезает

PoC готов, можно приступать к реализации MVP.

Как вы помните, в python я тот ещё джун. Так что я не стал рисковать своим любимым бесплатным Gemini flash и даже pro, а сразу переключился в бесплатный браузерный Claude (лучший ии-кодер что тогда, что сейчас) и попросил дать мне подробнейшую инструкцию по разворачиванию проекта который будет имплементировать простейший hello world MCP сервер.

Нет смысла ваншотить такой проект за раз даже с Claude Opus 4.1. Что он не вывезет, что я не осилю осознать все нюансы за один заход. По этому предпочитаю действовать по комплиментарным шагам, на каждом из которых получать работающий продукт с небольшими изменениями, пока не получу финальный результат.

Написание инструкции - задача с нечётким ТЗ. Такую никогда нельзя пытаться делать ваншотом. Поэтому сперва получаю первую версию по максимально абстрактному промпту, но дав ей столько контекста сколько смог насобирать в интернете и своей голове. А затем по шагам вычитываю - прошу внести исправления - снова вычитываю - снова прошу исправить и так по кругу пока не получаю результат который я понимаю и к которому у меня нет претензий.

И так инструкция готова, закидываю её в Cline + Gemini flash и ... получаю ошибку активации. Вы же помните что в python я джун и понятия о venv не имею? Даю ему шанс исправить ошибку самостоятельно, но бесполезно - он не справляется. Откатываю всё назад, переключаю модель на Gemini Pro - результат тот же. Плюю на экономию, переключаю модель на Claude Sonnet - результат тот же, но оно сожрало 3 бакса 🤬

Плюю на этих бестолковых ИИ и беру дело в свои руки. Рано железякам нас ещё заменять!

Пол дня бесполезного рыскания по stack overflow и дебага, во время которого я случайно обнаружил, что venv активируется если git bash terminal открыт в отдельном окне, а не внутри VSCode. Оказывается эта шарманка будучи запущенной внутри IDE в пути C:\Users\titulus\work сочетание \t воспринимает как знак табуляции из-за чего пытается активировать venv в C:\Users    itulus\work 😵‍💫

Очевидного решения или даже упоминания этого бага я не обнаружил, так что просто уехал со всем своим проектом в WSL, благо VSCode отлично с ним работает. В Linux окружении, разумеется, таких проблем не возникло. Cline Gemini flash ваншотом по той самой инструкции от Claude создал MCP сервер, самостоятельно к нему подключился (вот за это я его обожаю) и проверил.

Я завёл git репозиторий и закоммитил initial commit. Первый шаг сделан ✅

Теги:
Рейтинг0
Комментарии0

ImageSorcery 01 - Как я свой open source вайбкодил
ImageSorcery 02 - Превращение ImageWizard в ImageSorcery

Это серия постов от идеи ImageSorcery до 100+ звёзд на гитхабе и 100+ ежедневных установок с PyPI.

В прошлый раз мы выяснили, что при правильной настройке бесплатных инструментов, бесплатная LLM Gemini может оказаться не хуже Claude в написании документации. И закончили на вопросе, почему никто раньше не привязал MCP к ImageMagic?

А вот почему

Первым делом после звонка с Системным Аналитиком я дал Cline в своём VSCode право на запуск команд в терминале. Затем взял первый попавшийся скриншот мобильного приложения и попросил вырезать NavBar используя ImageMagic. Gemini flash вырезал какую-то случайную часть экрана.

crop "на глаз"
crop "на глаз"

Я переключился на Gemini pro - результат тот же. o3 от OpenAI и Sonnet от Anthropic также облажались.

Долго думал. Я знал что все эти модели мультимодальные и наверняка знают что такое NavBar. Тут явно что-то не сходилось. Я полез раскрывать свёрнутые секции их размышлений и обнаружил что: 

  1. Все они понимают, что изображено и “видят” NavBar. 

  2. Никто из них не способен вычислить точные координаты этого NavBar.

  3. Они даже размеров изображения не знают. 

Из-за чего все они действовали наугад.

Оказывается LLM не умеют определять точные координаты объектов, которые они видят, не говоря уже про их точную геометрию.

В этом и крылся ответ на вопрос “а чего раньше это никто не сделал?”. 

С этой дилеммой я пошёл к Gemini. Сокращённая переписка:

👤: какой аналог npmjs.com для питона?
🤖: PyPi

👤: у него сайт есть?
🤖: pypi.org

👤: порекомендуй мне 5 - 10 пакетов для распознавания изображений на python моя задача - определять координаты объектов для будущего crop
ИИ: Pillow, OpenCV, scikit-image, TensorFlow Object Detection API, Detectron2, YOLO, Tesseract OCR, SimpleCV, imutils. Рекомендации:
1) Начните с OpenCV или scikit-image.
2) Если вам нужна более высокая точность или нужно распознавать определенные типы объектов, рассмотрите TensorFlow Object Detection API, Detectron2 или YOLO.
3) Используйте Pillow для загрузки, сохранения и предварительной обработки изображений.
4) Используйте imutils для упрощения работы с OpenCV.
5) Если вам нужно распознавать текст, используйте Tesseract OCR.

👤: расскажи подробней про opencv imutils pytorch и yolo
🤖:
- OpenCV - это фундаментальная библиотека для компьютерного зрения, предоставляющая широкий спектр алгоритмов для обработки изображений и обнаружения объектов.
- imutils - это набор удобных функций, которые упрощают работу с OpenCV.
- PyTorch - это мощный фреймворк машинного обучения, который можно использовать для построения и обучения сложных моделей обнаружения объектов.
- YOLO - это семейство алгоритмов обнаружения объектов в реальном времени, известных своей скоростью и точностью.

👤: важный момент. я не хочу обучать модели сам. мне нужен готовый инструмент
🤖: Начните с OpenCV + YOLO от Ultralytics

Как можно заметить, я не силён в python от слова совсем 😅. Но я выбрал его, потому что осведомлён о его большой экосистеме инструментов ML в общем и компьютерного зрения в частности. 

И так стек найден. И с удивлением для меня, места для ImageMagic в нём не нашлось, ведь все необходимые инструменты для обработки уже есть в OpenCV.

А что стало с названием ImageWizard?

Тут всё банально. Я погуглил - это название уже занято приложением в сфере обработки изображений с ИИ 🤷. Пришлось найти незанятое. Но постарался оставить отсылку на ImageMagic

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

ImageSorcery 01 - Как я свой open source вайбкодил

Скажу честно, я хотел написать статью, для того чтобы рассказать о своём проекте ImageSorcery MCP. Но не хотелось писать рекламный BS о том какой он крутой. Хотелось сделать месседж более личным и искренним. Так статья превратилась в серию постов-заметок о всех тех граблях инструментах и практиках, которые мне удалось попробовать на пути от идеи до 100+ звёзд на гитхабе и ~100 ежедневных установок с pypi. А так как я фанатик экономии, весь стек в основном бесплатный (включая LLM) и часто не самый популярный.

Рост звёзд на гитхабе
Рост звёзд на гитхабе

В компании где я работаю, у меня сложилась репутация, как это принято сейчас говорить, ИИ-энтузиаста. Из-за чего ко мне однажды обратилась Системный Аналитик, которая только начала внедрять RooCode и столкнулась с какой-то проблемой полнейшего тупняка ИИ. Бесплатная веб версия Claude на раз два превращала Верхнеуровневые Бизнес Требования заказчика в детально проработанное Техническое Задание. Но копировать туда-сюда - не продуктивно, а ещё лимиты эти… Решилась она попробовать рекомендованный мною RooCode с Gemini flash. Установила впервые IDE VSCode, запустила и поставила плагин RooCode, подключила Gemini модель и попыталась скормить ему ту же задачу, но в ответ получила какой-то откровенный бред. Вместе мы выяснили, что для адекватной работы RooCode (а ещё его предшественника Cline и, скорее всего, последователя Kilo Code) требуется не просто запустить VSCode, но ещё и создать в нём проект с соответствующей директорий где-то в системе. А если ещё и все материалы сложить в эту директорию - их можно не копипастить и даже не драгндропать, а меньшонить через @ что намного удобней. (Даже мне стало плохо от обилия англицизмов в этом предложении, извините). Кроме того, выяснилось, что промпт содержал помимо текста ещё ссылку на Figma дизайн. А RooCode, несмотря на то что может используя браузер, какую-то осмысленную деятельность с этой ссылкой вести. При наличии у него Figma MCP справляется гораздо эффективнее.

И теперь бесплатный Gemini flash под капотом RooCode засиял во всей красе. Промпты стали проще и читаемей. И благодаря доступу ко всем необходимым файлам (ВБТ и шаблон) и инструментам, RooCode ваншотом не просто создал качественное ТЗ в формате markdown (привет markdown preview плагин), но ещё и наполнил его нужными скриншотами прямо в теле документа, чего Claude не мог. 

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

Фигня война! - сказал я, — наверняка есть MCP который это делает. 

Погуглив вместе минут 15 мы обнаружили, что такого нет. Но так как нарезка экранов на скриншоты - привычная для системного аналитика задача, она поблагодарила меня за получившийся результат и убежала на другой звонок. А я остался сидеть глядя в пустой монитор с непониманием, почему такая простая и очевидная задача ещё не решена.

Так появилась идея ImageWizard - взять ImageMagic и прикрутить к нему MCP протокол.

А почему сейчас проект и называется иначе и никакой связи с ImageMagic не имеет, расскажу в следующей серии.

Теги:
Всего голосов 3: ↑1 и ↓2+1
Комментарии0

AI-синхронизация губ: от Wav2Lip до коммерческих решений

Технологии автоматической синхронизации движений губ с аудио перешли от исследовательских проектов к готовым продуктам. Современные сервисы создают реалистичное видео за секунды, где персонаж произносит любой текст с сохранением деталей лица.

Ключевые прорывы

Wav2Lip (2020, IIT Hyderabad) стал первой моделью, работающей без предварительного обучения на конкретном человеке. Исследование показало возможность генерации синхронизированного видео на основе GAN-архитектуры с дискриминатором, обученным отличать реальные движения губ от синтетических.

FaceFormer от Microsoft Research (2022) применил трансформерную архитектуру. Модель использует 6-слойный Transformer для обработки MFCC-признаков аудио и генерирует 768 3D-точек лицевых landmarks с учетом временных зависимостей.

Коммерческие решения

Lipsync 2.0 от Sync Labs работает как zero-shot модель без настройки. Поддерживает обработку видео с несколькими говорящими в кадре.

D-ID Creative Reality Studio генерирует говорящие аватары из статичных фото, ограничен 5-минутными роликами в базовой версии.

Synthesia ориентирована на корпоративный сегмент с готовыми AI-аватарами. Стоимость от $30/месяц за 10 минут видео.

Технические характеристики

Производительность:

  • CPU Intel i7: 1 секунда видео за 30-45 секунд обработки

  • GPU RTX 3060: соотношение 1:3

  • GPU RTX 4090: близко к real-time (1:1.2)

Метрики качества:

  • LSE-D (точность синхронизации): лучшие модели <8.0

  • SSIM (сохранение деталей): целевое значение >0.85

  • FID (реалистичность): оценка качества генерации

Практические применения

Стриминговые платформы: Netflix автоматизирует дубляж сериалов, сокращая локализацию с 3-6 месяцев до 2-3 недель.

Образование: Coursera тестирует многоязычные версии курсов с автоматической синхронизацией губ преподавателей.

Соцсети: TikTok экспериментирует с автопереводом популярных роликов, YouTube Creator Studio планирует функцию автодубляжа к 2026 году.

Ограничения

Качество исходного материала: требует четкого видео минимум 256×256px с углом поворота головы ±30° от фронтального.

Языковые особенности: модели обучены на английском. Для агглютинативных языков (финский, турецкий) точность падает на 15-20%.

Детекция артефактов: современные детекторы находят AI-генерацию с точностью до 95% (FakeSpotter — 94.2%, Microsoft Video Authenticator — 91.8%).

Открытые инструменты

  • Wav2Lip GitHub — базовая модель с предобученными весами

  • FaceFormer — трансформерная архитектура

  • Google Colab notebooks для экспериментов без установки зависимостей

Следующее поколение моделей будет работать в реальном времени для видеозвонков и включать генерацию жестов, синхронизированных с речью.

Теги:
Всего голосов 2: ↑1 и ↓1+2
Комментарии0

Представлен сервис Kira.art, который позволяет редактировать картинки прямо в чате. Все просто: грузим картинку и описываем, что хотим получить. Никаких кистей, слоёв и прочих инструментов. Можно поменять оттенок глаз на фото, добавить или удалить фон и другие предметы, создать арт или стилизовать пикчу, например, в аниме. Внутри также есть встроенный апскейлер — бустануть качество фото можно в несколько раз. Никаких сложных промптов, диалог идёт на естественном языке.

Теги:
Всего голосов 3: ↑3 и ↓0+5
Комментарии1

Как мы синхронизировали съемку для возрожденного проекта DPED

Команда регионального научно-образовательного центра «Искусственный интеллект и анализ больших данных» при НГТУ им. Р. Е. Алексеева продолжает рассказывать о работе по возрождению и улучшению DPED (Deep Photo Enhancement Dataset). 

Мы решили задачи автоматизации, но столкнулись с еще одной проблемой: фото на планшете и камере снимались с некоторой задержкой относительно друг друга. Использование простых пауз (time.sleep) оказалось ненадежно и неэффективно. Тогда мы реализовали многопоточное решение:

  • Первый поток управляет съемкой с камеры с помощью библиотеки pyautogui.

  • Второй поток управляет съемкой с планшета через ADB.

  • Оба потока обмениваются информацией через очередь (queue.Queue() из стандартной библиотеки Python) — это потокобезопасная структура данных, которая позволяет одному потоку передать сигнал другому. В нашем случае очередь используется для передачи сигнала о начале съемки с камеры. Получив этот сигнал, планшет почти без задержки запускает захват изображения.

В процессе тестирования среднее время задержки составило 50 мс, но разброс данных достигал 93 мс. То есть, существуют случаи, когда мы получаем изображения с непозволительной задержкой в 100 мс и более. Мы отметили этот момент, но продолжили собирать датасет, а изображения с большой задержкой — удалять.

Скрипт автоматизации съемки кадров:

import subprocess
from threading import Thread
import pyautogui
import time
from queue import Queue

# координаты для кликов мыши

CAMERA_SHUTTER_BUTTON = (329, 748)    # кнопка затвора в приложении

FOCUS_POINT = (1189, 204)            # точка фокуса или область кадра


def tablet(q):
    time.sleep(0.1)
    if q.get() == 1:
        p = subprocess.Popen(r'.\adb.exe shell', stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        p.stdin.write(b'input keyevent 27')
        p.stdin.close()

def camera(q):
    pyautogui.click(*CAMERA_SHUTTER_BUTTON)
    pyautogui.moveTo(*FOCUS_POINT)
    q.put(1)
    pyautogui.mouseDown()
    time.sleep(0.02)
    pyautogui.mouseUp()

q = Queue()
thread1 = Thread(target=camera, args=(q,))
thread2 = Thread(target=tablet, args=(q,))
thread1.start()
thread2.start()

В оригинальной работе DPED точные значения задержки не указывались: авторы фиксировали устройства на механическом стенде и выполняли съемку вручную, без программной синхронизации или последующего анализа временного лага между кадрами. Насколько нам удалось выяснить, синхронизация производилась «на глаз», что не позволяет оценить точность в миллисекундах. Таким образом, можно утверждать, что наша реализация обеспечивает более детерминированный и измеримый результат по синхронизации.

Читайте в статье, как команда регионального научно-образовательного центра «Искусственный интеллект и анализ больших данных» при НГТУ доводит снимки с планшета YADRO KVADRA_T до качества полупрофессиональной камеры Sony Alpha ILCE 6600.

Теги:
Всего голосов 3: ↑2 и ↓1+3
Комментарии0

Ближайшие события

Apple выпустила рекламу своей ИИ‑опции Clean Up по стиранию с фото разных объектов. В ролике показано, как можно удалить кота с фото. Изменения можно отменить, что и пришлось сделать герою видео, который решил «стереть» кота со снимка с супругой.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии3

Как улучшить режим ночной съемки с помощью нейросети на примере MEFNet

Смешивание экспозиций обычно применяют для улучшения изображений при дневной съемке, особенно в условиях яркого солнца. Но мы решили проверить: можно ли адаптировать этот способ для съемки в темноте? Он поможет осветлить изображение и заметно снизить уровень шумов.

MEFNet — это подход к слиянию изображений с разной экспозицией. Он создан для работы со статическими последовательностями кадров произвольного разрешения и в произвольном количестве. Название MEFNet происходит от термина Multi-Exposure Fusion, то есть «многоэкспозиционное смешивание». Отсюда и сокращение MEF.

Главная цель MEFNet — извлекать полезные детали как из темных, так и из пересвеченных областей, чтобы сформировать итоговое изображение с хорошим балансом яркости и контраста. При этом метод должен избегать артефактов, характерных для классических алгоритмов.

Схема работы алгоритма MEFNet. Источник: Ma, K., Duanmu, Z., Zhu, H., Fang, Y., & Wang, Z. (2019). Deep guided learning for fast multi-exposure image fusion. IEEE Transactions on Image Processing, 29, 2808-2819
Схема работы алгоритма MEFNet. Источник: Ma, K., Duanmu, Z., Zhu, H., Fang, Y., & Wang, Z. (2019). Deep guided learning for fast multi-exposure image fusion. IEEE Transactions on Image Processing, 29, 2808-2819

Схема работы алгоритма MEFNet. Источник: Ma, K., Duanmu, Z., Zhu, H., Fang, Y., & Wang, Z. (2019). Deep guided learning for fast multi-exposure image fusion. IEEE Transactions on Image Processing, 29, 2808-2819

Алгоритм MEFNet работает следующим образом. На вход подается серия изображений с разной экспозицией — они сначала переводятся в YUV-формат. Далее основная обработка выполняется только по Y-каналу, который отвечает за яркость. Дело в том, что именно яркостный компонент в наибольшей степени определяет структуру и детализацию сцены.

Затем нужно уменьшить разрешение всех изображений — так сокращаются вычислительные затраты. Полученные кадры поступают в нейросеть, которая генерирует весовые карты для каждого изображения, также в пониженном разрешении. Она обрабатывает серии произвольного пространственного размера и числа экспозиций, а также генерирует карты соответствующего размера и количества. Сеть состоит из семи сверточных слоев с расширенными свертками, которые увеличивают поле восприятия (receptive field) без потери разрешения: 

  • Слои 1–6 используют ядра размером 3×3 с разными коэффициентами расширения (dilation rates): 1, 2, 4, 8, 16, 1. Это позволяет захватывать контекст на разных масштабах.

  • Слой 7 — финальный слой с ядром 1×1, который преобразует фичи в весовые карты.

  • Нормализация — после каждого сверточного слоя (кроме последнего) применяется адаптивная нормализация (AN), сочетающая нормализацию по экземпляру (instance normalization) с обучаемыми параметрами.

  • Активация — используется Leaky ReLU (LReLU) для сохранения структурной информации.

Подробнее о MEFNet и других алгоритмах улучшения режима ночной съемки в мобильных устройствах на примере планшета KVADRA_T читайте в статье Полины Лукичевой из команды AI ML Kit в YADRO.

Теги:
Рейтинг0
Комментарии0

В системах видеонаблюдения и видеоаналитики часто приходится иметь дело с кадрами низкого качества. Объект съемки далеко, плохое освещение, ограниченные возможности камеры – и вместо четкой картинки мы получаем лишь набор пикселей. Знакомая ситуация?

"Что тут происходит? 😑"
"Что тут происходит? 😑"



Почему это большая проблема?

Распознать что-либо по такому "размытому квадратику" – серьезный вызов для алгоритмов. Стандартные модели, обученные на четких изображениях, часто теряют эффективность, когда объект занимает по высоте всего 32 пикселя (а то и 10!). Это напрямую влияет на точность работы систем в реальных условиях – будь то поиск автомобиля, предмета или распознавание лиц.

В чем сложность?

Главная трудность – "пропасть" между миром четких картинок (на которых обычно учатся модели) и миром размытых кадров. Алгоритмы плохо переносят знания из одного "мира" в другой.

Как с этим бороться?

В нашей новой (и первой) статье мы подробно разобрали ключевые подходы к решению такой проблемы в контексте распознавания лиц:

1. "Дорисовка" деталей: специальные нейросети пытаются увеличить и улучшить размытое изображение перед анализом. Работает, но есть риск "придумать" несуществующие детали.

2. Адаптация модели: как "подружить" алгоритм с плохим качеством?

  • Трюки с данными: искусственно ухудшаем хорошие изображения при обучении (сжатие, шум), чтобы модель привыкла к помехам.

  • Дообучение: учим модель на реальных размытых данных. Важно делать это аккуратно, чтобы она не забыла, как работать с четкими изображениями. Помогают методы вроде LoRA (дообучение только маленькой части сети).

  • "Учитель" для "ученика": мощная модель, видящая четкие картинки, учит компактную модель работать с размытыми, передавая свои "знания".

3. PETALface: новый подход, который динамически комбинирует разные "настройки" (LoRA-адаптеры) в модели в зависимости от качества конкретного входящего кадра. Перспективно, но требует дальнейшего изучения.

Хотите разобраться глубже?

В статье мы подробно разбираем плюсы и минусы каждого подхода, рассматриваем специализированные датасеты (TinyFace, BRIAR) и анализируем нюансы свежего метода PETALface.

Сталкивались ли вы с проблемой низкого разрешения в своих проектах? Какие методы оказались эффективными? Делитесь опытом в комментариях!

Теги:
Всего голосов 4: ↑3 и ↓1+4
Комментарии0

Осваиваем азы компьютерного зрения с библиотекой Pillow на одноплатном компьютере Lichee Pi 4A

Наш первый шаг — загрузить изображение, определить его цветовую модель и получить информацию о размере и границах.

from PIL import Image
from PIL import ImageFilter
img = Image.open(“flower.jpg”)
print(img.size, img.format, img.mode)

Эта базовая информация пригодится для дальнейшей работы с изображением.

Меняем цвет пикселя

К отдельным пикселям можно обращаться с помощью метода load() из библиотеки Pillow. Так мы сможем изменять цветовые значения точечно, а это основа для различных операций по обработке изображений.

Открываем white.jpg с помощью Pillow:

from PIL import Image
img = Image.open("white.jpg")
obj = img.load()

Выбираем пиксель с координатами (25, 45) и меняем его цвет:

obj[25, 45] = (0, 0, 0)  # Новый цвет: черный (RGB: 0, 0, 0)

Сохраняем отредактированное изображение:

img.save("image3.jpg")

Визуально проверяем, что цвет пикселя изменился. 

Метод load() позволяет напрямую работать с массивом пикселей изображения: читать, модифицировать и анализировать отдельные элементы, не копируя данные в отдельные структуры. Это особенно важно для задач, которые требуют высокую производительность при обработке больших изображений.

Почему был выбран Lichee Pi 4A, как создать виртуальное окружение Python, установить подходящую среду разработки и научиться базовым приемам работы с изображениями — читайте в подробном туториале.

Теги:
Всего голосов 6: ↑6 и ↓0+7
Комментарии1

Представлен сервис для удаления фона с необычным дизайном — ваша фотка буквально отправляется в стирку. Работает просто: закидываете картинку в машину, пару секунд наблюдаете за гипнотизирующим барабаном и забираете PNG-шку. Дизайнеры познают дзен — здесь.

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии1

Представлен проект сканирования в разрешении 108B (108 Gigapixel) одной из наиболее известных картин нидерландского художника Яна Вермеера — «Девушка с жемчужной серёжкой» (нидерл. Het meisje met de parel). На скане картины можо рассмотреть каждый небольшой мазок и саму мелкую трещинку.

Теги:
Всего голосов 6: ↑5 и ↓1+4
Комментарии0

Как автоматизировать распознавание текста с изображений?

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

Раньше в моём арсенале был только pytesseract (Python-библиотека для распознавания текста). Она работала, но с серьёзными ограничениями:
➖Плохо справлялась с разными шрифтами
➖Теряла точность на низкокачественных изображениях
➖Путала языки, если текст был мультиязычным

Сейчас появились LLM-модели, которые справляются с этой задачей гораздо лучше, но если у вас нет мощного железа, запустить их локально не получится.

В профильных каналах регулярно пишут: «Вышла модель Х, которая показывает отличные результаты. OSINT-еры больше не нужны!», но никто не дает гайдов, как с этими моделями работать. Сегодня я это исправлю.

Обзор моделей для OCR
Прошерстив не один десяток источников, я выделил две наиболее популярные на текущий момент модели:
1️⃣ GPT-4 mini — высокая точность, но платная.
2️⃣ Google Gemini 2.0 Flash — высокая точность + бесплатный лимит.

Выбор без раздумий пал на Gemini. На момент публикации бесплатные лимиты от Google следующие:
✔️ 15 запросов в минуту
✔️ 1 млн токенов в минуту (ввод + вывод)
✔️ 1 500 запросов в сутки

Как взаимодействовать с Gemini?
1️⃣ Получаем API-ключ в Google AI Studio
2️⃣ Через API отправляем изображение в base64 + промпт
3️⃣ Получаем распознанный текст в ответе

Но есть важный нюанс: сервис не работает с российскими IP

Что делать, если Gemini недоступна?
Если у вас по какой-то причине нет возможности получить доступ к серверам Google AI Studio, то можно воспользоваться сервисами, которые предоставляют доступ к различным open-source моделям. Например, DeepInfra.
Плюсы:
✔️ Нет блокировок по геолокации
✔️ Гибкая тарификация
Минусы:
✖️ Нет бесплатного тарифа

Примеры скриптов выложил на github (https://github.com/vmtest439/britalb_ocr)

Если вам понравился пост и вы хотите читать больше подобного контента, то можете подписаться на мой авторский Telegram-канал BritLab!

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии3

Вклад авторов