write: 05/02/2025 / modified: 04/09/2025
Автономная рамка для фотографий с искусственным интеллектом, работающая на базе Raspberry Pi Zero 2 и использующая цветной дисплей с жидкими чернилами. Она создает бесконечное количество уникальных рисунков.
Идея не моя, как и вся реализация. Я лишь немного модифицировал код под свой Eink экран. В оригинале автор использовал Inky Impression от PIMONORI £69.90 дороговато, да и в РФ такие не доставляют. Поэтому был найден вариант подешевле от WaveShare на алиэкспресс.
Оригинал был опубликован на реддите.
По дефолту рамка генерирует случайные цветочные картины со случайными стилями рисования, которые очень хорошо работают на цветных экранах на жидких чернилах 7.3", т.е. стили низкоцветной палитры и простые дизайны.
Каждая генерация нового изображения занимает около 30 минут, и около 30 секунд, чтобы обновить экран. Вы можете изменить список промтов и стилей изображений на что угодно в generate_picture.py
.
Материалы:
Увеличьте размер файла подкачки для компиляции, отредактируйте /etc/dphys-swapfile
и измените значение CONF_SWAPSIZE на 1024. Возможно, вам удастся обойтись меньшим размером подкачки, но сообщалось, что процесс сборки останавливается при размере подкачки 256.
Затем перезапустите swap с помощью
sudo /etc/init.d/dphys-swapfile restart
Включите SPI и I2C интерфейсы
sudo raspi-config
Загрузите репозиторий:
sudo apt install git
git clone https://github.com/dylski/PaperPiAI.git
Затем запустите установочный скрипт:
cd PaperPiAI
scripts/install.sh
Скрипт содержит все команды, необходимые для установки всех требуемых пакетов, библиотек Python и OnnxStream.
Stable Diffusion 1.5 состоит из трех моделей: текстового кодировщика (672 операций и 123млн параметров), модели UNET (2050 операций и 854млн параметров) и декодера VAE (276 операций и 49млн параметров).
Весь процесс занимает много времени, несколько часов. Если вы собираете модель на RPi 4 или 5, вы можете ускорить процесс, добавив флаги ---j4
или ---all
к строкам cmake --build . --config
в install.sh
.
Это позволит компилятору использовать четыре ядра или все ядра соответственно. Это ускорение не работает на RPi Zero 2, так как у него всего 512 МБ оперативной памяти.
Также обратите внимание, что будет загружено 8 ГБ параметров AI модели. В зависимости от уровня сигнала Wi-Fi и скорости передачи данных это также может занять много времени.
Вам нужно запустить generate_picture.py
с параметрами экрана и целевым каталогом для сохранения изображений. Разрешение дисплея составляет 800x480, поэтому для альбомной ориентации команда будет выглядеть так:
python src/generate_picture.py --width=800 --height=480 output_dir
Это создаёт новое изображение с уникальным названием на основе запроса и копию под названием «output.png», чтобы упростить его отображение. Обратите внимание, что если вы устанавливаете пакеты Python в виртуальную среду, то вам нужно использовать этот экземпляр Python, например:
venv/bin/python src/generate_picture.py --width=800 --height=480 /tmp
Для отправки сгенерированного изображения на дисплей используйте команду
venv/bin/python src/display_picture.py -r <image_name>
Чтобы сгенерировать портретные изображения для отображения в портретном режиме, измените значения ширины и высоты для generate_picture.py
и включите -p
в скрипт display_picture.py
.
Например:
venv/bin/python src/generate_picture.py --width=480 --height=800 output_dir
Чтобы автоматизировать этот процесс, создайте скрипт, который последовательно выполняет эти две команды, и добавьте в crontab запись, чтобы он запускался раз в день или чаще (с учетом времени генерации и отправки на дисплей). Обратите внимание, что электронные дисплеи чувствительны к температуре. Pi Zero будет нагреваться в течение длительного времени, что может привести к обесцвечиванию изображения на дисплее, которого можно избежать, отложив обновление дисплея после создания изображения.
В каталоге prompts хранятся файлы JSON, которые можно использовать для создания подсказок.
Файл подсказок — это просто массив фрагментов подсказок, из каждого массива случайным образом выбирается один вариант и объединяется с другим.
Пользовательские подсказки можно создать с помощью опции --prompt
или указать файл для использования с помощью опции --prompts
.
Все созданные изображения сохраняются локально. Каждое изображение занимает ~1,2 МБ (при разрешении 800x480 пикселей), поэтому создание изображения каждые 24 часа в течение 2,25 лет займёт ~1 ГБ памяти.
Пока вся рамка питается по USB, но в планах собрать все по схеме (не понятно только на сколько это жизнеспособно и необходимо).
--
Оригинальный код в репозитории автора: dylski
Моя модификация будет доступна на GitHub
tags: python programming circuit soldering ai