From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
le 07-03-2017 08:01 AM
Bonjour à tous,
Je suis sur un projet de traitement de données post acquisitions (vidéos thermiques).
Pour ces traitements j'utilise des fonctions demandant l'intégralité de la vidéo comme données (par exemple traitement SVD).
Mon problème est que quand on traite une vidéo importante (plusieurs Go) alors le programme sature en mémoire et je me retrouve avec le fameux message "la mémoire est pleine" et le programme se coupe sauvagement.
Forcément ça arrive plus ou moins vite selon les performances du PC, les logiciels ouverts, etc.
J'ai donc deux questions :
Merci par avance.
le 07-12-2017 08:38 AM
le 07-19-2017 01:52 PM
Bonjour Julien,
De mémoire non il n'est pas possible de récupérer de cette erreur de mémoire. Elle est interne à LV, et requiert de tout stopper.
Par contre tu peux surement la prévenir. Plutot que d'utiliser les fonctions de PSApli.dll, ne peux tu pas estimer la quantité de mémoire nécessaire pour traiter ta vidéo ? Cela permettrait de ne pas commencer un calcul si tu risques de saturer la mémoire.
Je ne suis pas un expert en traitement d'images, mais l'algorithme SVD ne peut-il pas être effectué sur des parties distinctes de la video ? Par exemple, chaque chunck de video produisant des résultats, et l'aggrégation des resultats pouvant être retraité pour un avoir un résultat correct comme si il avait été calculé sur la video entiere.
le 07-19-2017 02:07 PM
Bonsoir zyl7,
Merci de ton retour.
Pour le message d'erreur je me disais bien que ça n'était pas possible mais bon, qui sait ...
Pour ce qui est de tronquer les fonctions et d'assembler à nouveau le résultat, ça n'est pas probant. Je prends l'exemple du SVD car c'est typiquement le genre de fonction qui ne donnera pas les mêmes résultats si tu as tronqué la vidéo en plusieurs parties et assemblé les résultats ou traité toute la vidéo d'un coup.
Du coup pas trop le choix, je dois considérer le pire des cas et prendre toute la vidéo.
Sinon pour l'évaluation de la mémoire avant le traitement c'est déjà ce que je fais :
- j'évalue la taille mémoire utilisée (souvent c'est la taille de la vidéo, en tableau 3D de double)
- j'évalue la mémoire vive restante (j'utilise psapli.dll)
- je pondère cette mémoire sur 5% (valeur prise au hasard d'essais) car LV utilise uniquement de la mémoire libre contiguë
- si cette valeur est trop faible, je refuse le calcul
Ça marche très bien dans 80% des cas, car 5% de mémoire vive c'est souvent d'un bloc, mais pas tout le temps !
Et j'aimerai que ce soit du 100% fiable ... et c'est là où mes capacités me limites.
le 07-26-2017 03:53 AM
Le messages d'erreur que tu as posté mentionne la primitive "build array" (contruire un tableau).
De manière générale, quand un code explose la mèmoire, une des première chose que je fais c'est de faire une recherche de toutes les utilisations de la primitive "build array", une utilisation maladroite de cette fonction dans un algo peut vite entraîner des dérives de la mémoire, parfois corriger ce type de bug est rapide.
Ce n'est peut être pas ton cas, mais peux tu poster ton code?
We have two ears and one mouth so that we can listen twice as much as we speak.
Epictetus
le 07-26-2017 04:09 AM
07-31-2017 05:43 AM - modifié 07-31-2017 05:43 AM
le 07-31-2017 06:03 AM
Si je me réfère à ce que tu as dit dans ton premier message, tu traites une vidéo qui peut faire plusieurs Go.
Ta boucle FOR à une sortie indexée, je pense que le soucis est là.
Au niveau de cette sortie, tu empiles les résultats du calcul que tu fais sur chaque frame, je pense que c'est là que tu dois modifier qlq chose.
Ton traitement (3) dois venir à l'intérieur de la boucle de manière à supprimer la sortie indexée.
Good luck
We have two ears and one mouth so that we can listen twice as much as we speak.
Epictetus
le 08-02-2017 11:15 AM
Salut,
Ouais c'est tout à fait ça !
Mais comme indiqué dans un des messages, si je fais des portions de vidéos puis que j'assemble le résultat des calculs, ça ne donne pas la même chose que si j'envoie la vidéo complète en entrée.
Faire des portions n'est pas faisable du coup.
Merci quand même.
A++
le 08-02-2017 02:02 PM
Si je me fie à l'icone du VI dans ta boucle FOR, il charge image par image.
Je pense donc qu'il est possible de modifier ton code pour qu'il puisse fonctionner sans nécessiter une quantité de RAM proportionnelle à la taille de ta vidéo.
We have two ears and one mouth so that we can listen twice as much as we speak.
Epictetus