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'Affichage des Couleurs pour Images PNG/JPG avec VLC sur Raspberry Pi


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2024
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2024
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Problème d'Affichage des Couleurs pour Images PNG/JPG avec VLC sur Raspberry Pi
    Bonjour à tous,

    Je rencontre un problème déconcertant avec un script Python qui utilise VLC pour afficher des images PNG et JPG sur un Raspberry Pi. Le script télécharge des images depuis un serveur S3 et les affiche en boucle. Cependant, les couleurs ne s'affichent pas correctement : ce qui devrait être rouge apparaît comme bleu foncé et vice versa. Curieusement, les vidéos MP4 sont affichées avec les couleurs correctes, ce qui suggère que le problème est spécifique aux images statiques.

    Voici ce que j'ai observé :

    Sur mon PC, les images s'affichent avec les bonnes couleurs.
    Sur le Raspberry Pi, utilisant VLC pour la visualisation, les images affichent les couleurs incorrectes (rouge affiché comme bleu foncé, et bleu affiché comme rouge,...).
    L'inversion de couleurs ne semble pas être corrigée par des manipulations d'image standard, comme l'inversion des canaux rouge et bleu via un script Python utilisant PIL/Pillow.
    Le script fonctionne en bouclant sur un répertoire de médias téléchargés et en les ajoutant à une playlist VLC, qui est ensuite jouée en boucle. J'ai essayé d'inverser les canaux de couleur immédiatement après le téléchargement des images, mais cela n'a pas résolu le problème. J'ai également ajouté des logs pour confirmer que le script modifie bien les images, mais l'affichage des couleurs reste incorrect sur le Raspberry Pi.

    J'utilise un Raspberry Pi 3B+3, avec la version Raspberry Pi OS Legacy 32Bit Lite.

    Voici un extrait simplifié du script qui montre le processus de téléchargement et de traitement des images :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    from watchdog.observers import Observer
    from watchdog.events import FileSystemEventHandler
    import vlc
     
    LOCAL_DIR = os.getenv("LOCAL_DIR", "/home/displex/content")  # Default local directory
     
    def fetch_local_file_list(directory):
        try:
            # Extend to fetch jpg and png files as well
            return [f for f in os.listdir(directory) if f.lower().endswith(('.mp4', '.jpg', '.png'))]
        except Exception as e:
            return []
     
    def update_play_list(media_list, instance, media_files):
        media_list.lock()
        while media_list.count() > 0:
            media_list.remove_index(0)
     
        for media_file in media_files:
            media_path = os.path.join(LOCAL_DIR, media_file)
            if media_file.lower().endswith(('.jpg', '.png')):
     
                media = instance.media_new(media_path)
     
            else:
                media = instance.media_new(media_path)
            media_list.add_media(media)
        media_list.unlock()
     
    class VideoHandler(FileSystemEventHandler):
        def __init__(self, media_list, instance):
            self.media_list = media_list
            self.instance = instance
     
        def on_created(self, event):
            if event.src_path.endswith((".mp4", ".jpg", ".png")):
                update_play_list(self.media_list, self.instance, fetch_local_file_list(LOCAL_DIR))
     
        def on_deleted(self, event):
            if event.src_path.endswith((".mp4", ".jpg", ".png")):
                update_play_list(self.media_list, self.instance, fetch_local_file_list(LOCAL_DIR))
     
    def play_videos():
        instance = vlc.Instance('--no-xlib --aout=alsa --quiet --file-logging --logfile=vlc-log.txt --no-video-title-show --verbose=2')
        media_list = instance.media_list_new()
     
        player = instance.media_list_player_new()
        player.set_media_list(media_list)
        player.set_playback_mode(vlc.PlaybackMode.loop)
     
        media_files = fetch_local_file_list(LOCAL_DIR)
        update_play_list(media_list, instance, media_files)
     
        observer = Observer()
        event_handler = VideoHandler(media_list, instance)
        observer.schedule(event_handler, LOCAL_DIR, recursive=False)
        observer.start()
     
        player.play()  # Start playback

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Ceci:

    Citation Envoyé par Damien6090 Voir le message
    Sur mon PC, les images s'affichent avec les bonnes couleurs.
    Sur le Raspberry Pi, utilisant VLC pour la visualisation, les images affichent les couleurs incorrectes (rouge affiché comme bleu foncé, et bleu affiché comme rouge,...).
    laisse penser que ce n'est pas un problème dans le "logiciel" que vous avez écrit (le "même" code fonctionne bien ailleurs et "mal" ici).... et penche plutôt sur un problème matériel (ou de configuration matérielle).
    A défaut de trouver une solution en cherchant sur Internet, demander de l'aide dans un forum raspberrypi serait plus judicieux (car ne concerne pas (que) les programmeurs python).

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

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 049
    Points : 1 380
    Points
    1 380
    Par défaut
    Et avec autre chose que vlc ?

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    Hello,
    et quand tu charges l'image dans vlc à partir d'une clé USB ?
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    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 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Damien6090 Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if media_file.lower().endswith(('.jpg', '.png')):
    	media = instance.media_new(media_path)
    else:
    	media = instance.media_new(media_path)
    Ce code est-il correct ? Parce que la problématique est un script qui affiche mal les images tandis qu'il affiche bien les vidéos et là on voit un test qui différencie "image" de "pas image" mais qui ne change rien au traitement qui est fait derrière...
    Et si le code est correct, le test n'a pas vraiment de raison d'être et rien que de l'avoir tapé sans même réagir moi ça me hérisse.

    Et puis il serait bon de cibler les exceptions plutôt que de mettre bêtement except Exception as e parce qu'à force de tout masquer, on peut en arriver à masquer un truc important qui pourrait montrer l'origine du souci.
    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]

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 126
    Points : 1 636
    Points
    1 636

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2024
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2024
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour votre intérêt. Je vais approfondir les différents points que vous avez ciblés et je reviendrai rapidement

    Update : J'ai ajouté une fonction pour inverser les canaux R et B et cela fonctionne !

    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
    28
    29
    30
    31
    32
    33
    def preprocess_image(image_path):
        try:
            # Ouvre l'image
            img = Image.open(image_path)
            # Inverse les canaux R et B (0 et 2)
            r, g, b = img.split()
            img = Image.merge("RGB", (b, g, r))
            # Sauvegarde l'image prétraitée en écrasant l'originale
            img.save(image_path)
            return image_path  # Renvoie le chemin de l'image traitée
        except Exception as e:
            log_message(f"Error processing image {image_path}: {e}", 'error')
            return image_path  # Retourne le chemin même en cas d'erreur pour ne pas interrompre le processus
     
    def update_play_list(media_list, instance, media_files):
        log_message("Checking for playlist update.")
        media_list.lock()
        # Clear the media list
        while media_list.count() > 0:
            media_list.remove_index(0)
        # Repopulate the media list with a special handling for images
        for media_file in media_files:
            media_path = os.path.join(LOCAL_DIR, media_file)
            if media_file.lower().endswith(('.jpg', '.png')):
                # Prétraite l'image pour corriger les couleurs
                processed_path = preprocess_image(media_path)
                # Crée un élément média pour l'image prétraitée
                media = instance.media_new(processed_path)
            else:
                media = instance.media_new(media_path)
            media_list.add_media(media)
        media_list.unlock()
        log_message("Playlist updated.")

Discussions similaires

  1. [office]problème d'affichage des couleurs
    Par doc_nounours dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 09/07/2006, 11h18
  2. Réponses: 8
    Dernier message: 28/03/2006, 16h52
  3. Réponses: 1
    Dernier message: 22/02/2006, 10h56
  4. Réponses: 6
    Dernier message: 06/12/2005, 15h52
  5. recherche des algorythmes pour images 2d
    Par exxos dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 24/05/2002, 13h46

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