[..] Traitement vidéo à la volée

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
ElDestructore
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mer. 09 avr. 2014 20:56
Status : Hors ligne

[..] Traitement vidéo à la volée

#1

Message par ElDestructore »

Bonjour à tous,

Je viens vous demander de l'aide pour la réalisation d'un programme un peu particulier, que je n'arrive pas à réaliser.

Ses fonctions sont les suivantes :

1) Transformer un fichier vidéo en une succession d'images
2) Chercher dans chacune des images ainsi extraites les coordonnées de trois groupes de points dont la couleur est connue à l'avance.
3) A partir de ces coordonnées, trouver celle de l'orthocentre des trois points.
4) Noter ces coordonnées dans un fichier.

Ma principale contrainte est d'arriver à traiter au moins 5 images par secondes. Si cela n'est pas possible, (je crois qu'un script est monothread... ?) je compte scinder le programme en plusieurs parties et allouer un thread à chaque sous-programme ainsi créé.

Je pense être capable de réaliser l'étape 2 soit avec :
- la fonction PixelGetColor(), avec une boucle itérative, et comparer chaque donnée retournée avec la valeur recherchée (avec un pas de tolérance), puis stocker les coordonnées dans un tableau.
- la fonction PixelSearch(), mais la j'aurais besoin de votre aide car malgré mes recherches je n’arrive pas à comprendre comment l'utiliser efficacement.

Les étapes 3 et 4 ne me posent pas de soucis, mais si vous avez des idées pour optimiser le traitement, je suis preneur ^^.

Mes interrogations sont les suivantes :
- Est-il possible de réaliser l'étape 1 avec AutoIt, car je n'ai pas trouver comment faire... Si non, avez vous une idée de comment faire ? (Passage par un langage annexe ?)
- Peut-on réaliser l'étape 2 sans afficher à l'écran l'image à traiter ? Car cela ne sera pas possible dans le cadre de mon projet (Voir plus bas)
- Que me conseillez vous pour améliorer mon traitement de données ?
- Vaut-il mieux stocker les données de chaque étape dans des tableaux, ou dans des fichiers externes au programme, sous forme de liste de points par exemple ?

Pour plus de détails, voici l'objectif de mon projet :

Réaliser le traitement à la volée d'un flux vidéo radio-transmit (+-5/10FPS), afin d'extraire les coordonnées de trois points de couleur variable, mais connue (la couleur est la même pour les trois points).
Le but est de réaliser le guidage autonome de atterrissage par flux optique d'un système volant muni d'une caméra (un drone) sur une plateforme non connue. Trois LEDS de couleurs sont disposées sur la plateforme et forment un triangle équilatéral dont l'orthocentre est le centre de la plateforme.
Le système de radioguidage ainsi que l'envoie des instructions de vols sont au point, mais le système de traitement du flux optique est à concevoir. (But de ce programme)
Le programme de traitement sera exécuté par un ordinateur non muni de sorties vidéos. L'affichage n'est pas pris en charge.

Merci d'avance pour votre aide,

(et merci d'avoir lu mon pavé jusqu'au bout xD)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Traitement vidéo à la volée

#2

Message par Tlem »

Bonsoir ElDestructore.
Il faudrait connaitre la taille des images du flux vidéo.
Je pense que quoi qu'il en soit, AutoIt ne sera pas capable de traiter directement et suffisamment rapidement le flux vidéo puis les images extraites de ce flux.

Au mieux vous pourriez utiliser un programme externe (piloté par AutoIt) qui fera la capture des X images/secondes, puis AutoIt traitera le reste. Mais il faudra jouer sur plusieurs contraintes qui seront étroitement liées, car si trop de traitements alors trop de temps de calcul.

Déjà, il faudrait analyser combien il faut de temps à AutoIt pour trouver les trois points et calculer l'orthocentre. Cette donnée sera très dépendante de la résolution de l'image car la recherche d'un pixel de couleur sur une image HD sera nettement plus longue que sur une image en 320x400. ^^
Une fois ce temps de recherche connu pour 1 point, dans les conditions les plus défavorables, on le multiplie par 3. Ensuite on rajoute le temps de calcul de l'orthocentre (lui aussi dans les conditions les moins favorables). Vous avez enfin un temps de calcul approximatif pour chaque image dans les conditions les moins favorables.

La fonction PixelSearch scan par défaut la zone déterminée de gauche à droite et de haut en bas. Si vous prenez une image ou les trois points de couleur ce trouvent en bas à droite alors vous serez alors dans les conditions les moins favorables.

Je pense très sincèrement que l'utilisation de PixelSearch() sera trop lourde et prendra beaucoup trop de temps pour faire votre traitement.
Maintenant, selon le type d'image et la taille/forme des points à détecter, une méthode plus rapide serait d'utiliser l'UDF FastFind() ou
_ImageSearch(). Les temps de traitements seront nettement plus rapides et adapté à la situation.

Tout dépendra principalement de la résolution de l'image. :mrgreen:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
ElDestructore
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mer. 09 avr. 2014 20:56
Status : Hors ligne

Re: [..] Traitement vidéo à la volée

#3

Message par ElDestructore »

Merci beaucoup pour ta réponse !

Suite à ce que tu m'a dit, je suis en train de créer les images de test pour le script. Les images sont en format *.jpg, et ont une résolution 720p.
Pour le test il s'agira de 3 spots rouge peu espacés formant un petit triangle isocèle en bas à droite de l'écran.

Je vais par la suite créer le programme qui se chargera de l'extraction et du traitement des coordonnées. Je pense du coup utiliser FastFind(), car elle semble plus optimisée et plus rapide. Je te tiens au courant des que j'ai fini le script et que j'en ai mesuré les performances.

Quant à l'extraction des images depuis le flux vidéo, je pense faire comme tu me l'a conseillé et utiliser un programme annexe pour le faire. Il sera piloté par le script principal en AutoIt. Je me suis tourné vers la librairie OpenCV, en C++, je pense qu'elle me permettra de réaliser ce que je veux faire. (Je suis encore en train de fouiller dans la doc technique ...).

L'UDF que tu m'a conseillé est-elle facile d'emploi ? (Pas encore eu le temps de m'y plonger ^^)

Merci encore pour ta réponse.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Re : [..] Traitement vidéo à la volée

#4

Message par Tlem »

Je ne peux vous donner plus d'informations sur l'utilisation des UDF mais en fouillant les forums, vous trouverez une multitudes de messages qui en parle.

Concernant la capture des images, regardez si vous pouvez diminuer la résolution. Cela permettra une capture plus rapide et un traitement par AutoIt allégé car 720p = 1280x720 = 921600 pixels. Se qui commence à être assez lourd comme traitement pour AutoIt. N'oubliez pas que celui ci n'est pas un langage des plis rapide pour ce genre de traitement. ;)

Envoyé de mon appareil mobile.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre