mercredi 3 avril 2013

simpleCV

Ce soir j'ai découvert simpleCV ici au hasard de mes recherches
SimpleCV est une surcouche python d'openCV, qui facilite grandement les développements. Je ne l'ai pas encore vraiment essayé, mais vu la simplicité des exemples, je pense que l'essayer c'est l'adopter.

USB On The Go

Je croyais jusqu'à présent qu'un périphérique USB ne pouvait être que périphérique sur un fonctionnement maître-esclave.

Et bien je viens de découvrir que depuis 2 ou 3 ans certains périphériques (notamment les tablettes tactiles et maintenant les téléphones) permettent le fonctionnement en esclave ou en maitre.
Cela s'appelle USB On The Go (OTG).

Et bonne nouvelle mon téléphone (xperia mini) semble être un des premiers à avoir bénéficié de cette amélioration (qui est rendue possible par des modifications matérielles et pas seulement logicielles).

Cela m'ouvre donc la porte à la connexion de périphériques directement sur le téléphone.

En fait initialement, pensant que cela n'était pas possible, j'avais derrière la tête d'utiliser la prise jack pour interfacer la plaque arduino directement avec le téléphone. Et c'est en trouvant quelqu'un qui l'avait déjà fait que j'ai vu que cette solution était dépassée, car ceci est possible bien plus simplement avec l'USB.

http://code.google.com/p/usb-serial-for-android/


OpenCV+ Python + Wecam (2)

Aujourd'hui j'ai continué à me plonger dans le programme de traitement d'image.

J'ai rajouté un enregistrement de l'image, ainsi que la possibilité de sauvegardé un cliché avec la date et l'heure en pressant une touche du clavier.

J'essaie de réutiliser la démo camshift mais en l'améliorant pour que l'histogramme soit initialisé :
- sur une image (fixe et prédéfini) et une zone d'image sélectionné
- ou à défaut sur une zone en mouvement

Et le résultat est affreux : je me suis filmé pendant 5 minutes sans y faire attention, et bien ça vaut son pesant de cacahouète.

Voici le code

lundi 1 avril 2013

OpenCV + Python + IP Webcam !!

Cela faisait quelques temps que j'essayais d'obtenir la vidéo de la caméra de mon téléphone mobile dans openCV afin de pouvoir faire du traitement logiciel de la vidéo.
Ca y est j'ai enfin trouvé !
Mon problème était en fait très simple...

Voici le code fonctionnant:

import cv2

cv2.namedWindow("preview")
vc = cv2.VideoCapture("http://192.168.1.2:8080/videofeed?something.mjpeg")

if vc.isOpened(): # try to get the first frame
    rval, frame = vc.read()
else:
    rval = False

while rval:
    cv2.imshow("preview", frame)
    rval, frame = vc.read()
    key = cv2.waitKey(20)
    if key == 27: # exit on ESC
        break

Il suffisait de rajouter ?something.mjpeg à la fin de l'url car sinon opencv ne trouve pas le format (solution venant de http://code.opencv.org/issues/2474 )!

J'arrive donc maintenant à modifier l'image de ma webcam sur mon pc.
Démo d'une vidéo prise avec la caméra du téléphone et visualisé sur le PC dans une fenêtre créée par openCV
L'application IP Webcam sur android

Réinstallation openCV

Aujoud'hui je voulais laisser tomber Morse (pas encore suffisamment au point à mon goût) pour revenir sur Gazebo.

Ca m'énervait un peu qu'openCV soit installé dans un répertoire spécifique à ROS, notamment car je voulais pouvoir l'utiliser sans ROS, avec des chemins "standards".

J'ai donc tenté une réinstallation, mais j'ai mal suivi et j'ai tout recompillé. J'ai également effacé plein de dépendances dans ROS...
http://karytech.blogspot.fr/2012/05/opencv-24-on-ubuntu-1204.html

Un de mes objectifs était de réussir à lire un flux vidéo. On peut par exemple en créer un avec vlc avec la commande suivante :
vlc -vvv "/media/bat/DATA/videos/movie.avi" --sout
 '#standard{access=http,mux=ogg,dst=localhost:8080}'

J'arrive  lire le flux avec vlc (ou à le visualiser dans firefox) :

vlc http://localhost:8080

Lorsque j'essaie de lire le flux avec python et opencv, j'obtiens
Using network protocols without global network initialization. Please use avformat_network_init(), this will become mandatory later.
Et ensuite rien.

J'ai finalement repris le tutoriel suivant (plus complet que le précédent) plus à jour pour l'installation d'opencv. J'ai eu quelques difficultés car je ne lis pas tout et il y avait des précautions pour les systèmes 64bits...
http://www.ozbotz.org/opencv-installation-2-3-1/

Mais j'ai eu pas mal d'ennui à cause d'un changement d'interface de ffmpeg (j'ai voulu prendre la dernière version).
Cela m'a donné l'occasion de mieux jouer avec git.
J'ai trouvé une url avec la correction (il y a 11 jours seulement), donc pas encore dans les versions stables.
J'ai du changé l'origine :
git remote set-url origin new_url
Ensuite, j'ai du également changer de branche (la correction était dans une branche).

git branch -r
git checkout branch_name

Et au final ça ne marchait pas mieux...