Python и Samila. Делаем красиво

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Содержание:

  • Введение

  • Установка | Запуск без установки

  • Работа с библиотекой Samila

  • Полезные ссылки

Введение

Samila - библиотека для создания генеративного искусства, написанная на языке программирования Python. В данный момент Samila позволяет создавать только статичные изображения. По заверению разработчиков, возможность анимации появится в ближайшее время.

В основе механизма генерации изображений библиотеки Samila лежит идея о преобразовании пространства квадратной формы, из Декартовой системы координат, в любую иную систему, например, такую как Полярная система координат. Samila позволяет создавать изображения, основанные на тысячах точек. Положение каждой отдельной точки рассчитывается по формуле со случайными параметрами. Из-за случайных чисел каждое изображение выглядит по-разному.

Установка | Запуск без установки

Для работы Samila необходима версия Python не ниже 3.5.

Установка библиотеки:

pip install samila

Запуск без установки:

Поработать с библиотекой можно и без установки на локальный компьютер. Например, в Google Colab. Я накидал несколько примеров, вот по этой ссылке. При желании можно скопировать себе(кнопка "Copy to Drive", если вы залогинены под своим Google аккаунтом).

Работа с библиотекой Samila

Быстрый старт. Генерация случайного изображения без каких-либо входных данных:

import matplotlib.pyplot as plt
from samila import GenerativeImage


g = GenerativeImage()
g.generate()
g.plot()
plt.show()

С сохранением в PNG:

from samila import GenerativeImage


g = GenerativeImage()
g.generate()
g.plot()
g.save_image(file_adr="test.png")

Если нужно сгенерировать заданное количество случайных изображений, чтобы было из чего выбрать:

from samila import GenerativeImage


for i in range(10):
    g = GenerativeImage()
    g.generate()
    g.plot()
    img_name = str(i+1) + "_test.png"
    g.save_image(file_adr=img_name)

Основа для создания красивых изображений. Добавляем условий:

import matplotlib.pyplot as plt
from samila import GenerativeImage
import random
import math


def f1(x, y):
    result = random.uniform(-1,1) * x**2  - math.sin(y**2) + abs(y-x)
    return result


def f2(x, y):
    result = random.uniform(-1,1) * y**3 - math.cos(x**2) + 2*x
    return result


g = GenerativeImage(f1, f2)
g.generate()
g.plot()
plt.show()

Проекция:

import matplotlib.pyplot as plt
from samila import GenerativeImage
import random
import math
from samila import Projection


def f1(x, y):
    result = random.uniform(-1,1) * x**2  - math.sin(y**2) + abs(y-x)
    return result


def f2(x, y):
    result = random.uniform(-1,1) * y**3 - math.cos(x**2) + 2*x
    return result


g = GenerativeImage(f1, f2)
g.generate()
g.plot(projection=Projection.POLAR)
plt.show()

По умолчанию вид проекции(projection): RECTILINEAR

Поддерживаемые виды проекций: RECTILINEAR, POLAR, AITOFF, HAMMER, LAMBERT и MOLLWEIDE:

Диапазон:

import matplotlib.pyplot as plt
from samila import GenerativeImage
import random
import math
from samila import Projection


def f1(x, y):
    result = random.uniform(-1,1) * x**2  - math.sin(y**2) + abs(y-x)
    return result


def f2(x, y):
    result = random.uniform(-1,1) * y**3 - math.cos(x**2) + 2*x
    return result


g = GenerativeImage(f1, f2)
g.generate(start=-2*math.pi, step=0.01, stop=0)
g.plot()
plt.show()

Цвет:

import matplotlib.pyplot as plt
from samila import GenerativeImage
import random
import math
from samila import Projection


def f1(x, y):
    result = random.uniform(-1,1) * x**2  - math.sin(y**2) + abs(y-x)
    return result


def f2(x, y):
    result = random.uniform(-1,1) * y**3 - math.cos(x**2) + 2*x
    return result


g = GenerativeImage(f1, f2)
g.generate()
g.plot(color="yellow", bgcolor="black", projection=Projection.POLAR)
plt.show()

Регенерация(параметр seed):

import matplotlib.pyplot as plt
from samila import GenerativeImage
import random
import math
from samila import Projection


def f1(x, y):
    result = random.gauss(0, 1) * math.sin(y)+ (x + y) * random.uniform(-1, 1)
    return result


def f2(x, y):
    result = random.uniform(-1, 1) * y * x + math.cos(x ** 2) + random.gauss(0, 1)
    return result


g = GenerativeImage(f1, f2)
g.generate(seed=300)
g.plot(color="red", bgcolor="black", projection=Projection.POLAR)
plt.show()

Помимо всего вышеперечисленного, Samila также умеет:

  • Сохранять данные о полученных изображениях в формате JSON

  • Воспроизводить изображения на основе ранее сохранённых данных

  • Сохранять изображения в более высоком разрешении

  • Загружать изображения напрямую в NFT.storage

Полезные ссылки

  • Samila Github

  • Samila PyPI

  • Samila Discord Server

  • Google Colab с примерами

Источник: https://habr.com/ru/post/648955/


Интересные статьи

Интересные статьи

Кладите этот список в закладки, его можно использовать как чек-лист для новичка, который уже пишет работающие программы, но ещё не успел споткнуться о подводные камни языка. Если вы только начали изуч...
Приветствую жителей Хабра! Задался тут вопросом, как можно обойтись без статического IP для экспериментов в домашних условиях. Наткнулся на вот эту статью. Если вы хотите развернуть...
Python легко использовать. В нем вы можете найти огромное количество библиотек для чего угодно. И это его основное преимущество. Из нескольких строк кода вы ничего не сделаете. Если вам нужны...
Вы узнаете, как организовать тесты в классы, модули и каталоги. Затем я покажу вам, как использовать маркеры, чтобы отметить, какие тесты вы хотите запустить, и обсудить, как встроенные маркеры могут ...
Материал, перевод которого мы сегодня публикуем, посвящён инструментам, которые позволяют оснащать Python-проекты средствами форматирования кода, тестирования, непрерывной интеграции и анализа за...