Je suis en train de suivre le tuto sur Arduino et je me posais une question sur les composants connectable. Est-il possible de connecter une caméra noir et blanc sur une carte Uno ?
Mon objectif est de réaliser un logiciel embarqué de traitement d'image. La deuxième question est donc : comment récupérer les valeurs des pixels de la caméra.
PS : je ne souhaite en aucun cas afficher les pixels.
Qu'on se le dise une bonne fois pour toute. Arduino N'EST PAS fait pour faire du traitement vidéo. La puissance de calcul est ridicule pour ce genre d'activité. D'une manière plus générale, Arduino n'est pas fait pour faire du gros traitement de signal (signal ayant une fréquence élevée).
SI tu veux faire du traitement vidéo, il faudra passer par des composants / shields externe. Fais une recherche sur le forum, ca a été évoqué plusieurs fois ces derniers mois
Etant donnée que je veux simplement détecter un objet j'ai juste à effectuer une différence entre une image échelon et l'image courante. Ce n'est donc pas un traitement lourd, et la résolution d'image ne doit pas être forcement élevé. Le processeur de la Uno est en 16MHz je pense donc monter à 5 FPS.
Je vais continuer les recherches. Mais si j'ai bien compris il va falloir que je démonte une caméra pour récupérer le flux de données ?
Prenons une image 500x500 pixels. J'effectue une soustraction entre deux images (donc 250000 opérations). Je binarise mon image (de nouveau 250000 opérations). Je compte les pixels blanc (au maximum 250000 opérations). J'ai donc 3*250000 opération que j'arrondi à 10^6. Or 10^6<1,6*10^7. Je peut donc espérer monter à 10 FPS.
Le capteur CMOS à l'aire sympathique. Je vais faire des recherche dans ce coin là.
J'effectue une soustraction entre deux images (donc 250000 opérations)
Ton image est en niveau de gris ou en RGB ? Combien de bits par couleur ?
Ensuite, 1 if ca se traduit par forcément en une seule instruction (idem pour d'autres instrcutions) donc ton calcul ne peut pas être aussi simple.
Enfin, où sont les étapes d'acquisitions dans ton calcul ? Dans quel type de mémoire tu stockes ton image ? La RAM de l'Arduino ?
Si oui je dis : Non !
500*500 en niveau de gris (un octet) 250 000 octets par image. fois 2 pour 2 images (courant et précédente) = 500 000 octets, 500 Ko.
Sur une mémoire RAM qui en fait 2kB, dommage....
-Je peut très bien charger une petite zone de mon image, traiter ce morceau, et passer au suivant. On peut aussi imaginer un traitement ligne par ligne.
Je peut très bien charger une petite zone de mon image, traiter ce morceau, et passer au suivant. On peut aussi imaginer un traitement ligne par ligne.
En admettant que tu codes super optimisé pour le traitement, comment tu fais pour stocker l'image à t-1 dans 2kB de RAM ? (en sachant que 500px par 500px fait toujours 250Ko) ?
Qu'on soit d'accord, je veux pas te dégouter du truc, mais juste te faire réaliser que l'Arduino c'est pas la plateforme qu'il te faut pour ca... (et si c'est une question de coût, essaie de te tourner vers une raspberry pi par exemple).
void loop()
{
while(//toutes l'image traité)
{
//chargement de 1Ko de l'image échelons.
//chargement de 1Ko de l'image courante.
//traitement
}
}
Je pense qu'un code comme celui ci fera l'affaire. Pourquoi l'arduino ? Tout simplement parce que je suis un programmeur et que cette plateforme est très facile à prendre en main
Mon objectif est de pouvoir bidouiller des trucks dans mon coin. Donc si le traitement d'image n'est pas possible et bin tant pis. Mais je pense vraiment qu'on peut faire quelque chose avec.
Je reformule ma question :
Entre le moment ou tu as finis de traiter ton image i et le moment où tu vas récupérer l'image i+1, tu vas stocker où l'image entière i ?
Je peut stocker mon image sur de la ROM (je rajoute un disque dure ). On doit bien pouvoir connecter une puce mémoire. Ou même utiliser l'entré USB pour brancher une clef (mais bon là y faut coder un driver...).
Toujours trop petit (et pour le coup tu vas flinguer ta mémoire)
(je rajoute un disque dure ). On doit bien pouvoir connecter une puce mémoire.
Oui, tu pourrais rajouter une mémoire externe.
Ou même utiliser l'entré USB pour brancher une clef (mais bon là y faut coder un driver...).
Non, pas d'USB Host sur l'Arduino sans shield (sous entendu tu pourras rajouter un shield)
Bien que certaines de ces solutions pourrait fonctionner, ton traitement va s'écrouler puisque les temps d'accès pour sauver/récupérer quoi que ce soit seront beaucoup trop long.
Tu veux détecter un objet en faisant une soustraction entre deux images ?
Ca veut dire que ton image testée sera exactement pareil que l'image étalon sauf l'objet présent.
Faire une soustraction, c'est probablement possible à une fréquence assez faible, mais faire autre chose (de la détection) en plus c'est mort.
De toute façon vouloir faire un truc à la limite des capacités du microcontroleur, pourquoi pas, c'est intéressant, maintenant faut pas oublier que tu utilise le framework Arduino et je doute que tu ai été voir comment étaient codées les fonctions et voir le résultat de la compilation.
robinson des bois a écrit:
[...]
-En code AMS un if coûte une opération "AH cmp AL"
Ensuite non un "if" en assembleur AVR / Microchip et même la plupart des assembleur ce n'est jamais qu'un CMP (Compare), c'est une opération, comme la comparaison + un "Branch if [qqch]" ([qqch] = equal to / greater than pour AVR entre autre) par rapport au résultat de l'opération précédente.
De plus si le résultat est faux, l'opération "branch if" coûte une instruction, si elle est vraie, elle en coûte deux (car on fait un jump vers le label du "vrai"), et il faut ajouter une instruction pour l'opération précedente (comparaison par exemple).
Et si tu utilise des interruptions, tu peux aussi avoir des sauvegardes de contexte à effectuer, ce qui te plombera ton compte d'instructions.
Enfin bref, si personne ne fait de traitement vidéo avec un Atmel 8 bits c'est bien qu'il y a une raison.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !