Bonjour, pour un projet, je dois r�aliser une appli en java analysant une vid�o de visage en temps r�el de fa�on a suivre les contours des yeux et de levres � l'aide de contours actifs.
J'utilise pour �� le JMF qui me permet de recup�rer et d'analyser les frames d'une vid�o tr�s facilement. Malheurement, le JMF est dej� assez gourmand en ressource et j'ai encore plein de calcul a faire derri�re !
En gros, les contours actifs sont bas� sur un algo it�ratif de minimisation de leur �nergie et sont ainsi capable de suivre les pixels � gradients elev� d'une frame � l'autre. Mon probl�me est que j'ai besoin d'un code parfaitement optimis� car chaque milliseconde de calcul compte ici (j'ai environ une cinquantaine de milliseconde de dispo maximum par frame). En gros si mon appli utilise plus que le temps dont elle dispose pour traiter une frame, la frame suivante sera tout simplement ignor�, ce qui a pour effet de sauter des frames et donc d'emp�cher un suivi de contour efficace.
C'est pourquoi j'ai besoin de votre aide pour optimiser mon code et essayer de gangner des millisecondes. J'ai quelques questions :
_ travailler en float ou en double ? j'imagine qu'en float c'est plus rapide puisque c'est coder sur moins d'octets. Maintenant pour graphics2D ou on a le choix ca ne pose pas de probl�me mais les m�thodes de java.lang.Math retourne en g�n�ral des double. Est ce qu'une conversion de type de style (double) ou (float) et efficace niveau perf ? Et comment eviter la conversion implicite en double ?
_ J'ai une m�thode d'une classe qui est appel� d�s que le prog recup�re le buffer d'une frame. Vaut il mieux instancier ses objets dans la fonction (donc a chaque appel) ou plutot en global dans la classe pour ne le faire qu'une seule fois et ensuite travailler sur leur contenu ?
_ L'appel de fonctions ralenti t'elle le code ? Par exemple dans une boucle, vaut il mieux appeler une fonction ou non ? Quitte a perdre en clart� mais gagner en perf.
_ Enfin le garbage collector est il vraiment optimis� ? Est ce que c'est utile de d�truire ses r�f�rences avec null ou au final ca ne sert pas a grand chose ? Et quand est il de l'appel a finalize() ?
_ Vaut il mieux cr�er des variable de type ou bien utiliser directement des methodes ? Par exemple j'ai la fonction getNb() qui me renvoit un nombre entier (ensupposant bien sur que je ne peux pas r�unir les 2 boucles en une) :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 int i,a=getNb(); for(i=0;i<a;i++) {} for(i=0;i<a;i++) {}Lequel est le plus performant ?
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 int i; for(i=0;i<getNb();i++{} for(i=0;i<getNb();i++{}
Voila, d�sol� pour ce post un peu long mais je suis un peu novice en utilisation m�moire comme java g�re tout pour nous et je n'ai pas une tr�s bonne connaissance de la fa�on dont un compilateur fonctionne. J'esp�re vous pourrez m'apporter quelques �l�ments de r�ponses. Merci
Partager