Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2016, 19:29   #11
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от саша40 Посмотреть сообщение
По методу работы ваш проект очень сильно похож на метод сжатия видео через компенсацию движения. Хотя склоняюсь к тому, что вы делаете программу, которая распознает объекты на снимках. Такие темы довольно часто были в сети, есть даже спец. библиотека по распознаванию геометрических объектов. К сожалению, не помню как она называется, но она точно есть. Остальное - лишь гадания на кофейной гуще.
Ничего из этого мне не подходит, у меня на скринах не простые геометрические фигуры а довольно сложные изображение мифических существ. И само видео у меня не используется.

Чтобы Вы немного представляли что же то все такое.

Есть програмка на delphi7, есть VPS дешовенький

В одной популярной карточной онлайн игре стример ( тот кто транслирует онлайн видео со своего компа) в этой игре запускает программу мою. Программа связана с сервером, она исключения распознования посылала на сервер каждые примерно 15 сек номера распознанных карт,а после моих изменений теперь посылает картинку(и) ( это специальный режим игры) 3х карт за раз.
Далее на сервере на страничке зрителям выводятся эти 3 карты, они кликают на 1 из них , а программа собирает данные( где больше пикнули) и сама кликает в клиенте игры.
Все это проходит 30 раз для одной игры.
Это не бот, и это не сам игровой режим игры, это лишь все подготовка к режиму игры. Просто фан для зрителей, косвенное участие в стримерской жизни.

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

Синхронизация без websocket, по периодически ajax запросам, если номера ( или теперь картинки) не будут готовы, то через 2 секунды будет повторный запрос к серверу.

Последний раз редактировалось Illusiony; 03.05.2016 в 19:33.
Illusiony вне форума Ответить с цитированием
Старый 03.05.2016, 20:07   #12
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

А вам не кажется, что банального чата на Твиче было бы достаточно, чтобы такое реализовать. Банальные особые хеш-теги чата для ходов. ваша программа в онлайн режиме отлавливает чат. Если есть сообщение с специальным хеш-тегом, то она совершает ход. И здесь достаточно будет отослать игре сообщение о ходе второго игрока(выполнить нужную функцию). Здесь нужна глубокая модернизация самого кода карточной игры, либо реализация подобного алгоритма на своем уровне(что кстати большого труда не составит, так как игра очень проста, как и все пасьянсы и прочие карточные игры). Анимирование для второго игрока, надо производить так, чтобы это записывала программа-трансляции.
И не нужно так всё городить. От сложности толку всё равно много не будет.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 03.05.2016, 22:12   #13
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от саша40 Посмотреть сообщение
А вам не кажется, что банального чата на Твиче было бы достаточно, чтобы такое реализовать. Банальные особые хеш-теги чата для ходов. ваша программа в онлайн режиме отлавливает чат. Если есть сообщение с специальным хеш-тегом, то она совершает ход. И здесь достаточно будет отослать игре сообщение о ходе второго игрока(выполнить нужную функцию). Здесь нужна глубокая модернизация самого кода карточной игры, либо реализация подобного алгоритма на своем уровне(что кстати большого труда не составит, так как игра очень проста, как и все пасьянсы и прочие карточные игры). Анимирование для второго игрока, надо производить так, чтобы это записывала программа-трансляции.
И не нужно так всё городить. От сложности толку всё равно много не будет.
1)Во первых я ничего не знаю как это программировать на твиче.
2)во вторых смотреть могут не только с твича
3)в третьих есть задержка на стриме, я не представляю как человек будет жать какуюто команду если реально уже другой ход начался (можно, наверное выводить картинки прямо в твич текущего хода, но если много людей будет голосовать, а у меня покачто максимум было 250 в течении 10-15 секунд каждого хода, то изображения карт в твиче будут быстро улетать)

Про анимирование, Вы, наверное не поняли в чем дело.
Анимацию не нужно записывать, я просто жду пока она закончится, а потом отсылаю последний скрин без анимации, когда она закончилась, вот , а теперь не хочу дожидаться полного окончания анимации.
Illusiony вне форума Ответить с цитированием
Старый 03.05.2016, 22:25   #14
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Ваша идея, что в конце изменение будет слабее, чем в начале, вполне правдоподобна. Сложно советовать что-то конкретное, не видя примера анимации. Раз вопроса о распознавании больше не стоит, то можно, например, уменьшать картинку из рассматриваемой области до 40 пикселей, а затем уже считать различия у уменьшенных картинок, тогда мелкие эффекты скрадутся. Или рассматривать какую-нибудь область в центре карты, где эффект уже закончился. Но, повторюсь, без примера анимаций сложно представить, как лучше оценить завершение.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 04.05.2016, 18:11   #15
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Ваша идея, что в конце изменение будет слабее, чем в начале, вполне правдоподобна. Сложно советовать что-то конкретное, не видя примера анимации. Раз вопроса о распознавании больше не стоит, то можно, например, уменьшать картинку из рассматриваемой области до 40 пикселей, а затем уже считать различия у уменьшенных картинок, тогда мелкие эффекты скрадутся. Или рассматривать какую-нибудь область в центре карты, где эффект уже закончился. Но, повторюсь, без примера анимаций сложно представить, как лучше оценить завершение.
Вот пример видео:
https://www.youtube.com/watch?v=xjX1BeMv_NU
начиная , например с 2.19.09
Там как раз мой проектик в работе на 200+ человек.
Длительность и сила анимации зависит от ценности карты 4х видов.

