Problème avec scan OCR sur VM en pyton

damien.320i Messages postés 1 Date d'inscription vendredi 7 juillet 2023 Statut Membre Dernière intervention 7 juillet 2023 - 7 juil. 2023 à 12:13
Diablo76 Messages postés 161 Date d'inscription vendredi 25 novembre 2022 Statut Membre Dernière intervention 1 mai 2024 - 7 juil. 2023 à 15:03

Bonjour,
Je vous expose mon problème :
J'ai fais un programme en Python qui fais un scan OCR et qui clique à l'endroit ou il trouve l'image que je cherche. Ce code fonctionne parfaitement bien sur mon pc sous windows 10 mais ne fonctionne pas sur ma VM et je ne comprend pas pourquoi.
Voici la base du code :

import time
import os
import random
from pymemuc import PyMemuc
import pyautogui
import pyperclip
import cv2
 
def save_screenshot(file_path):
    screen_shot = pyautogui.screenshot()
    screen_shot.save(file_path)
 
def find_word_coordinates(image_path, word):
    image = cv2.imread(image_path)
    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    template = cv2.imread(f'C:\\Users\\Damien\\Pictures\\bouton_{num_bouton}.png', 0)
    width, height = template.shape[::-1]
 
    result = cv2.matchTemplate(gray_image, template, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
 
    if max_val > 0.8:
        x, y = max_loc
        return x + width / 2, y + height / 2
    else:
        return None
 
screenshot_file = 'C:\\Users\\'+ username +'\\Pictures\\screenshot.png'
save_screenshot(screenshot_file)
 
screenshot_file = 'C:\\Users\\'+ username +'\\Pictures\\screenshot.png'
    save_screenshot(screenshot_file)
    num_bouton = num_bouton + 1 #1
    word = 'bouton_1'
    coordinates = find_word_coordinates(screenshot_file, word)
    if coordinates is not None:
        pyautogui.click(coordinates[0], coordinates[1])
        time.sleep(5)
    else:
        print(f"'{word}' n'a pas été trouvé dans l'image.")
        time.sleep(5)
 
screenshot_file = 'C:\\Users\\'+ username +'\\Pictures\\screenshot.png'
    save_screenshot(screenshot_file)
    num_bouton = num_bouton + 1 #2
    word = 'bouton_2'
    coordinates = find_word_coordinates(screenshot_file, word)
    if coordinates is not None:
        pyautogui.click(coordinates[0], coordinates[1])
        time.sleep(5)
    else:
        print(f"'{word}' n'a pas été trouvé dans l'image.")
        time.sleep(5)

Cette partie la du code se répète donc plusieurs fois en rajoutant +1 à la variable "num_bouton" pour tomber à chaque fois sur l'image suivante (dans mon dossier C/users/damien/pictures les images sont appelés "bouton_1.png", "bouton_2.png", "bouton_3.png", etc.....

La ou je me questionne c'est que ce code fonctionne parfaitement sur mon pc, mais si j'essaye de l'exécuter sur une machine virtuelle (sous w10 22h2), le premier bouton fonctionne, mais ensuite le programme va sur la partie "else" des boucles "if coordinates" ce qui me renvoie "{word}' n'a pas été trouvé dans l'image." ('{word}' étant le numéro du bouton).

J'ai donc l'impression qu'il ne les trouve pas sur les screen qu'il fais, alors qu'après avoir vérifier manuellement les screens, les boutons sont bien présent mais le scan OCR ne les détectent visiblement pas, alors qu'il détecte bien le premier bouton et que sur mon windows physique je n'est aucune problème le programme s'éxecute en entier sans entrer dans aucune boucle "else".

Merci pour votre lecture et merci d'avance si vous me trouvez une solution ! 

A voir également:

1 réponse

Diablo76 Messages postés 161 Date d'inscription vendredi 25 novembre 2022 Statut Membre Dernière intervention 1 mai 2024 41
7 juil. 2023 à 15:03

Salut,

Quel est l'intérêt de tester ce script dans une VM avec le même OS ?

Sinon, je l'ai testé sur Mac et Linux, il fonctionne…

0