Python-сообщество
Уведомления
#1 Авг. 8, 2018 20:34:26
Быстрое получение цвета пикселя с экрана
Нужно как можно быстрее получать информацию о цвете пикселя с экрана.
Благодаря каким библиотекам это можно реализовать? Желательно с примером кода. Спасибо.
Пока что пробую pyautogui.pixel() но он слишком медленный вот сам код
Код спамит клавиши D,F,J,K при правильном цвете соответствующих пикселей
Если быть точным, то мне нужно получение цвета 4 пикселей экрана не реже чем 60 раз в секунду (Суммарно в секунду не менее 240 значений)
Отредактировано lllNF (Авг. 10, 2018 12:06:56)
#2 Авг. 9, 2018 07:52:19
Быстрое получение цвета пикселя с экрана
С чего вы решили что он медленный? Где код по которому вы сделали вывод что он медленный?
ps
Если надо быстро обрабатывать картинку, то практически никогда не работают с отдельными пикселами даже на С не говоря уже о питоне у которого просто циклы в сотни раз медленнее.
#3 Авг. 9, 2018 11:58:37
Быстрое получение цвета пикселя с экрана
lllNF код в студию потому как даже в pyautogui есть несколько способов получить цвет пиксела.
#4 Авг. 10, 2018 12:07:23
Быстрое получение цвета пикселя с экрана
Где код по которому вы сделали вывод что он медленный?
Отредактировано lllNF (Авг. 10, 2018 12:09:48)
#5 Авг. 10, 2018 14:10:23
Быстрое получение цвета пикселя с экрана
lllNF а у вас часом не венда? если венда то таки да он может работать медленно. Начнем с того что что у самого pyautogui нет метода pixel(), оно берет его из pyscreeze
Отредактировано PEHDOM (Авг. 10, 2018 14:26:09)
#6 Авг. 10, 2018 15:02:19
Быстрое получение цвета пикселя с экрана
PEHDOM
lllNF а у вас часом не венда? если венда то таки да он может работать медленно.
#7 Авг. 10, 2018 15:21:21
Быстрое получение цвета пикселя с экрана
lllNF
Но есть ли способ более быстрого получения цвета пикселя для python 3.x?
давайте для начала все же определимся с вашей скоростью, с чего вы взяли что оно работает медленно? Имхо 0,003 секунды вполне достаточно для любого бота, или тогда хотябы выложите сколько у вас занимает времени эта процедура.
PS мда забыл что сам всю эту фигню отключаю, вобщем получение одного пиксела Гетпикселом:
тема Windows Aero с включенной композицией 0.02 сек
тема Windows Aero с выключенной композицией 0.004 сек
Всеравно две сотых секунды достаточно быстро как по мне, если вам не нужно попиксельно перебирать весь рабочий стол.
Отредактировано PEHDOM (Авг. 10, 2018 16:01:06)
#8 Авг. 10, 2018 16:24:39
Быстрое получение цвета пикселя с экрана
lllNF
. Но есть ли способ более быстрого получения цвета пикселя для python 3.x?
Отредактировано PEHDOM (Авг. 10, 2018 17:09:27)
#9 Авг. 10, 2018 18:33:47
Быстрое получение цвета пикселя с экрана
0.06 сек, а это много.
Как можно оптимизировать этот код? Я просто в этом деле ещё совсем зеленый
#10 Авг. 10, 2018 20:29:23
Быстрое получение цвета пикселя с экрана
я бы через ctypes сделал, намного быстрее с однородными массивами работает
Отредактировано vic57 (Авг. 10, 2018 21:25:57)
Быстрое получение цвета некоторых пикселей на экране в Python в Windows 7
мне нужно получить цвет некоторых пикселей на экране или в активном окне, а мне нужно сделать так быстро. Я пробовал использовать win32gui и ctypes / windll, но они слишком медленные. Каждая из этих программ получает цвет 100 пикселей:
каждый из них занимает около 1.75 секунд. Мне нужна такая программа, которая займет менее 0,1 секунды. Почему так медленно?
Я работаю с В Python 3.x и Windows 7. Если ваше решение требует, я использую Python 2.x, пожалуйста, свяжите меня со статьей, показывающей, как иметь Python 3.x и 2.х установлены. Я посмотрел, но не мог понять, как это сделать.
4 ответов
У меня была такая же точная проблема, и я решил ее (в Java, В C#). Основная идея решения-GetPixel с экрана медленно, и вы не можете это исправить. Но поскольку вам нужны некоторые пиксели,вы можете получить их все сразу.
время, необходимое для получения 64 пикселей, было в 98 раз быстрее.
благодаря направлению Маргуса я сосредоточился на получении изображения перед извлечением информации о пикселях. Вот работоспособное решение с использованием библиотека изображений Python (PIL), для чего требуется Python 2.x.
Я не думаю, что это станет проще. Это занимает (в среднем) на 0,1 секунды, что немного медленнее, чем хотелось бы, но достаточно быстро.
Что касается наличия Python 3.x и 2.x оба установлены, я разделил это на новый вопрос. У меня все еще есть некоторые проблемы с этим, но в целом это работает.
это лучше, чем с помощью getpixel все время и работает быстрее.
отключение композиции рабочего стола Windows ускоряет чтение пикселей МНОГО.
Python 2.7 (должно быть одинаковым для 3.x)
Поиск определенного пикселя на экране
Всем привет. Пишу игрового бота.
Дано: Есть часть экрана размером в 1080х871
Нужно: Найти в этой части экрана пиксель с RGB цветом 231 232 99 и вернуть его координаты(х, у). Возможно таких частей будет 2-3.
Буду благодарен за помощь.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Поиск определенного пикселя на экране
Здравствуйте. Я хочу найти определённый пиксель на экране. Я опробовал способ через opencv.
Цвет определенного пикселя на экране
Как сделать процедуру с помощью которой в текстовом редакторе отображался цвет(в формате.
Узнать цвет определенного пикселя на экране
Привет всем:) столкнулся с проблемой, а проблема состоит в том, что я хочу узнать цвет.
Получение RGB цвета определённого пикселя на экране
Необходимо получить RGB цвет пикселя который находится на кординатах x и y. Как это сделать?
На данный момент все до чего додумался мой не шибко опытный мозг, то это до 2-ух циклов фор
Dave_, OMG. Конечно будет тормозить!
Во-первых, вы в цикле получаете DC. Зачем? Его достаточно получить единожды.
Во-вторых, пиксель вы получаете у него, у контекста. Я не знаю, что там происходит внутри, с winapi плотно не работал, но наверняка внутри там тоже множество всего тормозного и для частых вызовов не предназначенного.
Картинку с этого контекста вам надо запихнуть в bitmap. И уже по нему пробегаться циклом.
Добавлено через 1 минуту
Dave_, да, в третьих.
В возвращаемом значении у вас очень много лишнего. Формируется список и питоновский массив. Избавьтесь от формирования лишних объектов.
Добавлено через 4 минуты
Да, теоретически возможно ещё ускорить, избавившись от питоновских циклов.
Но для этого надо содержимое картинки перевести в числовой массив в памяти, это надо разбираться, как.
Поиск определенного пикселя на экране
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Поиск определенного пикселя на экране
Всем привет. Пишу игрового бота. Дано: Есть часть экрана размером в 1080х871 Нужно: Найти в этой.
Цвет определенного пикселя на экране
Как сделать процедуру с помощью которой в текстовом редакторе отображался цвет(в формате.
Узнать цвет определенного пикселя на экране
Привет всем:) столкнулся с проблемой, а проблема состоит в том, что я хочу узнать цвет.
Получение RGB цвета определённого пикселя на экране
Необходимо получить RGB цвет пикселя который находится на кординатах x и y. Как это сделать?
Можно что-то такое сделать
0.041104663999999985 seconds
(array([ 1, 2, 3, 3, 3, 3, 4, 4, 7, 8, 8, 8, 15, 16, 22, 26, 27,
27, 28, 29, 29, 30, 30, 31, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33,
34, 34, 34, 34, 35, 36, 36, 37, 38, 38, 39, 39, 39, 39, 39, 40, 41,
41, 42, 43, 43, 43, 44, 45, 45, 45, 47, 49, 49, 50, 52, 60, 60, 62,
63, 63, 63, 63, 65, 70, 70, 71, 72, 73], dtype=int64), array([17, 22, 18, 19, 20, 21, 19, 20, 23, 24, 25, 26, 21, 66, 20, 10, 11,
65, 11, 16, 42, 14, 21, 21, 17, 66, 14, 18, 19, 20, 21, 35, 35, 35,
15, 34, 35, 36, 15, 15, 36, 15, 15, 36, 9, 13, 14, 15, 35, 8, 6,
42, 4, 3, 26, 41, 2, 0, 1, 24, 28, 28, 50, 28, 39, 15, 16, 13,
19, 22, 23, 50, 19, 13, 15, 22, 15, 30], dtype=int64), array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 2, 1,
1, 1, 1, 2, 1, 1, 1, 1, 1, 0, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1,
1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0], dtype=int64))
я так понял код должен был найти координату, RGB которой я ввёл корректно. Вывод слишком много совпадений? Почему он не вывел мне верную координату?
Он находит все точки с заданным цветом, но 3 раза, так как изображение по умолчанию создается в RGB, в первом массиве все координаты x, во втором все координаты y, в третьем индексы цветов, можете конвертировать изображение, чтобы по одной координате находило
Быстрое получение цвета некоторых пикселей на экране в Python на Windows 7
Мне нужно получить цвет некоторых пикселей на экране или из активного окна, и мне нужно сделать это быстро . Я пытался использовать win32gui и ctypes / windll, но они слишком медленные. Каждая из этих программ получает цвет 100 пикселей:
Каждый из них занимает около 1,75 секунды. Мне нужна такая программа, чтобы она заняла не более 0,1 секунды. Что делает это так медленно?
Я работаю с Python 3.x и Windows 7. Если ваше решение требует использования Python 2.x, пожалуйста, свяжите меня со статьей, показывающей, как установить Python 3.x и 2.x обеими. Я посмотрел, но не мог понять, как это сделать.
4 ответа
У меня была точно такая же проблема, и я решил ее (на Java, в C #). Основная идея решения заключается в том, что GetPixel с экрана работает медленно, и вы не можете это исправить. Но так как вам нужны пиксели, вы можете получить их сразу.
Время, необходимое для получения 64 пикселей, было в 98 раз быстрее.
Python 2.7 (должен быть таким же для 3.x)
AutoIt для сравнения
Это лучше, чем использовать getpixel все время, и работает быстрее.
Я не думаю, что это становится проще, чем это. Это занимает (в среднем) 0,1 секунды, что немного медленнее, чем хотелось бы, но достаточно быстро.
Что касается установки Python 3.x и 2.x, я разделил это на новый вопрос. У меня все еще есть некоторые проблемы с этим, но это вообще работает.



