Saltar a contenido

Visión por Computadora

Utilizando los métodos a continuación, podrás utilizar la visión por computadora para interactuar con los elementos que aparecen en la pantalla.

Agregar Imagen

Por defecto, las imágenes de los elementos se obtienen de la carpeta resources del proyecto y se agregan al mapa de imágenes. Sin embargo, es posible agregar una imagen que se encuentre en otro directorio en el mapa de imágenes y acceder a ella normalmente a través de la etiqueta definida.

Note

Esta operación no es necesaria para las imágenes que ya se encuentran en la carpeta predeterminada resources del proyecto.

# Agregar una imagen al mapa de imágenes que se encuentra en un directorio específico.
bot.add_image("elemento", "/mi_directorio/imagenes/elemento.png")
// Agregar una imagen al mapa de imágenes que se encuentra en un directorio específico.
addImage("elemento", "/mi_directorio/imagenes/elemento.png");

Obtener Imagen del Mapa

Puedes obtener una imagen específica del mapa de imágenes utilizando una etiqueta definida.

# Obtener la imagen que tiene la etiqueta "elemento".
img = bot.get_image_from_map("elemento")
// Aún no implementado.

Encontrar Elementos

Utilizando los métodos de búsqueda, es posible buscar un elemento en la pantalla utilizando la visión por computadora hasta que ocurra un tiempo de espera. Puedes utilizar el resultado del método de búsqueda para verificar si se encontró un elemento o no, y en base a eso realizar el tratamiento necesario.

# Print if the first_element was NOT found on the screen.
if not bot.find(label="first_element", matching=0.97, waiting_time=10000):
    print("This element was not found.")

# Print if the "second element" was found on the screen.
if bot.find(label="second_element", matching=0.97, waiting_time=10000):
    print("This element was found!")

# Using find_until will have the same effect as using find.
if bot.find_until(label="another_element", matching=0.97, waiting_time=10000):
    print("Found!")
// Print if the first_element was NOT found on the screen.
if(!find("first_element", 0.97, 10000)) {
    System.out.println("This element was not found");
}

// Print if the second_element was found on the screen.
if(find("second_element", 0.97, 10000)) {
    System.out.println("This element was found!");
}

El método find anterior es el más común de usar y básicamente funcionará para todos los casos en los que necesitemos buscar un elemento en la pantalla. Sin embargo, es posible utilizar métodos de búsqueda para situaciones específicas.

Encontrar Texto

# Buscar un elemento que contenga solo texto.
if bot.find_text(label="txt_elemento", matching=0.97, waiting_time=10000):
    print("¡Este texto se encontró en la pantalla!")
// Searching for an element that contains only text.
if(findText("txt_element", 0.97, 10000)){
    System.out.println("This text was found on screen!");
}

Encontrar Todos

Además de realizar operaciones con elementos individuales, también es posible buscar varios elementos diferentes o todas las ocurrencias del mismo elemento.

# Search for all occurrences of the element.
elements = bot.find_all(label="test_element", matching=0.97, waiting_time=10000)

# For each element found, print the coordinates.
for ele in elements:
    print(ele)
// Search for all occurrences of the element.
List<State> elements = findAll("test_element", 0.97, 20000);

// For each element found, print the coordinates.
for(State ele : elements) {
    System.out.println(ele.getX());
    System.out.println(ele.getY());
    System.out.println(ele.getWidth());
    System.out.println(ele.getHeight());
}

Encontrar Múltiples

# List with the elements label.
elements_to_find = ["ele1", "ele2", "ele3", "ele4"]

# Searching for all elements will return a dictionary with the label and coordinates of each one.
elements = bot.find_multiple(labels=elements_to_find, matching=0.97, waiting_time=20000)

print(elements)
// List with the elements label.
List<String> elementsToFind = new ArrayList<String>();
elementsToFind.add("ele1");
elementsToFind.add("ele2");
elementsToFind.add("ele3");
elementsToFind.add("ele4");

// Searching for all elements will return a Map with the label and coordinates of each one.
Map<String, State> elements = findMultiple(elementsToFind, 0.97, 10000);

// Printing the coordinates of the element "ele2".
System.out.println(elements.get("ele2"));

Establecer Elemento Actual

Puedes establecer el elemento actual para realizar operaciones en él. Esto puede ser útil cuando buscamos múltiples elementos pero queremos trabajar con uno específico.

# Search for all occurrences of an element.
elements = bot.find_all(label="button", matching=0.97, waiting_time=10000, as_list=True)

# Setting the second occurrence as the current element.
bot.set_current_element(elements[1])

# Clicking on the defined element.
bot.click()
// Search for all occurrences of an element.
List<State> elements = findAll("button", 0.97, 10000);

// Setting the second occurrence as the current element.
setCurrentElement(elements.get(1));

// Clicking on the defined element.
click();

Obtener Elementos

Puedes obtener información sobre el último elemento encontrado y también las coordenadas de un elemento específico.

Obtener Último Elemento

# Get the last element found on the screen.
last_element = bot.get_last_element()

# Printing the element coords.
print(last_element)
// Get the last element found on the screen.
State lastElement = getLastElement();

// Printing the element coords.
System.out.println(lastElement.getX());
System.out.println(lastElement.getY());
System.out.println(lastElement.getWidth());
System.out.println(lastElement.getHeight());

Obtener Coordenadas del Elemento

# This method will search for the element and return its X and Y.
ele = bot.get_element_coords(label="test_element", matching=0.97)
print(ele)

# This method will search for the element and return its X and Y centered.
element_centered = bot.get_element_coords_centered(label="test_element", matching=0.97)
print(element_centered)
// This method will search for the element and return its X and Y.
Point ele = getElementCoords("test_element", 0.97);
System.out.println(ele);

// This method will search for the element and return its X and Y centered.
Point elementCentered = getElementCoordsCentered("test_element", 0.97);
System.out.println(elementCentered);