FontJoy - ИИ в помощь дизайнеру

Вторая версия статьи про FontJoy.com, который строит шрифтовые векторы для сотен шрифтов. Первая писалась второпях и опубликована на golos.io

50 оттенков Helvetica 50 оттенков Helvetica...

Шрифтовые векторы - это форма представления информации о шрифтах, которая может быть использована для создания новых шрифтов из комбинации особенностей уже имеющихся. Нейронные сети, кажется, натравливают на всё, что под руку попадётся, и работа с векторами тоже не является полномасштабной революцией. Если вкратце, то на вход подаётся изображение символов в шрифте, свёрточная сеть (CNN - convolutional neural network) выделяет особенности начертания, а на выходе получается вектор, представляющий из себя математическое представление особенностей отдельного шрифта. Если использовать изображения символов из различных шрифтов, мы получаем множество векторов, каждый из которых представляет визуальную информацию шрифта.

Облако шрифтов. Почти, как облако тэгов в начале двухтысячных, только для шрифтов

Если хотите больше подробностей, то они весьма детально изложены в этой публикации, хоть она и помечена, как черновик (англ.) http://cs231n.github.io/transfer-learning/

Самое, на мой взгляд, классное в этой идее в том, что получившийся вектор шрифта - это полноценный математический вектор, а значит, мы можем использовать весь математический аппарат для работы с ним. Аналогично тому, какие операции позволяют проводить вектора слов word2vec, можно производить вычисления с векторами шрифтов (font2vec):

Математические операции над векторами шрифтов

Понимаете, что происходит? Вы можете манипулировать особенностями шрифтов, производя операции над представляющими их векторами. Уже вижу, как скоро подобный же инструмент будет генерировать новые начертания на основе получившейся модели. Тогда, наверное, можно в любой шрифт будет добавить кириллицу... Для чего могут быть полезны шрифтовые векторы? Например - для поиска визуально похожих шрифтов, например, при разработке дизайна веб-страницы. В векторной форме можно вычислить степень похожести шрифта, которая будет зависеть от таких особенностей, как наличие засечек, наклон, вес. Или что-нибудь ещё. Иногда нужно скорее не подбирать похожие шрифты, а наоборот - нужен контраст, но без нагромождения стилей. Слишком похожие шрифты создают дискомфорт при чтении, но дико контрастирующие шрифты выглядят куда более неприятно и беспорядочно. Парадоксально, но мы хотим, чтобы шрифты, которые контрастируют друг с другом, одновременно имели некоторое сходство. Пока похоже, что поиск правильного баланса, это скорее вопрос вкуса, интуиции, исконно "человеческих качеств", но кто знает? Ведь ещё несколько лет назад мы думали, что компьютеры не смогут обыграть нас в наши же игры. Наивные мясные шарики.

Играем со стилями для этого блога

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