CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : [Python] Etude d'image

DébutPage précedente
1
Page suivantePage suivante
painlnmychest painlnmychest
MP
Niveau 7
06 février 2016 à 19:29:58

Bonsoir,

Dans le cadre d'un mini-projet scientifique (TIPE pour CPGE), je me suis intéressé aux différentes méthodes de reconnaissance musicale comme Shazam. J'aimerais bien "concevoir" un petit programme sur Python très modeste, avec mes quelques notions, me permettant d'illustrer l'exposé. Le principe de shazam est de constituer une empreinte audio à partir d'un fichier sonore. A partir d'un sonagramme (diagramme en "3D", temps en abscisse, fréquence en ordonnée, amplitude en couleur), shazam constitue une grille de domaine (donc chaque case de la grille contient des informations sur l'amplitude du signal sur une période donnée, sur une gamme de fréquence donnée) et dans chaque domaine, il relève le maximum d'amplitude. Il obtient ainsi un relevé de point pour chaque case de la grille et cela constitue l'empreinte audio du fichier.

Pour ma part, je compte choper un sonagramme directement à partir de Sonic Visualiser (j'ai testé, ça rend plutôt bien pour pouvoir faire des relevés http://prntscr.com/9ztvwq ) et de travailler sur Python à partir de l'image. Mon but étant de construire une grille de domaine (découpe du temps et de la fréquence) pour pouvoir relever le maximum d'intensité dans chaque domaine sachant que l'intensité est représentée une gamme de couleur. Mais pour pouvoir faire ça il faut que je puisse comparer 2 couleurs entre eux. Savez vous comment ça marche sur Python ? Comment un pixel de couleur est caractérisé ? J'imagine que chaque couleur est référencée avec un code couleur; est-ce que par exemple 2 couleurs quasiment identiques qui diffèrent très légèrement par la teinte aura des numéro de codes proches ? Comment puis-je obtenir le code couleur d'un pixel donné ?

Mais sinon, (vous allez rire) je n'arrive pas à commencer à écrire mon programme sur Python chez moi sur mon PC Windows faute d'avoir des modules nécessaires (au lycée les modules etc ..sont tous déjà installés avec des machines sous linux). Là en l'occurrence j'aurais besoin de matplotlib, mais j'ai aucune idée de comment ça marche, qu'est-ce que je dois installer, quelle version, si ma version de python est compatible avec le module etc ... Pourriez vous me conseiller une version de python qui ne me demande pas de télécharger 10 fichiers et de faire des manips fastidieuses pour un débutant comme moi ?

Merci pour votre aide.

Blaff2 Blaff2
MP
Niveau 10
06 février 2016 à 20:43:56

Tu pourras te débrouiller pour lire ton image et obtenir les données RGB de chaque pixel. Donc pour comparer deux couleurs, tu peux par exemple calculer la distance entre les valeurs RGB des pixels des deux images (via la formule de la distance dans l'espace par exemple).

Matplotlib est compatible avec les dernières versions de Python 2 et 3.
Donc une fois Python installé sur ton PC depuis le site officiel, tu vas dans le dossier source, il doit y avoir un dossier "Script" et en fouillant tu trouveras "pip.exe", tu l'éxécutes avec l'invite de commande en passant "matplotlib" en argument et ça devrait l'installer tout seul, après tu pourras faire un import sans problème. Tu auras peut-être aussi besoin d'installer numpy

painlnmychest painlnmychest
MP
Niveau 7
06 février 2016 à 21:03:03

Le 06 février 2016 à 20:43:56 Blaff2 a écrit :
Tu pourras te débrouiller pour lire ton image et obtenir les données RGB de chaque pixel. Donc pour comparer deux couleurs, tu peux par exemple calculer la distance entre les valeurs RGB des pixels des deux images (via la formule de la distance dans l'espace par exemple).

Matplotlib est compatible avec les dernières versions de Python 2 et 3.
Donc une fois Python installé sur ton PC depuis le site officiel, tu vas dans le dossier source, il doit y avoir un dossier "Script" et en fouillant tu trouveras "pip.exe", tu l'éxécutes avec l'invite de commande en passant "matplotlib" en argument et ça devrait l'installer tout seul, après tu pourras faire un import sans problème. Tu auras peut-être aussi besoin d'installer numpy

Je suis pas trop familier avec les systèmes de couleur, si ce n'est que pour le système RGB il y'a un triplet de nombres permettant de représenter une couleur à l'aide des 3 couleurs primaires. Je n'ai pas très bien saisi cette histoire de distance.
En fait en y réfléchissant de plus près, je me suis dit qu'au final pour l'échelle de l'intensité, il n'y a pas besoin d'y inclure les couleurs en soi, une échelle noir/gris/blanc devrait suffire, j'ai d'ailleurs vu qu'on pouvait configurer ça vu Sonic Visualiser. Du coup là je pars plutôt sur une comparaison de "gris" qui je pense sera bien plus simple.Existe-t-il une commande permettant d'obtenir directement le niveau de gris d'un pixel ?

Quand je lance pip.exe j'ai une fenêtre noire qui s'ouvre (ressemblant à l'invite de commande) mais qui se ferme tout de suite après.

RayonSpectral RayonSpectral
MP
Niveau 9
06 février 2016 à 21:11:48

Voilà de quoi t'aiguiller

https://laplacian.wordpress.com/2009/01/10/how-shazam-works/

http://royvanrijn.com/blog/2010/06/creating-shazam-in-java/

http://www.toptal.com/algorithms/shazam-it-music-processing-fingerprinting-and-recognition

Message édité le 06 février 2016 à 21:15:20 par RayonSpectral
painlnmychest painlnmychest
MP
Niveau 7
06 février 2016 à 21:25:43

Le 06 février 2016 à 21:11:48 RayonSpectral a écrit :
Voilà de quoi t'aiguiller

https://laplacian.wordpress.com/2009/01/10/how-shazam-works/

http://royvanrijn.com/blog/2010/06/creating-shazam-in-java/

http://www.toptal.com/algorithms/shazam-it-music-processing-fingerprinting-and-recognition

J'avais déjà passé en revue ces articles là, mais merci beaucoup pour ton aide :-p

Blaff2 Blaff2
MP
Niveau 10
06 février 2016 à 21:26:56

Le 06 février 2016 à 21:03:03 painlnmychest a écrit :
Je suis pas trop familier avec les systèmes de couleur, si ce n'est que pour le système RGB il y'a un triplet de nombres permettant de représenter une couleur à l'aide des 3 couleurs primaires. Je n'ai pas très bien saisi cette histoire de distance.
En fait en y réfléchissant de plus près, je me suis dit qu'au final pour l'échelle de l'intensité, il n'y a pas besoin d'y inclure les couleurs en soi, une échelle noir/gris/blanc devrait suffire, j'ai d'ailleurs vu qu'on pouvait configurer ça vu Sonic Visualiser. Du coup là je pars plutôt sur une comparaison de "gris" qui je pense sera bien plus simple.Existe-t-il une commande permettant d'obtenir directement le niveau de gris d'un pixel ? Quand je lance pip.exe j'ai une fenêtre noire qui s'ouvre (ressemblant à l'invite de commande) mais qui se ferme tout de suite après.

Oui, le système RGB utilise un tripet. Tu peux donc te représenter ces trois nombres comme des coordonnées (x, y, z), donc tu peux visualiser la couleur d'un pixel comme un endroit dans l'espace. Donc pour savoir si une couleur est proche d'une autre, tu peux calculer la distance dans l'espace entre ces deux couleurs.
La formule étant sqrt((x1 - x2)² + (y1 - y2)² + (z1 - z2)²). Bien sûr, tu l'adaptes pour que les (x, y, z) soient les valeurs RGB.
Après, tu peux déterminer arbitrairement si les couleurs sont plus ou moins proche selon le résultat obtenu.
Ce n'est qu'un exemple, il y a d'autres formules que tu peux utiliser, mais c'est celle qui me paraissait la plus simple.

Après, s'il est question d'intensité, je crois que le système HSV est mieux.

Pour pip.exe écoute, fais des recherches Google il doit y en avoir à la masse des tutos pour apprendre à utiliser cette commande sous Windows
Sachant que pour éviter qu'elle se ferme tu lances cmd et après tu glisse le fichier dans la fenêtre et tu appuies sur enter, t'auras le message d'erreur / de succès sans que l'invite de commande se ferme
Mais le mieux c'est encore de se déplacer vers le fichier pip.exe à travers l'invite de commande, en utilisant cd. Et une fois que t'es dans le bon dossier tu fais "pip.exe install matplotlib"

Message édité le 06 février 2016 à 21:29:08 par Blaff2
Benekiki Benekiki
MP
Niveau 10
06 février 2016 à 21:31:24

Je passe juste pour dire que c'est intéressant votre topic :hap:
Les liens, les infos toussa toussa

painlnmychest painlnmychest
MP
Niveau 7
06 février 2016 à 21:46:37

J'ai finalement réussi à lancer la commande, mais y'a un message d'erreur à la fin en rouge qui dit que ça a échouer et que je devrais prendre une nouvelle version de pip.exe
Sinon je suis tombé sur un tuto pour enthought canopy, j'ai installé numpy et matplotlib, mais ça ne marche toujours pas.

Le message d'erreur sur Python : " import matplotlib.pyplot as plt
ImportError: No module named 'matplotlib.pyplot'"

Je vais tout réinstaller parce que là j'ai une dizaine de version de python, de matplotlib etc ...

Blaff2 Blaff2
MP
Niveau 10
06 février 2016 à 22:00:31

Le message pour la version de pip c'est plutôt un warning qu'une réelle erreur à mon avis

Sinon tu peux aussi de récupérer les fichier wheel des bibliothèques qu t'intéressent ici : http://www.lfd.uci.edu/~gohlke/pythonlibs/#xarray

Et au lieu de faire "pip install matplotlib" tu fais "pip install le_nom_du_fichier_téléchargé.whl"

painlnmychest painlnmychest
MP
Niveau 7
06 février 2016 à 22:05:39

Ah c'est bon tout est réglé, j'ai réussi à installer numpy et matplotlib et tout a l'air de rouler. Bon je commence à réfléchir au codage, j'upperais ce topic quand j'aurai quelque chose à montrer :)

Blaff2 Blaff2
MP
Niveau 10
06 février 2016 à 22:10:02

T'auras besoin de PIL aussi à mon avis pour pouvoir lire ton image

painlnmychest painlnmychest
MP
Niveau 7
06 février 2016 à 22:23:15

Le 06 février 2016 à 22:10:02 Blaff2 a écrit :
T'auras besoin de PIL aussi à mon avis pour pouvoir lire ton image

Je peux pas juste utiliser matplotlib pour tout faire ? Là j'ai déjà réussi à afficher mon image sur python avec matplotlib.image.
Par contre je trouve pas la commande pour renvoyer le RGB d'un pixel.

Blaff2 Blaff2
MP
Niveau 10
06 février 2016 à 23:19:23

Le 06 février 2016 à 22:23:15 painlnmychest a écrit :

Le 06 février 2016 à 22:10:02 Blaff2 a écrit :
T'auras besoin de PIL aussi à mon avis pour pouvoir lire ton image

Je peux pas juste utiliser matplotlib pour tout faire ? Là j'ai déjà réussi à afficher mon image sur python avec matplotlib.image.
Par contre je trouve pas la commande pour renvoyer le RGB d'un pixel.

Effectivement tu peux utiliser ça, je connais pas bien matplotlib

La méthode matplotlib.image.imread devrait t'intéresser : http://matplotlib.org/api/image_api.html#matplotlib.image.imread

Ca retourne ton image sous forme d'un tableau de pixel.
Donc en faisaitn mon_tableau[5][3][0] tu obtiendras la valeur R du 3ème pixel de la 5ème ligne par exemple, je présume

DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment