Можно ли в Python создавать бинарные файлы? Конечно можно.
Для этого в Python есть следующие инструменты:
▫️ тип данных bytes и bytearray
▫️ открытие файла в режиме wb (write binary) или rb (read binary)
▫️ модуль struct
Про модуль struct поговорим в первую очередь.
Файл в формате JSON или Yaml внутри себя содержит разметку данных. Всегда можно определить где список начался а где закончился. Где записана строка а где словарь. То есть формат записи данных содержит в себе элементы разметки данных.
В binary-файле данные не имеют визуальной разметки. Это просто байты, записанные один за другим. Правила записи и чтения находятся вне файла.
Модуль struct как раз и помогает с организацией данных в таком файле с помощью определения форматов записи для разных частей файла.
Модуль struct преобразует Python-объекты в массив байт, готовый к записи в файл и имеющий определённый вид.
Для этого всегда следует указывать формат преобразования (или, как оно здесь называется - запаковки).
Формат нужен для того, чтобы выделить достаточное количество байт для записи конкретного типа объекта. В последствии с помощью того же формата будет производиться чтение.
При этом следует помнить что мы говорим о типах языка С а не Python.
Именно формат определяет, что записано в конкретном месте файла, число, строка или что-то еще.
Вот какие токены формата у нас есть.
Помимо этого, первым символом можно указать порядок байтов. На разных системах одни и те же типы данных могут записываться по-разному, поэтому желательно указать конкретный способ из доступных. Если этого не сделать, то используется символ '@', то есть нативный для текущей системы.
В строке формата мы пишем в каком порядке и какие типы собираемся преобразовать в байты.
Запакуем в байты простое число, токен "i".
>>> import struct
>>> struct.pack('=i', 10)
b'\n\x00\x00\x00'
Теперь несколько float, при этом нужно передавать элементы не массивом а последовательностью аргументов.
>>> struct.pack('=fff', 1.0, 2.5, 4.1)
b'\x00\x00\x80?\x00\x00 @33\x83@'
Вместо нескольких токенов можно просто указать нужное количество элементов перед одним токеном, результат будет тот же.
>>> struct.pack('=3f', 1.0, 2.5, 4.1)
b'\x00\x00\x80?\x00\x00 @33\x83@'
Теперь запакуем разные типы
>>> data = struct.pack('=fiQ', 1.0, 4, 100500)
я запаковал типы float, int и unsigned long long (очень большой int, на 8 байт)
b'\x00\x00\x80?\x04\x00\x00...'
Распаковка происходит аналогично, но нужно указать тот же формат, который использовался при запаковке. Результат возвращается всегда в виде кортежа.
>>> struct.unpack('=fiQ', data)
(1.0, 4, 100500)
Как видите, ничего страшного!
#lib#basic
Midjourney + SD Video
Делимся подробным пайплайном, который позволит вам создать красивую анимацию в три несложных шага 🪄
🟣 Заполните этот базовый промпт описанием любого персонажа
Photo of [character description with one element in color], shot with an analog camera, motion blur, grainy, low resolution, high contrast, soft light, black & white film photography, in the style of Hasselblad H6D400C MultiShot
🟣Сгенерируйте картинку: лучше всего этот промпт работает с Midjourney
🟣Анимируйте с помощью SD Video наилучший результат при работе с этим промптом вы получите при выборе Motion bucket ID ~70
🙊В комментариях прикрепили скриншоты всех шагов и настроек, чтобы вы могли с точностью повторить этот пайплайн!
#pipeline
Переносим стиль на любую картинку за 5 простых шагов 🪄
1️⃣ Загружаем на воркспейс изображение, которое хотим изменить
2️⃣ Добавляем второе изображение как референс стиля
3️⃣ Подключаем наше исходное изображение как Start Image к ноде IP-Adapter XL, а референс стиля – к Style (IP Image)
4️⃣Включаем в настройках ControlNet и выбираем режим Canny или Depth
5️⃣Запускаем ноду и получаем магию за 2 минуты
Попробуйте поэкспериментировать и повыбирать разные Models, подобавлять в промпт релевантные слова, чтобы получить наилучшее воплощение вашей идеи✨
Больше примеров и пайплайн – в нашем темплейте Transfer Style
P.S. также сегодня напоминаем о докладе в 16 по мск
#pipeline
Deepfake генерирующие 1340$ / час
Пример как в Китае Generative AI и виртуальные инфлюенсеры уже сегодня генерируют колоссальную выручку
1. Съемка видео человека
2. Обучение модели на изображениях другого
3. Deepfake на видео для преобразования
4. Написание продающих скриптов за счет GPT-моделей
5. LipSync
6. HeyGen
Профит
#pipeline
Прототип внутриигрового значка с помощью AI
Представьте, что вы делаете игру про зоопарк, в которой хотите сделать достижение с иконкой или медалькой тигра. Вам нужно сделать этот ассет без привязки к определенной стилистике, нужна детализация и несколько вариантов этой медальки по уровням (например, золотой, серебряный, бронзовый). Создавайте его вместе с ИИ!
1. Создайте прототип в SD XL (в нашем примере, a badge of a zoo)
2. Подключите получившееся изображение к ControlNet XL, скопируйте ваш промпт и перед ним поставьте gold, silver или bronze
Ваши вариации готовы :) Вы всегда можете их дальше доработать в нашем продукте, убрать фон или улучшить качество детализации
#pipeline
Пайплайн создания простой анимации смены дня и ночи: SD + Day2Night + Morph
В примере на основе SD было сгенерировано изображение, с помощью Day2Night сгенерированы предрассветные/ночные состояния и с помощью Morph сделана простая анимация
Ждем вашу красоту в P+)
#pipeline
3D Crowd Generation
Для создания толпы в 3D можно использовать уже сегодня AI, и конкретно все из этого кейса для подготовки ассетов в Blender можно сделать в Phygital+
В ролях
- SD
- ControlNet
- ICON (или более старый PiFu HD)
- Blender
#pipeline
http://pybit.es/codechallenge11.html
Inspired by David Beazley's #Generator Tricks for Systems Programmers we ask you to turn the following unix #pipeline into Python code using generators. To get a bunch of .py files you can use our challenges repo you cloned. Or use a project of your own.
Note that in our experience one subprocess is not necessarily one generator, for example 'sort|uniq|sort' can be easily combined into one, as well as 'grep|sed'. See our template if you need guidance.
🌿LoRA: обучение на персоне с Phygital+
Продолжаем делиться советами по обучению LoRA.
🔹Обучение на лице
Для качественного результата нужно 15-30 фото с крупным планом лица (1/3-1/2 кадра). Будут получаться аватары и портреты.
Требования:
- Высокое разрешение: минимум 1024px по малой стороне.
- Хорошее освещение, без резких теней.
- Разнообразные эмоции (без перебора и гримас), углы съёмки и фоны.
- Избегайте селфи, широкоугольных объективов, фотофильтров и яркого макияжа.
- Лицо должно быть чётко видно, без посторонних объектов в кадре; если вы в очках – то нужно быть в одинаковых очках на всех кадрах.
- Разный угол камеры (но без сложных ракурсов).
🔹Обучение на лице и фигуре
Здесь нужен датасет как для обучения только на лице, но с добавлением 10-20 фото в средний и полный рост.
Требования:
- Фото в полный рост и по пояс.
- Разные позы и одежда, но без логотипов и текста.
- Разнообразные фоны, но без текста.
- Без лишних людей в кадре.
❤️Попробуйте сами этот пайплайн и делитесь в комментах, что у вас вышло :)
#pipeline#tips
📈LoRA: обучение на стиле в Phygital+: основные шаги
1️⃣ Поиск стиля: Для эффективной генерации стиля используйте GPT для анализа и поиска уникальных художников и направлений. Это обеспечит высокую вариативность данных.
2️⃣ Сбор датасета: Важно собрать объемный и качественный датасет с изображениями не менее 1024px по малой стороне. Репрезентативные данные — ключ к успешной модели.
3️⃣ Обучение: Используйте LoRA Train с параметрами Default или RealVis для оптимального обучения модели на вашем наборе данных.
4️⃣ Генерация: После обучения можно использовать текстовые промпты для генерации изображений или интегрировать модель через ControlNet и IP Adapter (Face ID) для кастомных задач.
📄 Попробуйте сами обучить модель по этому пайплайну и делитесь вашими результатами в комментариях.
Подробнее про обучение LoRA на стилях в записи вебинара.
#pipeline#tips
Бесшовные AI текстуры
Собрали для вас 3 юзкейса по созданию текстур в одной статье:
• Создание простых текстур для наложения в 3D
• Создание текстур в уникальной стилистике игры
• Создание новых текстур по UV-развертке
Читайте нашу статью с подробными пайплайнами на русском и на английском➡️
#pipeline#tips
Outpainting для SD генераций в один клик в Phygital+
Наведите на любую генерацию в SD 1.5 и нажмите Zoom out, чтобы получить продолжение вашего концепта. Не забудьте заапскейлить ваш финальный результат и повысить детализацию
#tips#pipeline
Внутриигровые объекты с ИИ
Хотите сделать прототип объекта в нескольких вариантах? Например, для вашей RPG игры нужно отрисовать 4 разных вида зелий — для восстановления здоровья, маны, лечения отравления и лечения болезней? Измените цвет жидкости внутри бутылочек через простую связку SD + ControlNet
Ели вам привычнее работать с SD 1.5, то сгенерируйте ассет в SD 1.5 ноде (рекомендуем стиль Assets 3D, и добавьте в промпт "game asset 3d, octane render"), наведите на вашу генерацию в ноде и нажмите Recolor :)
А для более высокого качества рекомендуем использовать SD XL, подробные настройки в комментариях 👀
Готовые изображения можно использовать в UI в инвентаре предметов, например, или как референс для создания 3D моделей
#tips#pipeline