Page 1 sur 1

Lancement de script externes

Posté : sam. 16 avr. 2016 12:54
par vague nerd
Bonjour.

Cette commande imagemagik fonctionne sous bash :

Code : Tout sélectionner

convert shots/20160414-143306.jpeg shots/20160414-143312.jpeg -crop 100x100+0+0 +repage miff:- | compare -metric AE -fuzz 5% - null:
Je n'arrive pas à l'exécuter et récupérer les flux de sortie standard et sortie d'erreur en python 2.7, surement à cause du pipe.

Pour résoudre le problème par contournement, j'ai créé le script bash suivant :

Code : Tout sélectionner

#!/bin/bash
convert $1 $2 -crop $3 +repage miff:- | compare -metric AE -fuzz $4 - null:
que j'appelle en python :

Code : Tout sélectionner

p=subprocess.Popen(["bash","cropAndCompare.sh",filename1,filename2,"100x100+0+0",fuzz],stderr=subprocess.PIPE,stdout=subprocess.PIPE)
diffSize = int(p.stderr.readline().strip(' \t\n\r\f'))
Ca marche, mais c'est lent... le Popen + bash doivent coûter cher.
Quelqu'un saurait-il me proposer un code python plus optimisé ?

Cdt.

Re: Lancement de script externes

Posté : sam. 16 avr. 2016 13:13
par vague nerd
Pour le contexte général, cet appel s'inclue dans un algo qui sert à :
-Soit les deux premières images en 300 pixels par 300 pixels
-Définir dans quel 1/9eme de l'image (découpage statique, voir image 3) se trouve le plus de différences (le 3eme 1/9eme, voir image 4)?
Image Image Image Image
Désolé pour la qualité des images de départ, c'était pour tester en conditions dégradées.
L'algo devant être appelé en boucle, il faut que j'optimise un minimum !
Cdt.

Re: Lancement de script externes

Posté : sam. 16 avr. 2016 15:13
par Alastor 2262
Bonjour,

Ma réponse est peut-être bête mais... pourquoi ne fais-tu pas tout en python ?

Avec un coup de google on trouve des library pour ce genre de chose, un exmple parmi plein d'autre :

http://www.florianpaquet.com/blog/detec ... et-opencv/

Mais je dis ça, je dis rien.

Re: Lancement de script externes

Posté : sam. 16 avr. 2016 15:43
par vague nerd
Bonjour et merci pour ta réponse.
Ma réponse est peut-être bête mais... pourquoi ne fais-tu pas tout en python ?
Je ne connais que très peu python. Mes recherches google m'on conduit à imageMagik, mais sans idée préconçue.
Il s'agit d'utiliser les librairies libcv2.3, libcv-dev, manipulées en python au travers de python-opencv.
Je n'ai pas l'impression que ca change grand chose avec le couple imagesMagik/python.... Je me trompe ?
Au final, je ferai surement du Motion de toute façon.

Sinon, pour reformuler ma question : comment coder en python l'appel de la commande suivante (incluant un pipe ('|')),
tout en récupérant tout de même la sortie standard/erreur ?

Code : Tout sélectionner

convert shots/20160414-143306.jpeg shots/20160414-143312.jpeg -crop 100x100+0+0 +repage miff:- | compare -metric AE -fuzz 5% - null:
Cdt.