IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème d'utlisation de boolen sur une classe [Python 3.X]


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2021
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2021
    Messages : 58
    Points : 52
    Points
    52
    Par défaut Problème d'utlisation de boolen sur une classe
    Bonjour tous le monde,

    Je rencontre un problème sur l'utilisation de boolean sur une classe de str. Je dois comparer des images présents sur un dossier à un image initiale. La réponse retourné par le variable results est une liste. C'est là que j'ai des problèmes. J'ai essayé de la transformé en string pour comparer. Mais je obtiens des valeurs fausses. Pouvez - vous me dire où se trouve mes fautes ? Par exemple j'ai mis le image initiale dans le dossier, j'ai fait tourné le programme. Mais il n'indique 4 alors que je dois obtenir 1.

    Je vous remercie

    Tuba uba
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    nom_de_tri1 = str(input("Entrer le nom de fichier a traite"))
    photo_ini = str(input("Entrer la place  de fichier a comparer"))
     
    def visage_connue(dossier_1):
        visage_1 = []
        for nomfichier in os.listdir(dossier_1):
            #print(nomfichier)
            fichier_traitement = dossier_1+str("/")+str(nomfichier)
            try:
                image = face_recognition.load_image_file(fichier_traitement)
            except OSError:
     
                print("presence de dossier")
            else :
                encodage = face_recognition.face_encodings(image)[0]
                visage_1.append(encodage)
                print(visage_1)
        return visage_1
     
    a1 = comparaison_2(photo_ini, nom_de_tri2)

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par tuba uba Voir le message
    J'ai essayé de la transformé en string pour comparer. Mais je obtiens des valeurs fausses. Pouvez - vous me dire où se trouve mes fautes ?
    Sans montrer pas le code correspondant difficile de dire où ça pêche.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par tuba uba Voir le message
    La réponse retourné par le variable results est une liste.
    Tu as remarqué que le code que tu nous as posté ne contient nulle part de variable "results" ???

    Citation Envoyé par tuba uba Voir le message
    C'est là que j'ai des problèmes. J'ai essayé de la transformé en string pour comparer.
    Hum, déjà convertir une liste (ex [1, 2, 3]) en string donnera "[1, 2, 3]". Je ne vois pas ce que ça t'apportera, au contraire tu perds les valeurs de ta liste.
    Mais tu peux préciser plus en détail ce que tu veux comparer à ta liste ??? Et donc comment toi tu conçois la possibilité de comparer une liste avec quoi que ce soit???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2021
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2021
    Messages : 58
    Points : 52
    Points
    52
    Par défaut
    Excusez moi ,je me suis trompé de code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    nom_de_tri1 = str(input("Entrer le nom de fichier a traite"))
    photo_ini = str(input("Entrer la place  de fichier a comparer")
     
    def comparaison_2(visage_1, visage_2):
        A1 = 0;
        for nomfichier in os.listdir(visage_2):
            print(nomfichier)
            fichier_traitement = visage_2+str("/")+str(nomfichier)
            try:
                image = face_recognition.load_image_file(fichier_traitement)
                image_ini= face_recognition.load_image_file(visage_1)
                print("image 1")
            except OSError:
                print("presence de dossier")
            else:
                encodage = face_recognition.face_encodings(image)[0]
                encodage_photo_ini = face_recognition.face_encodings(image1_ini)[0]
                results = face_recognition.compare_faces([encodage1],encodage_photo_ini )
                print(encodage)
                print("//////////////////////////////////////")
                print((str(results[0])))
                if (str(results[0]).__eq__(True)):
                    print("presence de photo")
                    A1 = A1+1
                    print(A1)
    a1 = comparaison_2(photo_ini, nom_de_tri2)
    Comment je conçois le code. Je entre en paramètre le path de fichier qui contient le photo initial et la path de fichier à comparer. A chaque fois qu'il y a ressemblance, je compte avec un compteur. La variable results donne des résultats en list. Je voudrais transformé en string pour utiliser avec le if. J'ai déjà de utiliser directement le if comme celui-ci results[0] == True. J'ai rencontré une erreur de numpy.bool_

  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut !

    Là : visage_2+str("/")+str(nomfichier) ça ne sert à rien d'utiliser str() ce sont déjà des strings.

    Tu veux faire quoi là : str(results[0]).__eq__(True) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'TOTO'.__eq__(True)
    NotImplemented
    'TOTO'.__eq__('TOTO')
    True
    'TOTO'.__eq__('FOTO')
    False
    Mieux vaut utiliser les opérateurs == classiques, non ?

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Mieux vaut utiliser les opérateurs == classiques, non ?
    Hé bien non. D'une part parce que sous Python2, les valeurs True et False sont des variables globales qu'on peut modifier si on le désire (hé oui, amuse-toi à écrire True=0 et bye bye ton code et sa logique )
    Ok ça a été rectifié sous P3 (heureusement) mais il y a aussi le fait que certaines valeurs sont "assimilées" à True sans l'être réellement
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> print("ok" if 5 == True else "bad")
    bad

    C'est dû au fait que "True" n'est pas une notion virtuelle valant "vrai", c'est juste un objet concret dont la valeur, là aussi concrète, vaut 1
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> True.numerator
    1
    >>> True.denominator
    1
    >>> True.real
    1
    >>> True + True
    2

    Donc pour les booléens, on les teste tout simplement sans se poser de question
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> print("ok" if 5 else "bad")
    ok

    Dans le cas présent, ce sera simplement if results[0] (sous réserve que results[0] contienne les bons résultats bien évidemment).

    PS: je crois qu'il y a un tuto qui en parle quelque part sur ce forum...

    Et pour fichier_traitement, effectivement on n'a pas besoin de caster la string "/" en string mais autant faire les choses bien => fichier_traitement = os.path.join(visage_2, nomfichier) (et encore, je ne suis pas passé par pathlib parce que je ne la maitrise pas encore très bien )
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Citation Envoyé par Sve@r Voir le message
    (et encore, je ne suis pas passé par pathlib parce que je ne la maitrise pas encore très bien )
    Avec Pathlib:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    p = Path('mon_rép')
    for nomfichier in p.iterdir():
        print("nomfichier")
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2021
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2021
    Messages : 58
    Points : 52
    Points
    52
    Par défaut
    Rebonjour

    j'ai fait les modifications suivantes mais je rencontre un autre problème. C'est à dire qu'il y a qu'un seule photo. Mais mon compteur m'indique 4. Je ne comprend toujours pas où se trouve mon erreur. Après je n'ai pas fais les modifications que vous m'avez suggérées. Je souhaite régler ce problème puis revenir sur vos conseils.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    def comparaison_2(visage_1, visage_2):
        A1 = 0;
        for nomfichier in os.listdir(visage_2):
            print(nomfichier)
            fichier_traitement = visage_2+str("/")+str(nomfichier)
            try:
                image = face_recognition.load_image_file(fichier_traitement)
                image1 = face_recognition.load_image_file(visage_1)
                print("image 1")
            except OSError:
                print("presence de dossier")
            else:
                encodage = face_recognition.face_encodings(image)[0]
                encodage_photo_ini = face_recognition.face_encodings(image1)[0]
                results = face_recognition.compare_faces([encodage_photo_ini],encodage )
                print("//////////////////////////////////////")
                print(((results[0])))
                a = results[0]
                if (bool(a).__eq__(True)):
                    print("presence de photo")
                    A1 = A1+1
                    print(A1)

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par tuba uba Voir le message
    Mais mon compteur m'indique 4. Je ne comprend toujours pas où se trouve mon erreur.
    Quel compteur? Si c'est le contenu de la variable A1, il faut avoir traité au moins 4 fichiers pour que la ligne 22 soit exécutée. Si c'est autre chose, il faudrait apprendre à être plus précis ou fournir un code complet qui permette de reproduire ce que vous constatez (pas facile avec des fichiers et des bibliothèques externes).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tuba uba Voir le message
    Après je n'ai pas fais les modifications que vous m'avez suggérées.
    Un peu dommage vu que ces modifications étaient suggérées justement pour éliminer certains problèmes (et en prog, c'est souvent la cascade tel problème 1 qui entraine problème 2 etc)...

    Citation Envoyé par tuba uba Voir le message
    Je souhaite régler ce problème puis revenir sur vos conseils.
    Fais comme tu le sens.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2021
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2021
    Messages : 58
    Points : 52
    Points
    52
    Par défaut
    Je vous remercie pour votre aide. J'ai pu résolu le problème.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de mapping sur une classe externe
    Par jean-pierre96 dans le forum Hibernate
    Réponses: 2
    Dernier message: 04/08/2010, 16h51
  2. Réponses: 3
    Dernier message: 03/03/2010, 11h48
  3. Problème d'ordre sur une classe et un xml
    Par gwenhadu75 dans le forum ActionScript 3
    Réponses: 4
    Dernier message: 10/02/2010, 16h03
  4. Problème lors d'un Update sur une date
    Par Nany dans le forum ASP
    Réponses: 3
    Dernier message: 19/05/2004, 22h37
  5. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 14h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo