tuduf.ruhobbymade.it › PaperPiAI

write: 05/02/2025 / modified: 04/09/2025

PaperPiAI

Автономная рамка для фотографий с искусственным интеллектом, работающая на базе 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