Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Как роботом отделить красивые тумбы от некрасивых?
цитата
26/03/10 в 22:40
 kit
Есть много тумбнейлов различной красивости. Устроить ротацию и померять кликабельность возможности нет. Хотелось бы их грубо разделить на несколько фракций.

Как научить робота отличать яркие, контраcтные, сочные тумбы, от блеклых, смазанных, одноцветных?

Тумбы резались и кропились автоматом, гламурить возможности нет.

Пример более менее приличных тумбнейлов:


Пример плохих тумбнейлов:


Последний раз редактировалось: kit (01/04/10 в 23:37), всего редактировалось 1 раз
цитата
26/03/10 в 22:56
 paranoik.death
один из параметров - вес тумбы. Чем больше ярких цветов, тем тяжелее.
цитата
27/03/10 в 01:08
 Foxy Babe
kit писал:

Как научить робота отличать яркие, контраcтные, сочные тумбы, от блеклых, смазанных, одноцветных?


методом тестовых заданий, проб и ошибок icon_razz.gif

хорошо отличил - получи на нормальную еду, плохо отличил - получи на черный хлеб ... или голодай smail101.gif
цитата
27/03/10 в 01:30
 benzole
в плохих тумбах как правило левелс криворукие, соответственно имхо надо имаджмэджиком чекать левелс у тумбы ( менять-то уровни имэджмэджик умеет - http://www.imagemagick.org/script/command-line-options.php#level - видимо должен уметь и просто чекать распределение уровней на картинке)
цитата
27/03/10 в 01:49
 Kn
имхо как раз по методу Foxy Babe:
цитата
27/03/10 в 02:32
 Sterx
benzole:
интересно было бы узнать про авточек уровня.
в свое время экспериментировал с яркостью-контрастностью, все оказалось жутко нелинейно
цитата
27/03/10 в 02:34
 Woland
+1 Foxy Babe, главное не закармливать робота
цитата
27/03/10 в 03:28
 Silvio Manuel
И какое нынче в среднем энергопотребление у хороших роботов на каждую тысячу тумб?
цитата
27/03/10 в 03:37
 benzole
Sterx писал:
benzole:
интересно было бы узнать про авточек уровня.


чессговоря это я просто гипотезу выдвинул. ничего конкретного сказать не могу . смысл в том, что когда хочешь сделать из приведённой в примере "плохой" картинки "хорошую" - одним из распространённых вариантов в фотошопе является просто растянуть диапазон яркостей между блэк пойнтом и вайт пойнтом.

вот пример гистограммы "плохой картинки" -



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

чтобы эту картинку сделать более смотрибельной, надо слайдеры белой и черной точек передвинуть на основные границы гистограммы.

т.е у картинки с плохими уровнями есть провалы в экстремумах яркостей (там где "черная" и "белая" точки):

.........||||||||||||||||......
0------------------------------255


а у картинки с хорошими уровнями - присутствует весь диапазон отсчётов яркостей, притом он имеет более-менее однородную структуру, как правило без резких пиков и провалов:

...||||||||||||||||||||||||||..
0------------------------------255


а как программно определить картинки с такой гистограммой - я хз.
цитата
27/03/10 в 12:22
 Kn
автоуровни есть в имейджмеджике и он исправляет эту неровность - только вот тока проблема, не значит это что получится нормальная тумбаicon_smile.gif
цитата
27/03/10 в 12:47
 Zmey Горыныч
нейросети, пусть сам робот учится icon_rolleyes.gif
только сказать труднее чем сделать icon_neutral.gif
цитата
27/03/10 в 13:03
 benzole
Kn писал:
автоуровни есть в имейджмеджике и он исправляет эту неровность - только вот тока проблема, не значит это что получится нормальная тумбаicon_smile.gif


не, вопрос ведь стоИт не в улучшении, а в обнаружении.
цитата
27/03/10 в 14:30
 JM
Ну как вариант берем 100 точек с тумбы делаем автокорекцию тем же IM по тем же точкам проверяем сильно ли ушел цвет
1.если ваще сильно и везде значит - тумба гавно....
2.если сильно но не везде - тумба гавно?
3.не ушел/не сильно везде/не везде - тумба хорошего качества....

Вощем над попробовать и подбирать...
цитата
27/03/10 в 14:39
 pickuper
Для вышепоставленной задачи достаточно IM.
Копать надо в сторону утилиты identify (с параметром -verbose), а среди выводимых ей результатов смотрим Channel statistics.

Понятно, что тумбы тумбам рознь, но примеры из первого поста определяются данным способом со 100% точностью.


Для более сложных случаев, этого будет не достаточно... У меня сокурсники писали дипломы по теме вроде "пиксельный анализ изображения" - это дело было на Си++, давно и не правда ;)
цитата
27/03/10 в 15:10
 Fighter
