Explicaré tomando como ejemplo la GUI de la aplicación Calculadora en Windows. Dada esta aplicación de Calculadora abierta y enfocada, necesito encontrar una manera de detectar todos los botones. Solo puedo usar métodos no intrusivos, por lo que cosas como la identificación del botón están fuera de discusión. Esto me lleva al reconocimiento de imágenes. O mejor decir detección de imágenes, porque no quiero una imagen específica, sino un conjunto de imágenes que siguen un cierto patrón. Sé cómo puedo hacer clic / clic derecho / dbl-clic / etc. usando una imagen de botón y reconocimiento de imagen [1]. No sé cómo puedo hacer al revés: escanee la GUI y encuentre aquellas áreas que cumplan con los requisitos de ser un botón (rectángulo, texto / icono / gráfico etiquetado, etc.). Un abordaje más grande sería detectar elementos que no tienen la forma del rectángulo (por ejemplo, iconos en un escritorio de Windows)
Lo más parecido a lo que necesito es detectar caras en una imagen. [2] Pero no sé cómo aplicar esto en mi caso. Para la detección de rostros humanos, vi que se deben usar cientos de imágenes de la cara en la generación en cascada de Haar (no sé cómo haría esto con solo 10-15 instantáneas de botones). Si se debe detectar otro tipo de objeto como una manzana, debe generar una cascada Haar para ese objeto nuevamente utilizando muchas imágenes.
¿Alguno de ustedes alguna vez trató de detectar botones, elementos o lo que sea en una GUI utilizando solo la detección de patrones? Solo necesito algo que me diga "este es un ícono / botón" para poder tomar esa región en una instantánea.
[1] Uso SikuliX con Python para realizar acciones en patrones dados.
[2] Vi que esto se hace fácilmente usando cascadas OpenCV y Haar (en formato XML). Crear las cacadas de Haar requiere un poco de paciencia y habilidades.
fuente
Después de reformular mi pregunta, obtuve la respuesta que estaba buscando. Ese es otro ejemplo de que debe saber qué pedir para recibir lo que necesita. Aquí está la página: ¿Cómo puedo detectar elementos de GUI usando opencv? ¡Gracias por la ayuda!
fuente