Как заставить Python обнаруживать изменения на моем экране?

Вопрос или проблема

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

Я смотрел в разных местах, но не могу найти ничего, что подошло бы под мои требования.

Чтобы заставить Python обнаруживать изменения в конкретной части вашего экрана и выполнять какое-либо действие, когда происходит изменение, вы можете использовать сторонние библиотеки, такие как Pillow и mss, чтобы захватывать экран и проверять, изменился ли какой-либо пиксель. Ниже приведен пример, который показывает, как обнаружить изменения пикселей в определенной области экрана.

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

Необходимые библиотеки

Вам нужно установить следующие библиотеки:

  1. Pillow (для обработки изображений)
  2. mss (для создания снимков экрана)

Вы можете установить их с помощью следующей команды:

pip install pillow mss

Пример кода

import mss
import numpy as np
from PIL import Image
import time

# Установите область экрана для захвата (например, область 100x100 в верхнем левом углу)
monitor = {"top": 0, "left": 0, "width": 100, "height": 100}

# Используйте mss для создания снимков экрана
with mss.mss() as sct:
    # Захватите начальный снимок экрана
    previous_screenshot = np.array(sct.grab(monitor))

    while True:
        # Захватите текущий снимок экрана
        current_screenshot = np.array(sct.grab(monitor))

        # Сравните текущий снимок экрана с предыдущим
        if not np.array_equal(current_screenshot, previous_screenshot):
            print("Обнаружено изменение в области экрана!")
            # Здесь вы можете добавить другие действия, например, инициировать событие
            # Обновите предыдущий снимок экрана текущим
            previous_screenshot = current_screenshot

        # Подождите 1 секунду перед следующим проверкой
        time.sleep(1)

Объяснение:

  1. Используйте mss для захвата конкретной области экрана (например, область 100×100).
  2. Используйте numpy для сравнения снимков экрана и проверки изменений пикселей.
  3. Если произошло изменение, выполните желаемое действие.

Вы можете настроить размер области экрана и временной интервал в зависимости от ваших потребностей.

Этот ответ схож по концепции с ответом Хэнка, но требует меньше кода.

Вы можете использовать pyautogui для создания снимков экрана вашего экрана (для этого потребуется установить с помощью pip или conda).

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

Затем мы можем использовать read(), чтобы прочитать значения пикселей обоих изображений и проверить на различия. Поскольку мы используем один и тот же метод для их создания, в данном случае вам не нужно беспокоиться о качестве или сжатии.

import pyautogui

region_of_screen = (0, 0, 300, 300) # Вы можете изменить область экрана, которую хотите отслеживать, здесь

croppedscreen = pyautogui.screenshot(region=region_of_screen).save('./screen1.png') # Вы также можете использовать `pyautogui.screenshot()` без `region`, чтобы захватить весь экран

while True: # Цикл while для постоянной проверки

    croppedscreen2 = pyautogui.screenshot(region=region_of_screen) # Сделайте второй снимок экрана
    croppedscreen2.save('./screen2.png') # Сохраните второй снимок экрана

    if open("screen1.png","rb").read() == open("screen2.png","rb").read(): # Сравните значения пикселей обоих изображений
        print('Нет обнаруженных изменений')
    else:
        print('Обнаружены изменения!')

    croppedscreen = croppedscreen2 # Поскольку мы обнаруживаем изменения между каждым снимком экрана, мы можем сэкономить ресурсы, используя второй снимок в качестве первого и делая новый снимок для сравнения с ним.
    croppedscreen.save('screen1.png')

Ответ или решение

Чтобы обнаружить изменения на экране части экрана с помощью Python, вы можете воспользоваться сторонними библиотеками, такими как Pillow и mss. В этой статье я подробно расскажу, как реализовать эту задачу, и предоставлю примеры кода для выполнения этой операции.

Требуемые библиотеки

Для начала вам нужно установить следующие библиотеки:

  1. Pillow (для обработки изображений)
  2. mss (для захвата экранов)

Вы можете установить их с помощью следующей команды:

pip install pillow mss

Пример кода

Ниже представлен пример кода, который позволит вам проверять изменения в определенной области экрана.

import mss
import numpy as np
import time

# Установите область экрана, которую нужно захватить (например, 100x100 пикселей в верхнем левом углу)
monitor = {"top": 0, "left": 0, "width": 100, "height": 100}

# Используем mss для захвата экранов
with mss.mss() as sct:
    # Захватываем начальный снимок экрана
    previous_screenshot = np.array(sct.grab(monitor))

    while True:
        # Захватываем текущий снимок экрана
        current_screenshot = np.array(sct.grab(monitor))

        # Сравниваем текущий и предыдущий снимок экрана
        if not np.array_equal(current_screenshot, previous_screenshot):
            print("Обнаружено изменение в области экрана!")
            # Здесь вы можете добавить другие действия, например вызов события
            # Обновляем предыдущий снимок экрана
            previous_screenshot = current_screenshot

        # Ожидание 1 секунды перед следующим проверкой
        time.sleep(1)

Объяснение:

  1. Захват области экрана: Используйте mss для того, чтобы захватить определённую часть экрана (например, область 100×100 пикселей).
  2. Сравнение изображений: Используйте numpy для сравнения снимков экрана и выявления изменений.
  3. Действия при обнаружении изменений: Если обнаруживаются изменения, выполняйте нужные действия (например, вывод сообщения на экран).

Вы также можете изменить размер области экрана и интервал времени в зависимости от ваших потребностей.

Альтернативный подход с использованием pyautogui

Вы также можете использовать библиотеку pyautogui для захвата экранов и проверки изменений. Вот пример для этого подхода:

import pyautogui
import time

region_of_screen = (0, 0, 300, 300)  # Укажите область экрана для мониторинга

# Сохраните первый снимок экрана
pyautogui.screenshot(region=region_of_screen).save('./screen1.png')

while True:  # Бесконечный цикл для постоянной проверки
    # Захват второго снимка экрана
    pyautogui.screenshot(region=region_of_screen).save('./screen2.png')

    # Сравните значения пикселей обоих изображений
    if open("screen1.png", "rb").read() == open("screen2.png", "rb").read():
        print('Изменений не обнаружено')
    else:
        print('Обнаружены изменения!')

    # Обновляем первый снимок экрана
    open("screen2.png", "rb").read()
    pyautogui.screenshot(region=region_of_screen).save('screen1.png')

    # Небольшая задержка перед следующей проверкой
    time.sleep(1)

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...