Несколько человек жаловались на отсутствие подробных инструкций по использованию моего приложения Go под названием Caire для изменения размера изображения с учетом содержимого. Если вы не слышали о проекте, вы можете ознакомиться с репозиторием здесь: https://github.com/esimov/caire. Подробный технический обзор самого приложения и его реализации есть на моем личном сайте по адресу https://esimov.com/2019/05/caire-a-content-aware-image-resizing-library, но правда в том, что он не распространяется на его функциональность и то, как вы можете использовать его как нетехнический человек. Таким образом, эта статья в основном представляет собой руководство по использованию приложения.

Что такое Кэйр?

Первая итерация проекта была выпущена еще в 2019 году и в то время привлекла большое внимание, возглавив список трендов HN и Github через несколько дней. Теперь у него 10 000+ звезд на Github, а между тем было добавлено множество новых функций и дополнительных функций, таких как поддержка распознавания лиц, чтобы избежать деформации лица, поддержка графического интерфейса для визуализации процесса изменения размера в реальном времени. , режим отладки, поддержка защитной маски, возможность изменения размера как по горизонтали, так и по вертикали, поддержка сжатия и увеличения изображения и т. д. Вы можете проверить все поддерживаемые функции на странице проекта Github.

Как его установить?

У вас есть несколько вариантов, вам решать, какой из них вы выберете. Перечислим возможности.

  1. Если Go уже установлен на вашем компьютере, вы можете просто установить его с помощью следующей команды:
    $ go install github.com/esimov/caire/cmd/caire@latest
  2. Другой способ — скачать бинарный файл со страницы релиза проекта на Github: https://github.com/esimov/caire/releases.
  3. Или, если вы пользователь Mac, вы можете установить его с помощью Homebrew:
$ brew install caire

Как вы можете это использовать?

Сразу оговоримся, что Caire в первую очередь является CLI-приложением, хотя и имеет графический интерфейс. Область интерфейса GUI предназначена только для целей отладки и визуализации процесса изменения размера. Это также означает, что приложение невозможно запустить как отдельную программу, его нужно запускать из терминала. Действительно простая команда выглядит следующим образом:

$ caire -in input.jpg -out output.jpg -width|-height

Это минимальное требование для запуска приложения. Ширина и высота также могут быть выражены в процентах (используя флаг -perc), и в этом случае размер изображения изменяется в указанном проценте. В противном случае width и height выражаются в пикселях. Например, чтобы уменьшить изображение на 20% как по горизонтали, так и по вертикали, мы можем использовать следующую команду:

$ caire -in input/source.jpg -out ./out.jpg -perc=1 -width=20 -height=20

В настоящее время флаг процента можно использовать только для уменьшения изображения, но не для увеличения!

Команды канала

Если вы являетесь пользователем Linux, вам не нужно иметь изображение на локальном компьютере, вы можете воспользоваться командами канала для загрузки изображения из Интернета, а также для одновременного изменения его размера. Ниже приведены несколько примеров использования возможностей конвейерных команд:

$ cat input/source.jpg | caire >out.jpg
$ curl -s <image_url> | caire > out.jpg -width=20 -perc=1

Еще одно полезное дополнение к библиотеке — опция -square. При использовании этой опции размер изображения будет изменен на квадрат по самому короткому краю.

Поддержка масок

Есть определенные случаи, когда мы хотим, чтобы определенные части изображения не изменялись операцией вырезания швов, как в дочернем примере из видео ниже.

Алгоритм в данном случае не способен отличить ребенка от остального изображения, потому что по сути Caire — это не ML, а скорее библиотека компьютерного зрения. Пиксели удаляются по интенсивности, выделенной для каждого пикселя изображения, с использованием тепловой карты, такой как оператор порога Собеля. По этой причине были введены флаги -mask и -rmask.

Для каждого из них требуется изображение в градациях серого (черно-белое) того же размера, что и исходное изображение. Разница между двумя флагами заключается в том, что опция -mask сохраняет белые участки без изменений, поэтому алгоритм вырезания швов будет применяться только к черным областям. -rmask противоположно -mask.

В приведенном выше видео-примере вы также можете увидеть, что лицо ребенка остается неизменным методом вырезания швов. Это связано с тем, что активирован флаг -face. Когда это включено, он использует библиотеку обнаружения лиц Pigo и проверяет человеческие лица перед изменением размера. Нет необходимости предоставлять файл классификации лиц, поскольку он уже встроен в сгенерированный двоичный файл.

$ caire -in input.jpg -out output.jpg -face=1 -perc=1 -width=20

Обрабатывать целые каталоги одновременно

Приложение способно обрабатывать несколько изображений одновременно, просто предоставляя исходный и конечный каталоги благодаря примитивам параллелизма Go, называемым горутинами.

$ caire -in <input_folder> -out <output-folder>

Режим предварительного просмотра GUI активирован по умолчанию, но вы можете деактивировать его в любое время, установив для флага -preview значение false. Если мы хотим визуализировать операцию вырезания шва, мы можем включить режим -debug. По умолчанию установлено значение false.

$ caire -in input.jpg -out output.jpg -perc=1 -width=20 -debug=1

Поддерживаются еще две опции, флаги -color и -shape, но они относятся только к режиму GUI.

Вот и все. Я надеюсь, что вы найдете эту статью и сам инструмент полезными.

Ссылки и полезные ресурсы