Как читать здоровье (в игре) с помощью Python - PullRequest
0 голосов
/ 21 января 2019

Я ищу способ, с помощью которого Python может прочитать состояние здоровья в текстовом формате и затем выполнить команду (например, нажатие клавиши).Я смотрел серию от youtuber sentdex: (https://www.youtube.com/playlist?list=PLQVvvaa0QuDeETZEOy4VdocT7TOjfSA8a). Он запрограммировал python для захвата экрана и «чтения» полос движения, чтобы создать автомобиль с самостоятельным вождением. Я хочу основать свою цель с первого разачасть серии, используя numpy, PIL и OpenCV, чтобы захватить мой экран, используя следующий код:

import numpy as np
from PIL import ImageGrab
import cv2
import time



last_time = time.time()
while(True):
    screen =  np.array(ImageGrab.grab(bbox=(0,0, 1360, 768)))
    printscreen_numpy =   np.array(printscreen_pil.getdata(),dtype='uint8')

    print('Loop took {} seconds'.format(time.time()-last_time))
    last_time = time.time()
    cv2.imshow('window', cv2.cvtColor (screen, cv2.COLOR_BGR2RGB))
    if cv2.waitKey(25) & 0xFF == ord('q'):
        cv2.destroyAllWindows()
        break

(код для печати, сколько времени занимает цикл, можно игнорировать)

Однако я понятия не имею, как использовать opencv или PIL для распознавания текста в указанной области моего экрана или что делать после выполнения команды.

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

1 Ответ

0 голосов
/ 21 января 2019

Если область всегда имеет одинаковые координаты на экране, вы можете обрезать ее и обрезать все цифры. Цифры должны быть очень точными. Если вы хотите читать только цифры (0-9), вы можете использовать, например, алгоритм сопоставления шаблонов. Для этого алгоритма цифры должны выглядеть одинаково на каждом кадре. https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_template_matching/py_template_matching.html Вы должны создать эталонное изображение для всех цифр и просто найти его на кадрированном изображении.

Второе решение: вы можете использовать opencv + tesseract (который включает в себя высокоточную модель глубокого обучения для распознавания текста). https://www.pyimagesearch.com/2018/09/17/opencv-ocr-and-text-recognition-with-tesseract/

Другие решения - получить форму цифр (или букв) с порогом, цветовым диапазоном в цветовом пространстве HSV (если цифры всегда имеют один и тот же цвет) или каким-либо другим алгоритмом. Затем каждую цифру можно разделить на семь сегментов (https://en.wikipedia.org/wiki/Seven-segment_display).. Затем проверьте каждую цифру, если эти сегменты пусты или заполнены. Этот алгоритм основан на учебнике по pyImageSearch (https://www.pyimagesearch.com/2017/02/13/recognizing-digits-with-opencv-and-python/)

...