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

Calcul scientifique Python Discussion :

Compressions sans perte à la volée d'images


Sujet :

Calcul scientifique Python

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Par défaut Compressions sans perte à la volée d'images
    Bonjour à tous !

    Je suis en train d'écrire un programme de vidéoconférence. Pour l'audio, pas de problème, le nombre d'octets à envoyer est très largement raisonnable. En revanche, pour les images (j'utilise PIL et notamment la méthode tobytes de la classe Image), cela fait quasiment 24 millions d'octets par seconde répartis en 24 groupes d'un peu moins d'un million. En compressant avec perte, j'arrive à réduire ceci par 3, mais l'image perd beaucoup en qualité. Alors je me demandais s'il était possible de compresser très vite sans perte des images de manière significative, et mieux, de se servir des images se ressemblant (dans un film, les frames sont quasi-identiques d'une fraction de seconde à l'autre) afin de repérer des similitudes et encore plus compresser. J'espère qu'il existe une librairie capable de faire cela, j'ai essayé de faire des compressions "maison", mais elles n'ont pas été vraiment concluantes.

    Merci d'avance de vos réponses !

  2. #2
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    Salut !!!

    Je pense que tu es parti d'une mauvaise base pour ta section video. A te lire, tu es parti du fait de capturer une image, de la compresser, la transmettre, et ce plusieurs fois par seconde. Effectivement, cela prend beaucoup de temps.

    Essaie plutot d'appliquer la methode IPB utiliser en comrpession video (ref wiki: http://fr.wikipedia.org/wiki/Group_of_pictures). Pour faire simple, tu va capturer la première image, et la compresser au taux désiré, puis l'envoyer.

    L'astuce ensuite va etre d'en garder une copie en mémoire. Quand tu va capturer la seconde image, tu va la comrpesser au même taux, puis faire un absdiff avec l'image precedente, afin de ne detecter que les pixels qui changent. Et là, tu ne va transmettre que le listing de ces pixels modifiés. Cela correspondra à une quantité bien moins importante dans la majorité des cas. Tu garderas alors une copie de cette seconde image en mémoire, et tu tourne en boucle ensuite.

    De fait, au lieu de transmettre une image entière à chaque fois, tu te retrouveras à ne transmettre que les changements d'une image à l'autre, allégeant ainsi ton besoin de bande passante.

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Salut,

    Pourquoi ré-inventer H.264 ou MPEG-4?
    Si vous ne savez pas que ça existe, pourquoi ne pas apprendre ce qu'on sait déjà faire dans le domaine avant d'oser penser que vos idées seront bien meilleures?

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

  4. #4
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    Il est logique de supposer que Stalacta sait très bien que la compression vidéo existe, il le dit lui même, je cherche donc juste à lui expliquer comment avoir un gain, de façon basique. Il lui revient ensuite de savoir s'il doit utiliser un protocole existant, ou si selon ses besoins, il doit faire autrement.

    "Si vous ne savez pas que ça existe, pourquoi ne pas apprendre ce qu'on sait déjà faire dans le domaine avant d'oser penser que vos idées seront bien meilleures?"

    Je sais très bien que des protocoles existe, et qu'il ne sert à rien de réinventer la roue, c'est même là un des principes de bases. De même, je ne pense pas que mes idées soient spécialement meilleures que d'autres. Mais il s'agit ici d'un forum d'entraide, visant à aider les membres. Toutes idées dans le sujet sont les bienvenues si cela peut faire avancer le sujet. On est donc ici pour échanger sereinement sans se faire prendre de haut, et cela à la limite de l'acceptable.

    Merci donc de ne plus être autant agressif. Essayer plutôt d'être constructif afin de faire avancer le problème de Stalacta.

    Merci beaucoup

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Salut,

    Prenez le temps de lire les questions déjà posées par le PO sur ce même sujet.
    Toutes les réponses lui ont déjà été données.

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

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Par défaut
    Merci Deusyss.

    J'étais en effet au courant que ce genre de compression existait. Mais moi, je cherche surtout des outils qui permettent de le faire. La difficulté, c'est que je ne peux pas passer par des fichiers vidéo compressés dans des formats tels que Wiztricks le dit, car c'est justement une vidéoconférence, alors je ne peux pas faire des vidéos de moins d'une seconde et les envoyer sans une certaine puissance machine ou sans avoir un décalage significatif. J'avais écrit un petit code afin de tester les ressemblances entre deux 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
    import pygame.vidcap as vidcap
    from time import sleep
     
    def GetImage(cam) :
        buffer, width, height = cam.getbuffer()
        if buffer:
            return buffer
     
     
    dev = vidcap.new_Dev(0,0)
    img1 = GetImage(dev)
     
    sleep(0.5)
     
    img2 = GetImage(dev)
     
     
    print('Taille originale :',len(img1))
     
    nb=0
    for i in range(len(img1)) :
        if img1[i]==img2[i] : nb+=1
     
    print('Nombre de similaires :',nb)
    Mais ce n'est pas assez significatif pour imaginer une compression "maison". J'ai eu beau chercher, je ne trouvais pas de trucs vraiment adaptés à ma situation donc je me demandais si vous en connaissiez.

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Salut,

    Une solution serait d’intégrer VLC (et je pense vous l'avoir déjà dit).
    VLC est une option. D'autres librairies existent, a vous de faire votre marché.

    Désolé mais le boulot du programmeur commence par définir a quoi va bien pouvoir ressembler la solution avant d'imaginer comment coder.
    Pour ce qui est d’échanger de l'audio et de la vidéo en temps réel sur Internet, expérience et état de l'art existent et sont abondant et accessible en quelques clics.
    A partir de la vous pouvez commencer a imaginer la complexité du problème a résoudre.

    Si vous aviez fait votre "home work" avant de vous lancer dans le codage d'un truc en Python, vous auriez constate que des générations d’ingénieurs ont sue pour arriver a définir les formats de compression aujourd'hui largement utilises (et que des tas de programmeurs se sont appliques a rendre cela disponible et utilisable -aussi a partir de Python-).
    Vous auriez pu aussi récupérer les sources de projets semblables pour voir a quoi ça ressemble.

    A la base, votre code ne tient pas compte des lois de la physique.
    A partir de la, impossible de s'en sortir avec quelques lignes de code (sauf a instrumenter la librairie qui fait déjà le job).

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

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Par défaut
    J'ai cherché VLC pour python et j'ai trouvé le code source. Est-ce le bon module ? quelles fonctions et classes puis-je utiliser afin de compresser mes frames ? ou alors il y a peut-être d'autres fonctions qui permettent d'envoyer la vidéo en continu ?
    Merci d'avance.

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Salut,

    Toujours la précipitation a écrire ça en 3 lignes de code?

    Le projet VLVC fait du video-conferencing "on top" de VLC.
    C'est un projet semblable au votre. Il pourrait être source d'inspiration.

    Si vous ne voulez pas passer par ce chemin la, vous pouvez aussi regarder cote bibliothèques Python qui permettraient d'encoder le flux vidéo en H.264.
    note: ce n'est pas suffisant pour ce que vous voulez faire, mais...
    A vous d'"explorer" les rayons de la quincaillerie qui s'appelle l'existant, l’état de l'art.

    Vous avez aussi une rubrique "algorithmique" sur developpez.
    Vous pourrez y trouver des tutos sur l'encodage et des idées pour coder votre propre algo. de compression.

    Tant que le design de ce que vous voulez faire et avec "quoi" n'a pas ete definit, ce n'est pas un sujet de "programmation" et encore moins un sujet "Python".

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

  10. #10
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    Bonsoir à vous deux,

    Je vois que j'ai loupé une partie de la discussion. Je rejoint Wiztrick sur le fait qu'il est effectivement préférable de définir un minimum ses besoins avant d'attaquer le codage. Une bonne préparation, pour tout projet quel qu'il soit, est indispensable. Cela peut sembler parfois une pure perte de temps, mais en réalité, cela évite bien des embûches dans la pratique. Cela devrait donc être l'étape à laquelle il faudrait actuellement consacré un peu de temps si tu ne l'as pas fait en amont.

    Sinon, en module comme ça, de tête, je n'en ai pas, car apparemment tu as essayé déjà plusieurs chose. Peut être regarder du côté de Py-pi, qui te met à disposition nombre de modules/packages à dispositions, avec un moteur de recherche. Tu y trouveras peut être ton bonheur.

Discussions similaires

  1. enregistrer une image sans perte
    Par dhekrasousou dans le forum Images
    Réponses: 3
    Dernier message: 04/05/2011, 21h17
  2. [Algorithme] Compression sans perte
    Par Thedahu dans le forum Langage
    Réponses: 4
    Dernier message: 18/04/2011, 00h58
  3. Rotation d'image sans perte de qualité
    Par gunth dans le forum C#
    Réponses: 1
    Dernier message: 20/10/2010, 11h18
  4. Retournement image jpg sans perte du header
    Par Ricquet dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 02/06/2009, 22h23

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