Генератор тестовых изображений на php / ImageMagick

Андрей18 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
09.08.2015

Нужно написать генератор тестовых изображений для системы распознавания монет по фотографиям.

Есть набор из нескольких сотен фотографий монет и 3 jpg "фона".

Нужно написать скрипт на php, который будет брать случайный фон, выбирать Х случайных монет, случайно у них выбирать первую сторону (аверс\реверс), случайно менять размер в определенных пределах, поворачивать их на случайный угол, размещать на фоне в нужных местах (опять же с небольшой случайной погрешностью).

После этого генерировать еще одно изображение с теми же параметрами, но выбирать уже обратную сторону монеты.

При запуске скрипта

* скрипт считывает из папки coins/ перечень монет (в виде 123_1.jpg, 123_2.jpg, 123 - id монеты, 1\2 аверс\реверс, id не по порядку, случайная выборка из базы)

* в папку test/ записывает сгенерированые картинки uniqprefix_1.jpg, uniqprefix_2.jpg , uniqprefix_coins.txt

* в uniqprefix_coins.txt записываются ID использованных монет в определенном порядке

Нюансы

* я дам 3 jpg фона, они будут отличаться по параметрам генерирования - разного размера, с разным количеством монет и их положением

* перед накладыванием монет на фон скрипт должен их обрезать - удалить фон. Идеального photoshop обрезания я не жду. В ImageMagick это можно сделать http://www.imagemagick.org/Usage/masking/#aligning Примеры монет я приатачил. Серую "тень-кайму" возле монеты тоже нужно обрезать.

* фото монет разного размера, монеты расположены не всегда с краю

* Пример фона я приатачил - это крепеж для монет.

Ответы на вопросы

В. Каков должен быть интерфейс скрипта: он запускается вручную с выставлением нужных параметров, или, например, по крону.

О. Вручную, параметры могут быть прописаны в самом скрипте в виде констант.

В. Как задаются id монет (просто имена файлов?) и в каком порядке они должны быть выведены

О. да, просто имена файлов. чтение примерно такое

$d = opendir (" res/";

while ($f = readdir ($d)) {

if (!in_array ($f,[".",".."]) &&is_file (" res/".$f)) {

preg_match_all ("'^(?\d+)\_ (?\d)'si",$f,$m);

var_dump ($m);

}

}

В. Задаются ли для каждого фона места для монет, или же их нужно вычислить алгоритмически?

О. для каждого фона вам нужно будет подобрать эксперементально места монет и пределы для рандомов.

Заявки фрилансеров