Yo, j'ai réalisé un bot pixel en python il y a quelques semaines pour automatiser mon petit bucheron, donc je peux te filer quelques tuyaux !
Un premier sujet qui m'a pas mal aiguillé :
https://medium.com/@martin.lees/how-i-made-a-python-bot-to-automate-a-tactical-mmorpg-9f6693350d10
Tu y verras entre autres que les librairies pyautogui et opencv-python seront tes grandes copines dans ton aventure pour simuler des clics, prendre un screenshot ou faire du Template Matching (reconnaissance d'image). Je te conseille de commencer petit en testant des méthodes de ces librairies. Par exemple, essaie de reconnaître un arbre et déplacer le curseur dessus ? Ainsi tu comprendras mieux comment ça fonctionne et pourras étoffer ton projet step by step.
Ensuite, on ne peut pas faire du deep learning juste "en répertoriant les actions possibles". Ils te faut aussi des observations, et surtout un moyen de faire tourner des centaines voire milliers d'instances simultanément pour espérer obtenir un résultat potable. Si t'as pas déjà jeté un œil, ceci devrait étoffer ta connaissance du sujet et t'aider à mieux comprendre quelles sont les conditions pour y arriver :
https://deepmind.com/blog/announcements/deepmind-and-blizzard-open-starcraft-ii-ai-research-environment
D'ailleurs si tu sais avoir accès à leur article publié dans Nature c'est une mine d'or !!
Ici, contente toi d'une logique conditionnelle classique ça fera le café pour ta petite application :teeth:
Je t'aurais bien partagé mon code mais il est vraiment répugnant du genre :
def multi_imagesearch(background_image, template_path, precision = 0.8):
""" take a BGR image and the template's path in argument and return
the occurence's locations of the template on this image regarding a certain precision matching """
template_bgr = cv2.imread(template_path)
template_gray = cv2.cvtColor(template_bgr, cv2.COLOR_BGR2GRAY)
background_image_gray = cv2.cvtColor(background_image, cv2.COLOR_BGR2GRAY)
w, h = template_gray.shape[::-1]
res = cv2.matchTemplate(background_image_gray,template_gray,cv2.TM_CCOEFF_NORMED)
threshold = precision
locations = np.where( res >= threshold)
res = []
for pt in zip(*locations[::-1]):
res.append(pt)
i = 1
removeSave = []
for loc in res:
if i < len(res):
if abs(res[0] - loc[0]) < 10 and abs(res[1] - loc[1]) < 10:
removeSave.append(loc)
i += 1
for r in removeSave:
res.remove(r)
return res
Perso je suis en train d'abandonner progressivement la reconnaissance d'image qui m'a montré ses limites (mais m'a été un très bon professeur je dois l'avouer), mais peut être que tes tâches sont suffisamment simples pour t'en contenter ?
Bonne chance pour ton projet !