Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/10/2011, à 00:04

sputnick

[résolu] python - trouver les coordonnées d'une image dans une autre

Salut,

comment peut-on ( un peu comme sikuli ) chercher dans une image une partie de cette image, de préférence en tache de fond sans avoir à ouvrir de GUI ? (Graphic User Interface)

En l’occurrence, il s'agit de retrouver les coordonnées du 6 (par exemple) dans

vYXZ4dg.png

Difficulté : le chiffre 6 n'est pas tout à fait le même dans ce deuxième exemple

http://ompldr.org/vYXc4ag.png

il est décalé dans sa hauteur de 1 px par rapport au fond bleu.


Si vous avez même ne serais-ce qu'une piste, explorons là smile

++sputnick;

Edit : mes pistes :
- opencv problème : le binding python n'est plus maintenu et ne compile pas hmm http://code.google.com/p/pyopencv/issues/detail?id=46
- xpresser problème, dépend de opencv
- le plus pertinent dans mes recherches est le terme template matching ( utilisé par sikuli )

Dernière modification par sputnick (Le 24/10/2011, à 16:46)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#2 Le 21/10/2011, à 08:49

moths-art

Re : [résolu] python - trouver les coordonnées d'une image dans une autre

Je pense que du moment ou ça s'arrête à ton exemple, opencv s'apparente à un tank pour tuer une mouche.
Le mieux si tu es en python est d'utiliser les données binaires de ton image.

En effet, la zone rectangulaire qui entoure le 6 (pas le bouton en entier) est exactement le même sur les 2 images.
Il suffit alors d'identifier cette zone qui va te donner une chaine binaire puis la "matcher" sur les autres images afin d'identifier ces coordonnées.

Un conseil par avance sur ce type de projet : crée toi directement le maximum de tests fonctionnels afin de valider ton code... ça peut paraitre rébarbatif au premier abord mais tu vas vite te rendre compte du côté pernicieux de ce type de projet.(il suffit de jeter un coup d'oeil sur les tests effectués sur opencv pour s'en convaincre.)

Un conseil : utilise le très bon logiciel "hachoir" (pour l'identification de la chaine binaire) :

sudo apt-get install python-hachoir-wx

En te plongeant dans le code (en python également), tu trouveras certainement des pistes pour ton code :
https://bitbucket.org/haypo/hachoir/overview

Hors ligne

#3 Le 21/10/2011, à 16:33

moths-art

Re : [résolu] python - trouver les coordonnées d'une image dans une autre

Si en l'occurrence, tu as réellement un dégradé de couleur bleu autour du 6 différent dans les 2 fichiers... ça devient un peu plus compliqué mais gère plus :

Tu fais les choses par étapes (diviser pour régner) :

1/ tu remplace toutes les couleurs autre que du blanc par du noir (ou une autre couleur)
2/ tu matches la chaine binaire résultante contenant la zone rectangulaire du 6 avec cette fois ci un fond uniforme.
3/ tu récupères tes coordonnés
4/ tu remercies l'équipe de Ubuntu-fr et met [résolu] dans le titre big_smile

Dernière modification par moths-art (Le 21/10/2011, à 16:34)

Hors ligne

#4 Le 24/10/2011, à 16:46

sputnick

Re : [résolu] python - trouver les coordonnées d'une image dans une autre

Merci pour les pistes, l'idée de passer en monochrome est tout à fait pertinente.

Donc j'utilise au final PIL + numpy (arrays) + un peu de math appliquées smile

Ça marche du tonnerre \o/

Je vous montrerais le taf fini si vous le souhaitez, c'est couplé avec du screen-scraping en PyQt4.QtWebKit pour se loguer sur un site wink

Le projet n'est pas fini, même si je trouve les coordonnées, je ne suis pas encore parvenu à me loguer, mais j'y travaille. (résolu quand même par rapport au titre du post)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#5 Le 26/10/2011, à 10:45

sputnick

Re : [résolu] python - trouver les coordonnées d'une image dans une autre

Yopla, comme baptême python j'ai été servi ^^

http://www.sputnick-area.net/scripts/LCL.tar.bz2

Copie des commentaires de debut de script :

LCL-dl-QIF.py permet de récupérer ses mouvements de comptes LCL au format QIF.

  Il permet de remplir la grille de login aléatoire mise en place mi-octobre 2011

  A utiliser à vos risques et périls, LCL pourrait en interdire cet usage.

  Tout retour est le bienvenu (je suis débutant en python, ne pas hésiter à me
  suggérer des améliorations)
  ------------------------------------------------------------------------------
  Merci :
    - spynner : navigateur programmable supportant le javascript et les cookies à base de PyQt4 + webkit
        https://github.com/rndbit/spynner
        http://code.google.com/p/spynner/

    - usage de numpy
        http://stackoverflow.com/questions/3049 … ing-python

    - pistes de recherche
        - PIL
            http://stackoverflow.com/questions/7825 … -image-map
            http://forum.ubuntu-fr.org/viewtopic.php?id=683671
        - PyQt4 + webkit
        http://forum.kubuntu-fr.org/viewtopic.php?id=683651


Cette version ne télécharge pas les QIFs comme annoncé, mais affiche le relevé de compte.
Les QIFs c'est mon prochain kiff, c'est pas la plus dur, le plus dur c'était le traitement de l'image.
J'ai retourné tout le web pour me documenter, et mon challenge de la semaine résolu smile
Si vous êtes intéressés, le code est largement commenté.


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#6 Le 28/10/2011, à 06:49

sputnick

Re : [résolu] python - trouver les coordonnées d'une image dans une autre

Voici la version fonctionnelle qui permet de récupérer les fichiers .QIX sur LCL pour les applis de gestion de finances : http://sputnick-area.net/scripts/LCL-dl-QIF.tar.bz2


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#7 Le 28/10/2011, à 22:44

k3c

Re : [résolu] python - trouver les coordonnées d'une image dans une autre

Merci de partager ton code, c'est toujours instructif et intéressant !k3c


Archlinux sur Xiaomi Air 13

Hors ligne