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...








vendredi 29 mars 2013

Morse

Hier, j'ai essayé d'installé Gazebo, aujourd'hui je compare à Morse, un simulateur plus européen !

J'ai d'abord essayé d'installer la version stable 1.0.
Mais j'ai eu des problèmes avec cmake qui ne trouvait pas correctement python.

bat@bat-UX32VD:~/morse/morse/build$ cmake ..
-- will install python files in /usr/local/lib/python3/dist-packages
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
PYTHON_INCLUDE_DIR (ADVANCED)
   used as include directory in directory /home/bat/morse/morse
   used as include directory in directory /home/bat/morse/morse
   used as include directory in directory /home/bat/morse/morse/src/morse/modifiers
   used as include directory in directory /home/bat/morse/morse/src/morse/sensors
   used as include directory in directory /home/bat/morse/morse/src/morse/sensors

-- Configuring incomplete, errors occurred!

Du coup, j'ai tenté avec la version du tronc, mais ça n'a pas suffit.

Finalement, j'ai dû installer python3-dev (et non python-dev)

sudo apt-get install python3-dev

J'ai dû rajouter set(PYTHON_INCLUDE_DIRS /usr/include/python3.2) dans CMakeLists.txt

Je me suis ensuite lancé dans les tutoriels à proprement dit.
J'ai utilisé pydev d'eclipse pour tapper le code (installé il y a quelques temps, mais pas testé). Aucun problème à ce niveau.

Mais dès l'édition je vois que ATRV() n'est pas connu.
Et lors de l'éxécution bpy (blender python) n'est pas trouvé.
Sûrement des problèmes de variables d'environnement, mais pas suffisamment d'aide pour moi à ce niveau.

Donc au final je lance en ligne de commande.
Ca ne marche pas. Je finis par comprendre que c'est parce que j'ai également une version de morse plus récente. Je la désinstalle.
sudo apt-get remove morse-simulator
Et ça marche!!


Une fenêtre s'ouvre, mais aucun menu.
En tappant au hasard sur le clavier sur la touche h, je trouve un menu qui explique les actions : c'est tout sauf intuitif...

J'ai remplacé configure_service (obsolète, l'exemple n'est pas à jour) par add_service.

get_local_data n'a pas fonctionné
 "Pose" à remplacer par "atrv.pose"

Dans le tutoriel http://www.openrobots.org/morse/doc/stable/user/beginner_tutorials/ros_tutorial.html

examples/tutorials/tutorial-1-ros.py 


Dans le tutoriel http://www.openrobots.org/morse/doc/stable/user/beginner_tutorials/ros_tutorial.html

jeudi 28 mars 2013

Gazebo

Aujourd'hui pas d'open ateliers.

J'ai passé pas mal de temps à surfer sur internet.
Je me suis notamment promené sur thingiverse, le portail des pièces en 3D.
J'ai découvert Yoctopuce, des suisses qui proposent des interfaces USB analogiques à prix et encombrement réduit.
Cela permet de relier les "choses" à un PC.
Dans la même lignée, il y a cosm (anciennement pachube) qui est un service en ligne de datalogging (journalisation de données?).

Sinon, pour me changer les idées je suis retourné faire les tutoriels sur le simulateur gazebo.

Je voulais essayer d'importer un modèle 3D de parafoil venant de la bibliothèque de google devenu Trimble.
Malheureusement le modèle choisi était au format de sketchup et je n'ai pas réussi à faire fonctionner sketchup (malgré une installation avec wine).
Et impossible d'ouvrir les fichiers .skp autrement, les fichiers étant propriétaires !!!
J'ai heureusement trouvé un autre modèle au standard .dae (collada).
J'ai pu l'ouvrir avec G3DViewer (disponible dans les dépôts Ubuntu)

Voici le résultat après intégration dans Gazebo.


Il ne reste plus qu'à rajouter la physique...