Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 38

Подскажите, как сделать socket port или любой другой с высоким FPS

30.08.2020, 14:39. Показов 1494. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Посмотрел видео, как парни сделали ИИ, который играет в стрит-файтер
https://www.youtube.com/watch?v=NIG4BZ8VpF4

Мне все понравилось, решил написать свой ИИ (чтобы изучить, кака это работает) в игре Head Ball 2, которая выпущена для смартфонов. Для этого я поставил на компьютер эмулятор смартфона Blue Stacks, а котором игра выглядит вот так

https://www.cyberforum.ru/atta... 1598786997

В общей схеме из видео фигурирует сокет - сервер, который передает события в игре в питон (с громадным ФПС)

https://www.cyberforum.ru/atta... 1598787018

https://www.cyberforum.ru/atta... 1598787018

Я решил, что буду делать скриншоты и обрабатывать их, но выяснилось, что это очень медленно (порядка 5 ФПС).
На данный момент я решаю задачу: как передать в питон положения из игры с приемлемым ФПС?
Миниатюры
Подскажите, как сделать socket port или любой другой с высоким FPS   Подскажите, как сделать socket port или любой другой с высоким FPS   Подскажите, как сделать socket port или любой другой с высоким FPS  

0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.08.2020, 14:39
Ответы с готовыми решениями:

Как динамически создать PictureBox или любой другой элемент?
Почему форма пустая? На ней ничего не появляется, пробовал кнопку создать и эффект такой же public partial class Form1 : Form { ...

Как поставить кнопку (или любой другой компонент) в таблицу DBGrid
Как поставить кнопку (или любой другой компонент) в таблицу DBGrid ? у меня есть такой код, он красит ячейки таблицы void __fastcall...

Как конвертировать кодек CUVC в любой другой, например MPEG или H.264
У меня есть видео , которые не воспроизводятся на телевизоре и мне нужно их сконвертировать в другой кодек. Видео в формате AVI с кодеком...

12
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 38
04.09.2020, 17:39  [ТС]
Если кому интересно, я решил задачу (правда, не получил 450 ФПС, но мне столько не обязательно).
Оказывается, есть способ делать скрин-шоты в питоне быстрее

https://python-mss.readthedocs.io/

У меня на компьютере выдает где-то под 150 ФПС, если никак не анализировать полученную информацию. У меня же много всяких функций и работы с этими скрин-шотами, поэтому вместе со всей работой получил 30 ФПС.
Я еще буду опитимизировать функции, которые обрабатывают скрин-шоты, ибо там есть ненужные функции, которые я использовал чисто во время отладки (она еще не закончилась). Уверен, что получится иметь где-то 40-50 ФПС, когда буду переходить уже к обучению будущего бота.

Тред пока что не закрываю, так как есть шанс, что появятся еще вопросы. Плюс, может, кому-то будет интересно, что у меня получится, я все расскажу, как доделаю.
0
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 38
17.10.2020, 18:59  [ТС]
Здравствуйте! Докладываю: в итоге у меня получилось написать бота, который выигрывает 47% , проигрывает 47% и играет вничью 6%. Основная проблема - это распознавание мяча. Он не всегда распознается в правильном месте.
Подскажите, можно ли как то с помощью питона получить данные из другой программы? Как это грамотно называется, чтобы загуглить?
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
19.10.2020, 08:46
nesterzhzhot, если игра не написана тобой, то тебе придется выуживать из памяти данные от игры, либо перелавливать сетевой трафик (онлайн игры).
1
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 38
20.10.2020, 00:42  [ТС]
Вот, это мне и нужно. А как это называется? Может, какая-то библиотека есть, как выудить данные из игры?
Я сделал в этоге через
cv2.matchTemplate
Получается точно, но всего лишь 20 фпс, а хотелось бы быстрее...
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
20.10.2020, 07:46
nesterzhzhot, для работы с памятью pymem, возможно получиться получать из либ какие то данные (расположения мяча, игроков) но это не точно, я не изучал эту тему, знаю только поверхностно и тем более не представляю как это будет работать с эмулятором, а не с простой игрой на ПК.
1
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 38
02.11.2020, 23:09  [ТС]
DmFat, спасибо за наводку, но я не осилил разобраться. Запускаю тест, как в доках, но ничего не выдает (мне видимо не хватает знаний, что вообще происходит).
Сейчас проблема в том, что разработчики изменили физику мяча, и теперь он вращается полностью (а раньше его центр был неподвижной картинкой, которую я искал). Сейчас же мне надо найти не просто элемент на общей картинке, а еще и с рандомным вращением. Вот это я вообще не понимаю, как сделать. Есть идеи?

Добавлено через 29 минут
Видимо, все-таки придется через Pymem как-то писать, ибо я погуглил, по ходу ботов именно так и пишут.
Вот до чего я дошел в документации


Python
1
2
3
4
5
blue_stacks_process = 'Bluestacks.exe'
pm = Pymem(blue_stacks_process)
modules = list(pm.list_modules())
for module in modules:
    print(module)
Мне выдало кучу записей в стиле
<pymem.ressources.structure.MODULEINFO object at 0x0000029A67B16F40>

Что это такое? Как дальше действовать?
0
5042 / 1069 / 149
Регистрация: 29.01.2013
Сообщений: 6,244
03.11.2020, 10:26
Цитата Сообщение от nesterzhzhot Посмотреть сообщение
Сейчас проблема в том, что разработчики изменили физику мяча, и теперь он вращается полностью (а раньше его центр был неподвижной картинкой, которую я искал)
искать кружок с преимущественно белым цветом искать пробовали?
1
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
03.11.2020, 11:26
nesterzhzhot, он выдает список модулей которые использует игра, у этих модулей есть атрибуты или методы, с помощью тыка можно найти модуль отвечающий за отрисовку мяча, размер поля и т. д. Но т.к. ты используешь эмулятор, то я не знаю, получится ли у тебя вообще это реализовать.
1
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 38
03.11.2020, 15:00  [ТС]
Alli_Lupin, я пробовал и так, но из-за вращения мяча тоже не получается (плюс, они сделали, что иногда мяч золотого цвета). Даже это было бы не проблемой, так как в моем изначальном коде изображение просто делается черно-белым

DmFat, Я могу это как-то проверить? Например, просить дать мне координаты того или иного модуля? Я посмотрел коды для Кс-Го, там видел что-то типа pymem.takeint от модуля и решил, что есть take coordinates или подобное

Добавлено через 1 минуту
А, у меня еще идея появилась. Может, как-то можно откатить до предыдущей версии игру?
0
5042 / 1069 / 149
Регистрация: 29.01.2013
Сообщений: 6,244
03.11.2020, 20:30
Цитата Сообщение от nesterzhzhot Посмотреть сообщение
Alli_Lupin, я пробовал и так, но из-за вращения мяча тоже не получается (плюс, они сделали, что иногда мяч золотого цвета). Даже это было бы не проблемой, так как в моем изначальном коде изображение просто делается черно-белым
без разницы, как вращается мяч, главное, что бы он был круглым)
ищите круг)
1
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 38
03.11.2020, 20:35  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def get_ball_coordinates(previous_ball_coordinates):
    image = take_quick_screen_shot()
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    gray = cv2.GaussianBlur(gray, (11, 11), 0)
    cv2.medianBlur(gray, 5)
    # cv2.imshow("Gray", gray)
    edged = cv2.Canny(gray, 10, 250)
    # cv2.imshow("Edged", edged)
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))
    closed = cv2.morphologyEx(edged, cv2.MORPH_CLOSE, kernel)
    # cv2.imshow("Closed", closed)
    no_low_line = cv2.line(closed, (403, 16), (450, 16), (0, 0, 255), 58)
    # cv2.imshow("No low line", no_low_line)
    (cnts, _) = cv2.findContours(no_low_line.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    ball_coordinates = 'Unknown'
    for c in cnts:
        peri = cv2.arcLength(c, True)
        approx = cv2.approxPolyDP(c, 0.02 * peri, True)
        if 90 < peri < 130 and detect(c) != 'rectangle' and detect(c) != 'triangle':
            cv2.drawContours(image, [approx], -1, (0, 255, 0), 4)
            if 5 < int(c[1][0][1]):
                ball_coordinates = [c[1][0][0], c[1][0][1]]
    # cv2.imshow("Output", image)
    # cv2.waitKey(0)
    if ball_coordinates == 'Unknown':
        ball_coordinates = previous_ball_coordinates
    return ball_coordinates
Я делал вот так изначально, до того, как решил использовать MatchTemplate. Проблема в том, что когда размываешь картинку, то мяч (из-за рисунка на нем или еще из-за чего-то) не совсем круглый получается. Поэтому вот так приходится задавать длину контура и искать не совсем круг
Наверное, просто очень криво написал, но без размытия вообще ничего не найти: больно много разных мелких деталей, куча голов болельщиков на трибунах...
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
05.11.2020, 07:52
Цитата Сообщение от nesterzhzhot Посмотреть сообщение
take coordinates или подобное
Если бы все было так просто, нет, takeint означает "взять целое", а откуда, зачем и почему, это уже другой вопрос.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.11.2020, 07:52
Помогаю со студенческими работами здесь

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

Как это сделать просто незнаю как назывваваеться эта штука или вложения или что подскажите кто может
Вот при мер не пойму как это зделать если б подсвечивалось название нашел бы http://s57.***********/i155/1003/ce/ba96f093c72d.gif

Как сделать аналог резистивного делителя с высоким кпд
Добрый день. Дин резистивный делитель http://uptood.wikimedia.org/wikipedia/sommons/d/db/Risistive_divider.png Vin = 50-90...

Нужен кодер (Delphi , C++ или любой другой)
1) Есть бот (ссылку дам в личку), он постоянно обменивает пачки карточек в стиме ( которые дают возможность поднять уровень стим профиля ) ...

Резко начал проседать FPS ноутбука, похоже поймал майнер или другой вирус
Добрый день! Я глупый пользователь который не разбирается в компьютерных штучках. В общем, в один из дней люто начал тупить ноут,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru