Помогите с зацикливанием части кода

В общем, делаю бота для школьного проекта для игры. Бот должен увидеть объект, получить его координаты и пойти к объекту. Но что-то пошло не так. Помогите, проблема в первом действии бота ('a')

import cv2
import pyautogui as py
import numpy as np
import time
import pyscreenshot as ImageGrab

time.sleep(5)

#-------------------------------ВСЕ--ОК------Ищем обект--------------------------

position = cv2.imread('rf.png')
print(type(position), position.shape)

cat_hsv = cv2.cvtColor(position, cv2.COLOR_BGR2HSV)
red_low = (0,125,0)
red_high = (8,255,255)
red_hsv = cv2.inRange(cat_hsv, red_low, red_high)

#-------------------------Получаем-X-точки-------------------------------

moments = cv2.moments(red_hsv, 1)  # получим моменты
x_moment = moments['m01']
y_moment = moments['m10']
area = moments['m00']
x = int(x_moment / area)  # Получим координаты x,y обекта

#------------------Действия-бота----------------------------------------

py.keyDown('w') #только вперед
mid=512 # ориентир пикселей экрана по х

while True:   #цикл, пока точки не совместятся
   a1 = (py.position()) #движение left
   a = a1[1]
   if mid > a:
       py.keyDown('a') #//////ЗАЦИКЛИВАЕТ!!!!!!!!!//////////
       if mid==a:
           py.keyUp('a')
           break

while True:
   d1 = (py.position()) #движение right
   d = d1[1]
   if mid < d:
       py.keyDown('d')
       if mid==d:
           py.keyUp('d')
           break

while True:
   if red_low and red_high == None:
       py.moveTo(300, None)
       if cat_hsv == cv2.cvtColor(position, cv2.COLOR_BGR2HSV):
           break  

Ответы (1 шт):

Автор решения: Alex Alex

Замените if mid==a: на if mid<=a: Видимо нажатие клавиши сдвигает курсор не по одному пикселю, а сразу по несколько. И точное равенство никогда не происходит, отсюда и зацикливание.

→ Ссылка