в сервис для распознавания капч зарядить. выдавать две пиксы на выбор - быстро отсеят имхо =)
цитата
27/03/10 в 23:11
 alex.raven
Вот результат небольшого эксперимента

Код:
<?
$images = array("3583086.jpg", "5129499.jpg", "5233995.jpg", "5276998.jpg", "5635460.jpg", "5650199.jpg", "5846497.jpg", "5968560.jpg");

foreach ($images as $image)
{
    $im = new Imagick($image);
    $im->edgeImage(1.0);
    $im->posterizeImage(2, false);
    $im->writeImage("thumbs/{$image}");
    unset($im);
}
?>


Результат работы скрипта:



Суть заключается в том, что у "сочных" тумб с большим количеством цветов и не смазанных будут более чёткие края. У смазанных и неконтрастных наоборот - они в результате обработки стали почти чёрными. Далее подсчитываем отношение количества чёрных\не чёрных пикселей, и чем больше не чёрных, тем субъективно более качественная тумба. Не было возможности проверить на большой выборке.

Метод конечно же, не претендует на ноу-хау, и не со всеми тумбами будет давать правильный результат. Но это эксперимент :-)
цитата
28/03/10 в 03:06
 kit
Pikuper, alex.raven
спасибо за интересные варианты. Но есть вопросы:
1) Как быстро посчитать черноту картинки?
2) Identify->Channel statistic: что именно там смотреть?
цитата
28/03/10 в 03:55
 alex.raven
kit писал:
Pikuper, alex.raven
спасибо за интересные варианты. Но есть вопросы:
1) Как быстро посчитать черноту картинки?
2) Identify->Channel statistic: что именно там смотреть?


вот так:

Код:
<?
$images = array(
"3583086.jpg",
"5129499.jpg",
"5233995.jpg",
"5276998.jpg",
"5635460.jpg",
"5650199.jpg",
"5846497.jpg",
"5968560.jpg",
);
$i=0;
foreach ($images as $image)
{
    $im = new Imagick($image);
    $im->edgeImage(1.0);
    $im->posterizeImage(2, false);
    $im->writeImage("thumbs/{$image}");
    $width = $im->getImageWidth();
    $height = $im->getImageHeight();
    $black = 0; $nonblack = 0;
    for ($y=0; $y<$height; $y++)
    {
        for ($x = 0; $x<$width; $x++)
        {
            $pixel = $im->getImagePixelColor($x, $y);
            $color = $pixel->getColor();
            $value = $color['r'] + $color['g'] + $color['b'];
            if ($value>0)
            {
                $nonblack++;
            }
            else
            {
                $black++;
            }
        }
    }
    echo "{$image}, black: {$black}, non-black: {$nonblack}<br />";
    $i++;
    unset($im);
}
?>


результат работы:

3583086.jpg, black: 18970, non-black: 230
5129499.jpg, black: 17649, non-black: 1551
5233995.jpg, black: 18930, non-black: 270
5276998.jpg, black: 17328, non-black: 1872
5635460.jpg, black: 17461, non-black: 1739
5650199.jpg, black: 18781, non-black: 419
5846497.jpg, black: 16873, non-black: 2327
5968560.jpg, black: 17018, non-black: 2182

пихаем значения в базу данных, и затем делаем

Код:
SELECT * FROM thumbs ORDER BY nonblack DESC;


скрипт довольно медленный из-за большого числа итераций, так что лучше сначала проапдейтить базу, а не вызывать его в реалтайме для каждой тумбы.
цитата
28/03/10 в 09:27
 JM
alex.raven smail54.gif отличное решение помоему
Немного подгламурим
Цитата:

$value = $color['r'] + $color['g'] + $color['b'];

лишний кусок при всех нулях итак $color = $pixel->getColor(); будет нулем....
Код:

$color = $pixel->getColor();
#            $value = $color['r'] + $color['g'] + $color['b'];
            if ($color>0)
            {
цитата
28/03/10 в 10:04
 alex.raven
JM писал:
alex.raven smail54.gif отличное решение помоему
Немного подгламурим
лишний кусок при всех нулях итак $color = $pixel->getColor(); будет нулем....
Код:

$color = $pixel->getColor();
#            $value = $color['r'] + $color['g'] + $color['b'];
            if ($color>0)
            {


не сработает, т.к getColor() возвращает не число, а ассоциативный массив c элементами r, g, b.
цитата
28/03/10 в 11:16
 pickuper
kit писал:
Pikuper, alex.raven
спасибо за интересные варианты. Но есть вопросы:
1) Как быстро посчитать черноту картинки?
2) Identify->Channel statistic: что именно там смотреть?


Если мы говорим об уровнях, как о показателе сочности картинки, то смотрим на минимальные (0) и максимальные (255) значения для каждого цвета (red, green, blue).

Приведу пример значений для данных тумб:
    5635460.jpg red: 0 255; green: 0 255; blue: 0 255;
    5846497.jpg red: 0 255; green: 0 255; blue: 0 255;
    5968560.jpg red: 0 255; green: 0 255; blue: 0 255;
    5276998.jpg red: 26 255; green: 6 255; blue: 0 255;

    5129499.jpg red: 24 255; green: 21 255; blue: 9 255;
    5650199.jpg red: 3 209; green: 4 189; blue: 0 160;
    5233995.jpg red: 16 255; green: 21 255; blue: 15 255;
    3583086.jpg red: 1 202; green: 0 182; blue: 0 164;


Для каждой тумбы проводим нехитрые вычисления ( r(max-min) + g(max-min) + b(max-min) ):
    765
    765
    765
    733

    711
    551
    713
    547


Как видим, только 4ая тумба отклоняется от идеальных результатов, но тут можно ввести какую-то погрешность (тут = 32).
цитата
28/03/10 в 15:34
 alex.raven
Оффтопик: так зарождались фильтры для фотошопа smail101.gif
цитата
29/03/10 в 11:04
 leroy_17
alex.raven писал:





Так вот у этой тумбы количество черных и не черных пикселей будет соответствовать качественной тумбе, хотя оригинал так себе

цитата
29/03/10 в 11:27
 nubik
да имхо тут проще человеку поручить. просто сделать вывод тумб штук по 100 и чтоб он выбирал плохие, кликая по ним.

таким макаром несколько тыщь в день для одного не проблема, а человек 5 вобще выдадут огромные объемы. и качество будет на порядок лучше чем скриптом.
цитата
29/03/10 в 11:46
 alex.raven
leroy_17 писал:
Так вот у этой тумбы количество черных и не черных пикселей будет соответствовать качественной тумбе, хотя оригинал так себе


ну я жеж сразу оговорился, на чём основан метод и что у него будут погрешности.

хотя у нас применяется другой метод - я написал простой скрипт, который при помощи ajax одним кликом позволяет отбирать более качественные тумбы, которые попадут на главную страницу:



на странице выводится сразу по 500 тумб, опыт показал, что одна девочка за 2-3 часа ненапряженной работы модерирует около 20,000 тумб.
Стр. 1, 2  >  последняя »


Эта страница в полной версии