Задать вопрос
@dadsaqwe

Как ускорить сканирование python?

В общем ChatGpt сделал такой код, вроде все работает но работает очень долго сканирует, иногда может сканировать и 3 секунды и 5 секунд, суть скрипта-Он должен протыкивать определенную клавишу и если при протыкивание определенной клавиши она загорается оранжевым то она должна удерживать в течение одной секунды
import keyboard
import time
import numpy as np
import mss
import cv2

# Определяем пороговые значения цветового диапазона для оранжевого
ORANGE_LOWER = np.array([255, 160, 1])  # Минимальные значения в BGR
ORANGE_UPPER = np.array([255, 180, 3])  # Максимальные значения в BGR

# Клавиши для поочередного нажатия
keys = ['s', 'w', 'q', 'r', 'b', 'h', 'e', 'd', 'shift', 'space', 'up', 'left', 'down', 'right']
current_key_index = 0

# Функция для захвата экрана и проверки наличия оранжевого цвета
def check_orange_color():
    with mss.mss() as sct:
        monitor = {"top": 0, "left": 0, "width": 800, "height": 600}
        img = sct.grab(monitor)
        img_np = np.array(img)
        img_np = cv2.cvtColor(img_np, cv2.COLOR_BGRA2BGR)
        hsv_image = cv2.cvtColor(img_np, cv2.COLOR_BGR2HSV)
        mask = cv2.inRange(hsv_image, ORANGE_LOWER, ORANGE_UPPER)
        return cv2.countNonZero(mask) > 0

def main():
    global current_key_index

    while True:
        current_key = keys[current_key_index]

        # Нажимаем клавишу
        keyboard.press(current_key)
        print(f"Зажата клавиша: {current_key}")

        # Проверка на наличие оранжевого цвета
        while True:
            if check_orange_color():
                print(f"Оранжевый цвет обнаружен! Продолжаем зажимать '{current_key}'")
                break  # Выходим из цикла, когда оранжевый цвет обнаружен
            time.sleep(0.05)  # Проверяем цвет каждые 100 мс

        # Отпускаем клавишу
        keyboard.release(current_key)
        print(f"Клавиша '{current_key}' отпущена")

        # Переход к следующей клавише
        current_key_index = (current_key_index + 1) % len(keys)
        time.sleep(0.05)  # Задержка перед переключением

if __name__ == "__main__":
    main()
  • Вопрос задан
  • 194 просмотра
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
Mike_Ro
@Mike_Ro Куратор тега Python
Python, JS, WordPress, SEO, Bots, Adversting
Как варианты:
1. Обязательно ли искать оранжевый индикатор во всей области изображения, а не в одном ожидаемом месте?
2. mss.mss() - обязательно ли каждую итерацию захватывать экран заново?
3. Преобразование в hsv точно нужно?
4. time.sleep(0.05) # Проверяем цвет каждые 100 мс - что то не клеится в Ваших показаниях, на основание чего указано 50мс?

Короче, профилировщик в зубы и бегом искать узкие места самостоятельно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы