Alarcon yves Posté 1 juin 2019 Posté 1 juin 2019 (modifié) Bonjour à toutes et à tous, pour faire tourner sur une "tinker-board", les logiciels comme "oacapture" ou "ccdciel", j'ai était confronté à un petit souci quand j'ai voulus faire un "time-laps", car tout les logiciels d'acquisition ne permettes pas de prendre une pose toutes les x secondes ou minutes avec un temps de pose plus court. Alors n'y une n'y deux, un petit script python à lancer dans un terminal et c'est réglé (attention le script utilise le logiciel "xdotool", donc il faut l’installer au préalable). Le script doit être utilisé avec une option obligatoire, exemple -> timer_souris.py -timer=10 Dans ce cas un clic de souris est généré toute les 10 secondes, à l'endroit ou se trouve le curseur de souris. Une deuxième option non obligatoire, "-force" quand à elle remet systématiquement le curseur de souris à une position précise avant de déclencher un clic. Bien sur, il faut régler le logiciel d'acquisition pour qu'il ne prenne qu'une image à la fois avec un temps plus court que le delai, sinon le script il ne sert à rien. Testé sous "nunux" sur PC et "tinker-board" (en local ou à distance) avec les logiciels et cam suivantes. - "oacapture" et "ccdciel" avec une qhyII-L. - Avec "ccdciel" et "indi" avec un apn. - Avec une veille dmk sur port" Firewire" que se soit avec "Coriander" ou "oacapture", mais seulement sur pc hein, car un port "Firewire" sur une "tinker-board" il n'y a pas, enfin si quelqu'un as une solution je suis preneur. Mais en toute logique, ça doit fonctionner avec n'importe quel softs d'acquisitions et même sur des vidéos. Comme "Oacapture" fait monter la température cpu d'une tinker-board à donf, pour éviter sa mort prématuré par échauffement, faire les 4 commandes suivantes dans un terminal pour limiter les GHz et donc la température du pauvre cpu. sudo cpufreq-set -c 0 -d 0.408GHz -u 1.2GHz sudo cpufreq-set -c 1 -d 0.408GHz -u 1.2GHz sudo cpufreq-set -c 2 -d 0.408GHz -u 1.2GHz sudo cpufreq-set -c 3 -d 0.408GHz -u 1.2GHz Sur une autre machine "arm" que la "tinker-board", pour connaitre les fréquences à utiliser, un petit "cpufreq-info", est votre amis, il faut aussi trouver le moyen de connaitre la température du cpu (gkrllem, certaine version de htop, etc....). Le script impose un temps minimum de 4 secondes entre deux clic, histoire d'avoir le temps d'aller sur la fenêtre du terminal pour arrêter le script, mais rien ne vous empêche de modifier le script pour avoir un délais plus court (mais attention à la crise de nerf, si le délais est trop court hein ). Le petit script (à consommer sans modération) Révélation #!/usr/bin/python3 # -*- coding: utf-8 -*- # timer_souris.py # * # * Copyright 2019 <Alarcon Yves>. # * # * This is free software; you can redistribute it and/or modify # * it under the terms of the GNU General Public License as published by # * the Free Software Foundation; either version 3, or (at your option) # * any later version. # * # * This software is distributed in the hope that it will be useful, # * but WITHOUT ANY WARRANTY; without even the implied warranty of # * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # * GNU General Public License for more details. # * # * You should have received a copy of the GNU General Public License # * along with this software; see the file COPYING. If not, write to # * the Free Software Foundation, Inc., 51 Franklin Street, # * Boston, MA 02110-1301, USA. # */ # # Ce sripte utilise le logiciel xdotool et lance de façon répétitive # un appuis du bouton de la souris dans une fenetre # # pour connaitre la position du bouton ou il faut appuyer # on peut utiliser le logiciel xev # plus nécéssaire car je sais gérer la position de la souris # WID='xdotool search --title "oacapture" | head -1' # xdotool windowfocus $WID # xdotool mousemove 888 681 # xdotool click 1 import sys import time import threading import subprocess # les variables temps = 10 force = 0 x_pos = 0 y_pos = 0 id_fe = 0 # on gerre les arguments du programme def message(i): global temps global force #print (i) if (i[0] == '-'): if ('-h' in i): print ("************************************************************") print ("*** Aide de timer_souris ***") print ("************************************************************") print ("*") print ("*** timer_souris -timer=val [-force] [-h]") print ("*") print ("* La commande indispensable est:") print ("* - \"-timer=val\" -> val est le temps en seconde (mini 4 s)") print ("*") print ("* La commande falcultative \"-force\"") print ("* On force le curseur de souris") print (" à revenir automatique sur la position choisie !") print ("*") print ("* Pour fonctionner, \"timer_souris\" à besoin du logiciel suivant:") print ("* - \"xdotool\" (pour tout le traitement de la souris virtuelle)") print ("************************************************************") exit() # les commandes avec argument if ('=' in i): nb = (i.index('=')) commande = "commande: ", i[:nb] valeur = (i[nb + 1:]) if ('-timer' in commande): temps = int(valeur) if (temps < 4): temps = 4 else: if ('-force' in i): force = 1 else: nom_image = i # on lance la routine de traitement des options if (__name__ == '__main__'): if (len(sys.argv) > 1): i = 1 while (i < len(sys.argv)): message(sys.argv[i]) i += 1 else: print ("\"timer_souris\" doit se lancer avec un argument") print ("Faire \"timer_souris -h\" pour l'aide") exit() # On poursuit le programme def r_inter(): # cette fonction est appelé toutes les secondes par le timer global nb global t global temps global ch_1 global ch_2 global id_fe t += 1 chaine = ' Appuis n°' + str(nb) + ', il reste ' + str(temps - t + 1) + ' / ' + str(temps) + ' avant le prochain clic ! ' print (chaine, end='\r') if (t >= temps): if (id_fe != 0): subprocess.call(ch_1, shell=True) subprocess.call(ch_2, shell=True) subprocess.call('xdotool click 1', shell=True) nb += 1 t = 0 class Periodique(threading.Timer): def __init__(self, interval, callable, args=(), kwargs={}): self.callable = callable threading.Timer.__init__(self, interval, self._f, args, kwargs) def _f(self, *args, **kwargs): Periodique(self.interval, self.callable, args, kwargs).start() self.callable(*args, **kwargs) # affichage en console ch = "" print ("") print ("***********************************************************") print ("** timer_souris **") print ("***********************************************************") print ("* *") print ("* 10 secondes avant le premier clic, *") print ("* placez le curseur de souris, *") print ("* sur le bouton à cliquer ! *") print ("* *") if (force == 1): print ("* Mode \"-force\" choisi, la position est *") print ("* définitivement fixée passé le délai ! *") print ("* *") nb = 9 while (nb > -1): print("* -->",nb,"s",end='\r') time.sleep(1) nb -= 1 if (force == 1): p1 = subprocess.Popen(['xdotool', 'getmouselocation'], stdout = subprocess.PIPE) output = p1.communicate()[0] # on extrait les info de position du curseur caractere = ' ' chaine = str(output) i = 1 for ch in chaine.split(caractere): ch_1 = ch.split(":") if (i == 1): x_pos = int(ch_1[1]) if (i == 2): y_pos = int(ch_1[1]) if (i == 4): ch_2 = ch_1[1].split('\\n') id_fe = int(ch_2[0]) i += 1 p1.stdout.close() print ("* Pour arreter timer_souris *") print ("* appuyer sur la touche \"Entrée\" *") print ("* *") # mise en place des chaines de commande et des variables ch_1 = 'xdotool windowfocus ' + str(id_fe) ch_2 = 'xdotool mousemove ' + str(x_pos) + ' ' + str(y_pos) nb = 1 t = temps # on iniialise t = temps pour activer le premier clic immédiatement duree = 1 t2 = Periodique(duree, r_inter) t2.setDaemon(True) t2.start() a = input() print ("***********************************************************") # fin du programme Pour toute remarque utile ou pas, un petit message dans cette discussion et si je peux je répondrais, mais je ne suis pas un gourou en "python", Voili-voila, c'est tout pour aujourd'hui. Yves. Modifié 1 juin 2019 par Alarcon yves
Messages recommandés