COMPARER DEUX AVI ET EN TROUVER LES POINTS COMMUNS (GENERIQUES)

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 22 sept. 2008 à 05:28
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 - 27 mai 2012 à 19:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/48013-comparer-deux-avi-et-en-trouver-les-points-communs-generiques

Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
27 mai 2012 à 19:38
Bonjour,
Non, je n'ai pas porté ce code sous un autre langage que VB6.
J'utilise les API Windows pour lire le contenu des fichiers AVI. Il faut avoir a l'esprit que les API dépendent du noyau de Windows. Il arrive que des fonctions ne soient plus prises en charge en changeant de version d'OS. Il faut vérifier sur MSDN.

A ma connaissance Windows ne peut ouvrire qu'un nombre limité de CODECs ( et uniquement des AVI ? )
Il serrait interessant de voir si il n'existe pas des librairies qui fasse le même travaille ( je pense en particulier a VLC. )

cordialement,
florent
deruaz Messages postés 2 Date d'inscription dimanche 6 août 2006 Statut Membre Dernière intervention 27 mai 2012
27 mai 2012 à 12:23
Rebonjour,

J'ai essayé de compiler ton programme sous windows 7 , visual basic 8 en important le proget, mais j'ai de nombreuses erreur de chose non definie ou de syntax non admise.
Je n'ai pas reussi a installer vb6 sous windows 7.
Aurais-tu une version plus recente de ton programme qui marche sous cisual basic 8?

Merci d'avance
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
14 mai 2012 à 20:26
Bonjour,

Je pense que cela est tout a fait réalisable. Au moins, tu trouvera toutes les fonctions (api windows) nécessaires pour accéder aux données d'un fichier AVI.
Attention cependant a la méthode pour comparer les deux images. Mon astuce d’intensité moyenne ne conviendra pas (je pense)...

Cordialement,
deruaz Messages postés 2 Date d'inscription dimanche 6 août 2006 Statut Membre Dernière intervention 27 mai 2012
14 mai 2012 à 02:27
Bonjour ton idée m'interesse, mais por trouver une image dans un avi: le but et de localiser le debut et la fin d'une serie enregistrée en ayant extrait auparavant une image sur le generique de debut et de fin.
Pense-tu que je puisse modifier ton programme facilement pour faire cela?

Merci d'avance
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
24 sept. 2008 à 10:30
Ben je te garanti rien, je sais que la transformée de fourier d'une image donne le spectre de l'image (qu'est ce que c'est précisément... bonne question j'ai eu qq cours la dessus et un projet, mais j'ai toujours pas vraiment assimilé le côté "spectre d'image"), un peu comme le spectre d'une son :les différentes fréquences qui composent le son (utilisé dans le codage MP3 si je me trompe pas).
Je me souviens qu'on avait appliqué des transformées de fourier à des images dont la construction était similaire : un dessin en noir & blanc dans un cadre noir. et les spectres étaient semblables. Enfin niveau rapidité c'est sur que ça va être bien plus lent. C'est vrai que si pour ton application cette méthode convient, ne t'embete pas plus, mais pour la comparaison d'images en général ça serait peut etre plus adapté (c'est une méthode plus "fiable").
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
23 sept. 2008 à 23:46
MadM@att , en gros oui ^^ on peu considérer que mon gloubiboulga de moyenne me donne une valeur batarde qui représente un mélange de la luminance et de la crominance de l'image.

Le but de cette opération est de trouver une valeur qui caractérise l'image au mieux et dans son ensemble.

En ce qui concerne les séries de fourrier ^^ brr je n'y connais pas grand chose.
J'ai vu que cela était fortement utilisé pour le codage JPG, mais en quoi cela pourrait-il permettre une utilisation plus poussée ? En, sachant que je souhaite que cette opération soit a la fois précise mais rapide.

Toute idée est bonne a prendre, je vais essayer de plancher sur la question.
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
23 sept. 2008 à 18:58
Donc, tout simplement, tu fais bien une moyenne des couleurs... ;-)

En gros, la fonction représente la luminosité du film à un instant donné si j'ai bien compris. Pour une utilisation plus poussée j'aurais regardé du côté des transformées de fourier.

PS : pour mettre à jour la source, c'est un bouton en haut de la page
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
23 sept. 2008 à 00:08
Salut,

bon, j'ai énormément avance mon programme.
Il n'y a plus de trucs "bizards" ^^

Problème de Non libération des fichiers : RÉSOLU
En fait je ne libérai pas les différents pointeurs sur l'avi

MadM@t, pour répondre a ta question, en fait, dans un Frame (image code en BMP)
il y a grosso modo (je rentre pas dans le détail de codage bmp)
Largeur * Hauteur * 3 bytes
Pour ma part, je fait la somme de N bytes * 3
N c'est le nombre de pixels que je veux échantillonner
3 c'est qu'il y a 3 couleurs par pixel
Ensuite, je divise cette somme par N*3 --> moyenne de tout ca.

L'intérêt ??? et bien ces N pixels echantillonés sont pris a intervalles réguliers sur le frame (je ne teste pas genre un coin de l'image)
Cette valeur est conservée et me donne par la suite une ... fonction décrivant l'animé. Entre deux animés, (apres avoir tenu compte du NbFrame/Seconde qui insere une distorsion) on constate que les "fonctions" sont quasiment identique quand les animés sont identiques... --> voila mon générique
j'espère avoir répondu a ta question

Si je trouve comment on met a jour les fichiers sur VBfrance ^^ je vous invite a regarder la nouvelle version (en un seul morceau ^^) bien plus fiable quoi que encore en étude ^^

UN point qui me gène pour le moment ... c'est le temps d'échantillonnage ...
Ce temps important est du a l'utilisation de l'API
CopyMemory Lib "kernel32.dll" si quelqu'un connais le moyen de diminuer ce temps... Au lieu de copier tout le frame je peu copier seulement les N*3 bytes... mais cela ne semble guère faire gagner de temps

Etape suivante, effectuer une analyse + poussée entre les deux fichiers.
En effet, la ca va bien pour trouver des parties qui sont exactement au meme endroit dans un avi... si jamais il y a un décalage (genre histoire + longue) le générique se décale et on ne trouve donc plus le générique...
A l'attaque (ca je pense que ce serra simple ^^)

J'espère être clair (même si je le suis rarement ^^)

Flocreate
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
22 sept. 2008 à 23:04
Tu dis faire la moyenne des pixels, mais tu parle de la moyenne des couleurs ?
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 sept. 2008 à 05:28
tu dois rebooter car ton Call AVIFileRelease(AVIfile) n'est fait qu'en cas d'erreur de traitement...