У меня в данный момент для определения полного окончания анимации использую участок скриншота 57x94 pixels.
Производится подсчет суммы RGB каждого такого рисунка и сравниваются 3 послених таких суммы.
Вывел пример таких сумм:
Код:
Пример№1:
1	1101095	
2	1268683	13,20960398
3	1364487	7,021246813
4	1461794	6,6566835
5	1482895	1,422959818
6	1437964	-3,124626208
7	1373154	-4,71979108
8	1343157	-2,233320453
9	1315972	-2,065773436
10	1315972	0
11	1315984	0,000911865
12	:_1315984	
13	:_1315984
второй столбец сама сумма RGB, третий столбец % расхождения с предыдущим скрином.
Код:
Пример№2:
2402969	
2429935	1,109741619
3297829	26,31713166
3209802	-2,742443303
3316318	3,211875339
3191493	-3,911178875
2197417	-45,23838671
1518842	-44,67712902
1476985	-2,833948889
1476985	0
1476985	0

Подсчет RGB суммы делается так( рисунок до этого приводится к 24 битам):
Код:
x_len:=bmpout.Width;
    y_len:=bmpout.Height;
  x_len:=57;
   y_len:=94;
   summa_pixels_bmp_t9:=0;
    For   j:=0 to y_len-1 do begin
      p:=bmpout.ScanLine[j];
        For   i1:=0 to x_len-1 do begin
          R[i1,j]:=p[i1 * 3 + 2];
          G[i1,j]:=p[i1 * 3 + 1];
          B[i1,j]:=p[i1 * 3];
          summa_pixels_bmp_t9:=summa_pixels_bmp_t9+R[i1,j]+G[i1,j]+B[i1,j];
        end;
    end;
По этим данным каких то закономерность помогающим определить ее неполное окончания я не вижу. Я понимаю что это очень грубый вариант.


А Вы имели ввиду отмасштабировать мой кусочек изображения до 40 пикселей для сглаживания влияния анимации и уже анализировать их?

Чаще всего, оказалось анимация длится почти 2 секунды, но если попадается редкая или легендарная карта она блится гораздо больше ( ориентировочно 4-5 сек) точно не тестил. Подготовка и отправка изображения на сервер зависит от настроек, по одной из них это около 1 секунды на моем компе.

Последний раз редактировалось Illusiony; 04.05.2016 в 18:58.
Illusiony вне форума Ответить с цитированием
Старый 04.05.2016, 22:11   #16
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Отмасштабировал с 47х94 до 5х10 вот пример RGB суммы отмасштабированной анимации через StretchDraw, может быть использовать более продвинутое масштабирование? чем эта функция?:
Код:
Пример№3
1	2435	
2	3063	20,50277506
3	4883	37,27216875
4	6553	25,48451091
5	9101	27,99692342
6	10293	11,5806859
7	11587	11,16768793
8	12561	7,754159701
9	12971	3,160897386
10	12756	-1,685481342
11	12756	0
12	12756	0

Пример №4
11092	1	
6684	2	-65,94853381
5819	3	-14,8650971
8001	4	27,27159105
11256	5	28,91791045
13106	6	14,11567221
13800	7	5,028985507
14258	8	3,21223173
14452	9	1,342374758
14398	10	-0,375052091
14398	11	0
14398	12	0
Здесь уже просматривается закономерность после 6той итерации отличий становится гораздо меньше. Но два примера мало, буду собирать еще данные

Последний раз редактировалось Illusiony; 04.05.2016 в 22:17.
Illusiony вне форума Ответить с цитированием
Старый 05.05.2016, 22:18   #17
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Функции улучшения качества при масштабировании особо разницы не дают, впринцепе, ожидаемо
Еще провел несколько тестов, в одном из них уже на 3тьей итерации разница менее 1 %. В остальных на 4-6-8 итерациях разница менее 10%.
Сделаю еще тестов, нужно зафиксировать карту с сильной и долгой анимацией, но они редко попадаются( Еще сохранил все картинки чтобы оценить визуально пригодность изображения, вроде терпимо.
Illusiony вне форума Ответить с цитированием
Старый 05.05.2016, 22:23   #18
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Уменьшенные картинки только для определения конца анимации. Для голосования отдавайте реальный размер. Еще посоветовал бы записать анимации на видео и уже на нем тестировать, чтобы не ловить каждый раз редкие анимации.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 06.05.2016, 00:43   #19
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Уменьшенные картинки только для определения конца анимации. Для голосования отдавайте реальный размер. Еще посоветовал бы записать анимации на видео и уже на нем тестировать, чтобы не ловить каждый раз редкие анимации.
Для голосования все сделано, я там масштабирование применяю чтобы отдавать одинаковый размер несмотря на разрешения игры.
Мм, нужно тогда точно знать координаты которые я использую, чтобы на видео они совпадали, да и к тому же не особо точно получится, потому
что видео все равно имеет компрессию кадров(вроде) ((.
И еще карты разные, анимации разные , одно видео мало что скажет.

Последний раз редактировалось Illusiony; 06.05.2016 в 00:47.
Illusiony вне форума Ответить с цитированием
Старый 06.05.2016, 01:02   #20
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Вот плавно подходим к вопросу, чтобы не делать жесткие координаты, а определять их, узнавая область окна игры, а затем ища контуры карт. Думаю, фрапс может захватить без компрессии кадры, хотя не понимаю, как компрессия может помешать, ведь сейчас нет сравнения с шаблоном, а необходимо узнать только окончание анимации. Да, кстати, киньте пример появления редкой карты, а то что-то промотал видео по вашей ссылке выше и не нашел.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите, как различать способы сравнения значений и параметров KBO Помощь студентам 8 26.12.2015 00:02
Неполное решение, выручайте!!! anton.dasuik Помощь студентам 1 02.02.2013 14:25
Подскажите как програмно установить Шрифт (Visual Basic 6) С.М.С Помощь студентам 8 07.01.2009 02:03
Подскажите как установить G32 или DelphiX Teen4jump Общие вопросы Delphi 3 26.06.2007 23:50