Partage
  • Partager sur Facebook
  • Partager sur Twitter

Retour d' informations alléatoire

Fonction renvoyant des données parfois erronées

    20 novembre 2019 à 7:31:02

    Bonjour,

    Dans mon script, une partie du code récupère le temps d' exposition d' une photo sous la forme d' une fraction. Ce bout de code fonctionne bien mais parfois, me ramène des données complètement farfelues. Ce problème surgit d' une manière vraiment aléatoire. Parfois au début de l' utilisation parfois à la fin et même, au milieu de d' une séance de classement des photos. Voici un petit tableau des erreurs constatées:

    4/813>1/200
    4/861>1/200
    1/362>1/400
    2/609>1/320
    8/861>1/100
    7/977>1/125

    La première colonne représente le retour du script. la deuxième le retour d' exif( lancé depuis un terminal sous linux).

    Je vous joins le bout de code concerné:

    # Temps d' exposition
        x = Fraction(duree_exposition).limit_denominator(1000)
        nmr = x.numerator
        dnm = x.denominator
        resultat = '%s/%s' % (nmr, dnm)

    avec:

    duree_expositionetant la valeur récupéré dans les données exif contenu dans la photo.

    resultat étant la présentation tel quel doit-être pour le temps d' exposition.

    Sauriez-vous me dire pourquoi j' ai ce type d' erreur.

    Cordialement

    • Partager sur Facebook
    • Partager sur Twitter
      20 novembre 2019 à 9:16:35

      Peut être à cause de la représentation binaire du type float qui cause des arrondis bizarres :

      >>> from fractions import Fraction
      >>> a = 1 / 200
      >>> Fraction(a)
      Fraction(5764607523034235, 1152921504606846976)
      


      Si tu as la possibilité de ne pas passer par le type float ça serait l'idéal.

      Ça dépend de comment tu extrait les exif.

      -
      Edité par thelinekioubeur 20 novembre 2019 à 9:16:52

      • Partager sur Facebook
      • Partager sur Twitter
        20 novembre 2019 à 13:55:54

        Bonjour,

        Voici le bout de code qui récupère l' information.

        duree_exposition = e.get_tag('ExposureTime', chemincompletphoto)


        Cette ligne est place dans :

        with ExifTool() as e:

        qui me permet de récupérer une dizaine de tags différents.

        Pourrait-il s' agir d' un problème de pile?

        Cordialement

        • Partager sur Facebook
        • Partager sur Twitter
          20 novembre 2019 à 17:49:34

          Bonsoir,

          Mais connaissance en python sont trop partielles pour que je puisse vous répondre. Je me suis lancé dans python simplement parce que j' utilise LibreOffice Base et que le basic ne me permettait pas de récupérer les données Exif aussi aisément. De plus, c' est un langage relativement facile à appréhender même s' il demande beaucoup plus de rigueur dans le code.

          Cordialement

          • Partager sur Facebook
          • Partager sur Twitter
            21 novembre 2019 à 7:44:03

            Pourquoi dis tu que tu ne peux pas répondre ?

            Tu as quoi comme import en début de code ?

            • Partager sur Facebook
            • Partager sur Twitter
              24 novembre 2019 à 11:17:08

              Bonjour,

              Je n' avais pas compris le sens de la question. Je joins les imports en début de programme:

              from uno import *
              from sys import *
              from exiftool import *
              from os import chdir
              from datetime import datetime
              from fractions import Fraction
              import csv

              Bonne journée

              • Partager sur Facebook
              • Partager sur Twitter
                25 novembre 2019 à 6:54:49

                Il faut éviter les "import *", surtout plusieurs fois dans un même code, tu risque d'écraser des variables et d'avoir un comportement inattendu.

                Sinon pour ton problème il semble que ce soit un défaut du module exiftool.

                En effet, celui ci appelle le le programme exiftool avec l'option -n.

                Voici un extrait du fichier exiftool.py, ligne 171 à 175 :

                            self._process = subprocess.Popen(
                                [self.executable, "-stay_open", "True",  "-@", "-",
                                 "-common_args", "-G", "-n"],
                                stdin=subprocess.PIPE, stdout=subprocess.PIPE,
                                stderr=devnull)


                Bref si tu édite le fichier pour virer le "-n" tu devrais avoir ce que tu veux :magicien:

                • Partager sur Facebook
                • Partager sur Twitter
                  27 novembre 2019 à 19:52:38

                  Bonsoir,

                  Je vais regarder ce fichier. Toutefois, ce fichier est un fichier connu et officiel. Je vais le modifier et vous donnerez le résultat.

                  Bonne soirée

                  Re-bonsoir,

                  Après avoir modifié et testé le fichier, j' ai toujours le même problème. De plus, je n' arrivai plus à récupérer le modèle d' objectif utilisé. Aussi, j' ai remis dans l' état d' origine pour l' instant.

                  Cordialement

                  -
                  Edité par El_Catala 28 novembre 2019 à 18:03:03

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Retour d' informations alléatoire

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown