Введение
AI Image Creator — это инструмент, который может генерировать более 40 производных изображений из 1 изображения одним щелчком мыши, а также может глубоко просматривать папку и генерировать более 40 производных изображений из всех изображений в ней, чтобы расширить галерею более 40 раз. Эффект.
задний план
Недавно я работал над проектом, связанным с распознаванием объектов, из-за необъективности стека технологий внутри команды.JavaScript
, в уже использованномPython
иTensorflow
После того, как сервер распознавания объектов построен, чтобы не увеличивать стоимость обслуживания членов команды, задачи, отличные от обучения и распознавания, передаются в максимально возможной степени.Node.js
Давайте сделаем это, предварительная обработка изображений, о которой я собираюсь рассказать сегодня, является одним из них.
Вот краткое объяснение нескольких концепций для тех, кто не разбирается в глубоком обучении:
распознавание объектов: Распознавание объектов можно понимать как нахождение компьютером одного или нескольких заданных объектов на картинке, например, нахождение на ней всех собак.
тренироваться: способность компьютеров обучаться распознаванию объектов подобна тому, как человек учится говорить, что требует постоянной практики. В глубоком обучении этот процесс называется «обучением».
Обучающий набор: чтобы научиться говорить, людям нужно видеть, что говорят другие люди, слушать голоса других людей и т. д. Эта информация, которая может заставить человека научиться говорить, называется тренировочными наборами в глубоком обучении, но тренировочные наборы, необходимые для распознавания объектов, — это только фотографий.
Целью предварительной обработки изображений является решение проблемы недостаточности обучающего набора при распознавании объектов. Эта проблема возникает, когда распознавание объектов применяется к специализированной области. Если вы идентифицируете собаку, таких картинок много, и кто-то уже обучил ее и может предоставить услугу для всех. Если вы идентифицируете футболки в команде, то таких снимков слишком мало, 100 снимков делать долго, а количество данных все равно жалкое. Чтобы узнать об этих зрелых сервисах ИИ в Интернете, учебная выборка может исчисляться тысячами или даже сотнями миллионов. Конечно, общие требования специальной области относительно просты. Существует не так много типов вещей, которые нужно распознать, и характеристики относительно очевидны. Тем не менее, мы все же надеемся, что чем больше обучающая выборка, тем лучше. В настоящее время , мы можем выполнить некоторую обработку изображений, которые у нас есть, чтобы сгенерировать новые изображения, тем самым расширив текущий обучающий набор, этот процесс называется предварительной обработкой изображения.
Общие методы предварительной обработки изображений следующие:
- вращать. Поскольку угол поворота может быть любым, для поворота необходимо генерировать некоторые углы случайным образом, что также называется случайным поворотом.
- кувырок. Это равносильно размещению зеркала рядом с изображением.Новое изображение - это изображение в зеркале.Как правило, существует два типа горизонтального и вертикального отражения.
- Отрегулировать яркость. Вы можете испытать это, отрегулировав яркость своего телефона.
- настроить насыщенность. После настройки традиционного телевизора вы можете понять этот смысл: чем выше насыщенность, тем ярче цветной дисплей, и наоборот.
- Отрегулировать оттенок. Это эквивалентно изменению цвета всего изображения, представьте зеленый телевизор, настроенный ранее.
- Отрегулируйте контраст. Это сделает светлые участки изображения ярче, а темные – темнее. Вы также можете представить себе регулировку контрастности в телевизоре, надо сказать, что телевизор осветил эти профессиональные термины.
Каждая из вышеперечисленных операций должна быть выбрана в соответствии со сценой, и методы обработки, применимые в настоящее время к нашей команде, в основном указаны выше. Также есть некоторые операции, такие как отбеливание и гамма-обработка, так как это не так интуитивно понятно, интересующиеся могут разобраться сами.
AI Image Creator
Установить
Установить зависимости
AI Image Creator полагается наGraphicsMagick
, так что сначала нужно скачать и установитьGraphicsMagick
. Если это система macOS, вы можете легко использоватьHomebrew
Установить:
brew install graphicsmagick
Для систем Windows вы можете перейти на страницу загрузки официального веб-сайта, чтобы загрузить установочный пакет.Если ссылка для загрузки не открывается, вы можете перейти на SourceForge для загрузки. Системы Linux обычно можно установить с помощью менеджера пакетов.
Установить глобально
AI Image Creator можно установить глобально через npm:
npm i ai-image-creator -g
локальная установка
AI Image Creator также можно установить внутри проекта через npm:
npm i ai-image-creator -S
использовать
Командная строка
AI Image Creator можно вызвать из командной строки. Если он установлен глобально, запустите его прямо в терминале.aiimg [options]
Вот и все. Если он установлен в проекте, передайте его в корневой каталог проекта.npx aiimg [options]
бегать.
Среди них options поддерживает следующие параметры:
-
-i --input <path>
, путь — это путь к исходному изображению или путь к каталогу, содержащему исходное изображение, по умолчанию — текущий каталог. -
-o --output <path>
, путь — это путь к каталогу сгенерированного изображения, по умолчанию — выходная папка в текущем каталоге. -
--output <paths>
, пути — это имена папок или файлов, которые следует игнорировать во время обхода, а несколько имен файлов или папок разделяются , Сопоставление универсальных объектов временно не поддерживается.
Например, следующая команда создаст производные изображения из всех изображений в каталоге images, кроме каталогов dog и cat, в папку outputs:
aiimg -i images/ -o outputs --ignore images/dog,images/cat
NodeAPI
AI Image Creator можно использовать какNode
Модуль называется:
import { start } from 'ai-image-creator'
/**
* @param {string} input 源图片路径或者包含源图片的目录路径,默认是当前目录
* @param {string} output 生成的图片目录路径,默认是当前目录下的 output 文件夹
* @param {object} options 参数配置
* @param {string|string[]} options.ignore 遍历时忽略的文件夹或文件名,暂时不支持 Glob 匹配
* @return {Promise} 生成完毕后会返回一个 Promise
*/
start(input, output, options);
Принцип и эффект
Для интуиции я выбрал изображение в качестве объекта предварительной обработки:
кувырок
Отразить по оси Y используетgm
из.flip
метод:
import gm from 'gm';
/**
* 沿 Y 轴翻转,即上下颠倒
* @param inputPath 输入的图像文件路径
* @param outputPath 输出的图像文件路径
* @param callback 处理后的回调函数
*/
function flip(inputPath, outputPath, callback) {
gm(inputPath)
.flip()
.write(outputPath, callback);
}
Эффект после переворачивания показан на следующем рисунке:
Используется зеркальное отражение по оси Xgm
из.flop
метод:
import gm from 'gm';
/**
* 沿 X 轴翻转,即上下颠倒
* @param inputPath 输入的图像文件路径
* @param outputPath 输出的图像文件路径
* @param callback 处理后的回调函数
*/
function flop(inputPath, outputPath, callback) {
gm(inputPath)
.flop()
.write(outputPath, callback);
}
Эффект после переворачивания показан на следующем рисунке:
вы также можете поставить.flip
и.flop
Используется в сочетании для создания эффекта диагонального переворота:
Если исходное изображение рассматривать как внешний компонент, то есть группу кнопок покупок, фон каждой кнопки в нем можно настроить, а кнопка состоит из трех элементов: текста, разделителя и текста, то перевернутое изображение выше можно рассматривать как тот же компонент, который можно использовать в качестве обучающего набора.
Иногда эффект перелистывания не тот, который вам нужен. Возможно, после перелистывания его не следует рассматривать как то же самое, что и исходное изображение. В настоящее время этот метод имеет ограничения.
настроить яркость
После сравнения регулировка яркости более распространена.Независимо от того, какое изображение, после регулировки яркости содержимое внутри остается прежним.
отрегулируйте используемую яркостьgm
из.modulate
метод:
/**
* 调整亮度
* @param inputPath 输入的图像文件路径
* @param outputPath 输出的图像文件路径
* @param brightness 图像亮度的值,基准值是 100,比 100 高则是增加亮度,比 100 低则是减少亮度
* @param callback 处理后的回调函数
*/
function adjustBrightness(inputPath, outputPath, brightness, callback) {
gm(inputPath)
.modulate(brightness, 100, 100)
.write(outputPath, callback);
}
.modulate
Метод является многофункциональным методом, который может регулировать яркость, насыщенность и оттенок изображения одновременно Эти три характеристики соответствуют трем параметрам метода Здесь регулируется только яркость, поэтому только первый параметр изменяется (если значение больше 100, яркость увеличивается, если меньше 100, яркость уменьшается).
Я сгенерировал картинки с яркостью от 0 до 200, сравнил их и выбрал более подходящий диапазон для обработки яркости. Вы можете увидеть разницу между соседними изображениями с разницей яркости 10 от 0 до 200 (подсказка: верхний левый угол каждого изображения определяет яркость изображения):
Давайте взглянем на две картинки с яркостью 50 и 60. По сути, они выглядят как одна картинка, что не соответствует принципу разнообразия обучающей выборки, не говоря уже о двух картинках с разницей в 1 в соседних яркостях. Поэтому в конечном итоге принимается решение, что разница в яркости между двумя соседними изображениями в качестве тренировочного набора составляет 20, чтобы разница была более очевидной, например, два изображения с яркостью 80 и яркостью 100.
В конце концов, новых изображений, полученных путем регулировки яркости, будет 4.Начните с картинки с яркостью 60 и выбирайте ее для добавления в тренировочный набор каждый раз, когда яркость увеличивается на 20, до картинки с яркостью 140, из которых картинка с яркостью 100 не считается.
настроить насыщенность
Вы также можете настроить насыщенность.modulate
метод, просто настройте второй параметр:
/**
* 调整饱和度
* @param inputPath 输入的图像文件路径
* @param outputPath 输出的图像文件路径
* @param saturation 图像饱和度的值,基准值是 100,比 100 高则是增加饱和度,比 100 低则是减少饱和度
* @param callback 处理后的回调函数
*/
function adjustSaturation(inputPath, outputPath, saturation, callback) {
gm(inputPath)
.modulate(100, saturation, 100)
.write(outputPath, callback);
}
Точно так же метод регулировки яркости используется для определения диапазона насыщенности и того, насколько отличается насыщенность двух соседних изображений в обучающей выборке. Вы можете увидеть разницу между соседними изображениями с разницей в насыщенности 10 (подсказка: верхний левый угол каждого изображения определяет насыщенность изображения):
Отрегулировать оттенок
Метод настройки оттенка является наиболее полезным методом в этом сценарии, который дает наибольшее количество обучающих наборов.Давайте посмотрим на разрыв между изображениями со смежными оттенками 10 (подсказка: верхний левый угол каждого изображения идентифицирует изображение ) оттенок):
Что касается кода для настройки оттенка, то он такой же, как яркость и насыщенность, но изменен третий параметр:
/**
* 调整色相
* @param inputPath 输入的图像文件路径
* @param outputPath 输出的图像文件路径
* @param hue 图像色相的值,基准值是 100,比 100 高则是增加色相,比 100 低则是减少色相
* @param callback 处理后的回调函数
*/
function adjustHue(inputPath, outputPath, hue, callback) {
gm(inputPath)
.modulate(100, 100, hue)
.write(outputPath, callback);
}
Настройка оттенка не панацея, она подходит только для этой сцены, естественно потребности нашей команды аналогичны этой сцене. Но если вы тренируете ИИ, который распознает груши, явно неуместно говорить ему, что есть синяя груша.
Отрегулируйте контраст
используется для регулировки контрастаgm
из.contrast
метод:
/**
* 调整对比度
* @param inputPath 输入的图像文件路径
* @param outputPath 输出的图像文件路径
* @param multiplier 调节对比度的因子,默认是 0,可以为负值,n 表示增加 n 次对比度,-n 表示降低 n 次对比度
* @param callback 处理后的回调函数
*/
function adjustContrast(inputPath, outputPath, multiplier, callback) {
gm(inputPath)
.contrast(multiplier)
.write(outputPath, callback);
}
Ниже приведено изображение с коэффициентами контрастности от -10 до 10. Вы можете видеть, что лучший диапазон качества изображения — [-5, 2], другие теряют некоторые детали. Кроме того, разница между картинками соседних контрастных факторов также очевидна, поэтому каждую картинку можно использовать в качестве обучающей выборки, так что получается еще 7 картинок.
Комплексное отображение эффектов
Суммировать
С помощью вышеуказанных 5 методов на основе одной картинки можно получить 40 дополнительных картинок, то есть обучающая выборка в 40 раз больше исходной. Это еще при отсутствии смешанного использования нескольких методов.Боюсь, если смешанное использование будет больше, чем несколько сотен раз.
gm
Он также поддерживает другие методы обработки изображений, вы можете открыть их самостоятельно, каждый метод имеет свои ограничения в конкретных сценариях, и вам нужно выбрать. Я надеюсь, что у каждого есть тренировочный набор, которым они довольны.