tnorth ~ blog

Aller au contenu | Aller au menu | Aller à la recherche

jeudi, octobre 8 2009

Un peu d'informatique...

Programmation

D'abord, le code du programme décrit dans le post précédent est maintenant disponible. Voir la page associée.

Linux sur NSLU2

Juste un petit retour d'expérience sur l'installation de Debian sur un NSLU2. Le NSLU2 est un NAS (Network Attached Storage), qui consiste en fait en un petit ordinateur avec processeur XScale (ARM) à 266Mhz et 32Mb de ram. Ce qui veut dire qu'on peut y installer un de nos systèmes préférés. Il existe une multitude d'autres choses libres à y installer, mais mon choix s'est porté sur Debian. L'installation est très simple et prends environ 2 heures.

Pourquoi faire ?

Cela permet un accès total à la machine. On peut ainsi avoir un accès SSH à cette machine et y mettre à peu près n'importe quoi. Très basse consommation de l'ordre de 4W, c'est une machine idéale pour faire ses sauvegardes et partager des données sur un réseau local. nslu2-debian

dimanche, septembre 27 2009

L'algorithme de Dijkstra appliqué à des images

Maintenant que l'année académique recommence, il est temps de publier un travail effectué dans le cadre des études : je ne vais pas m'étendre là dessus, et les intéressés pourrons consulter le poster associé ici.

Dans ce travail, le très connu algorithme de Dijkstra a été utilisé pour chercher un plus court chemin dans des images du fond de l'oeil.

Introduction

L'algorithme en question peut s'appliquer à énormément de choses différentes. Il est par exemple utilisé dans le protocole ''open shortest path first'' pour le routage IP, ou autres applications "graphes et réseaux". De même, il sert à assister des algorithmes d'intelligence artificielle pour déterminer le chemin le plus court pour déplacer, dans l'exemple d'un jeu, un personnage d'un endroit à un autre d'une manière efficace.

Revenons au cas d'une image: la création d'un graphe dans ce cas devient bien moins générale, et se réduit à des réseaux ou chaque sommet du graphe n'est relié qu'à ses voisins (géographiques) directs. Chaque lien est doté d'un coût, qui décrit s'il est aisé ou non de passer du pixel actuel au pixel visé. On pourra ainsi associer à chaque pixel de l'image un sommet, et à chaque lien entre ce pixel et ses voisins une arête.

Et de façon similaire, on pourrait créer une grille représentant un terrain virtuel. Le coût de déplacement pourrait être représentatif de l'altitude à grimper, ou du type d'obstacles à franchir.

Implémentation C

Il existe donc beaucoup d'implémentations de cet algorithme dans pas mal de langages de programmation différents. Néanmoins, je n'ai pas réellement trouvé d'algorithme écrit en C pur qui implémentent Dijkstra avec une complexité en dessous de O(N²). En voici donc une version, écrite pour appliquer l'algorithme sur des images, pour le moment restreint à deux dimensions. Il serait très facile de le modifier pour ajouter une 3ème dimension!

Astuces pour réduire le temps d'exécution

Exécuter Dijkstra prend du temps pour deux choses:

  1. Il faut créer un graphe à partir des données (l'image par exemple), en temps O(N)N est le nombre de sommets
  2. Il faut calculer le chemin le plus court pour arriver du point de départ au point de destination, en temps O(|E+N| log(N))E est le nombre d'arêtes.

Dans le cas d'images, augmenter chaque cote d'un facteur deux revient à multiplier par 4 le nombre de sommets. Autant la création du réseau que l'algorithme vont nécessiter du temps de calcul !

La proposition est alors la suivante : redimensionner le graphe (= l'image) pour y calculer un plus court chemin. Ensuite, définir une zone de travail autour de ce chemin, et recalculer le chemin le plus court sur l'image pleine résolution. Attention: la garantie d'obtenir le plus court chemin est perdue. Par contre, cela permet d'obtenir rapidement un "suffisamment" bon chemin.

Multi-res_scale Indication du temps de calcul en fonction de la taille de l'image (cf légende). Utiliser la multi-résolution permet de gagner beaucoup de temps sur les grosses images, ainsi que de l'occupation mémoire.

Applications

Aperçu interactif de l'algorithme

Peut-être visualisé dans un navigateur à jour ici : Dijkstra pas à pas Chaque click fait avancer l'algorithme d'un pas.

Labyrinthes

Il est possible de résoudre des labyrinthes:

Dijkstra_maze

Il a fallu moins de 2 secondes pour charger les images et retrouver le chemin sur l'image complète (clickez l'image)

Suivi de vaisseaux sanguins

vaisseau

Récupérer le code

Tout est disponible sur bitbucket.

Code C pur

Il faut regarder le dossier tests/ et s'en inspirer pour utiliser Dijkstra. Pour le moment, aucune interface robuste ou programme user-friendly n'a été préparé pour l'utiliser.

Module C pour Python

Une fois compilé avec la méthode standard, le module ne comporte que 3-4 fonctions très simples à utiliser. On se référera au fichier de test disponible dans le dossier du module.

mercredi, juin 17 2009

Fedora votations

votations Community member ? Don't forget to do so.

lundi, mars 9 2009

New package into FEL: tkgate

It was planned since a long time ago, but it is just now that tkgate landed into Fedora Electronic Lab (therefore also in Fedora 9, 10 and devel).

Tkgate is a digital circuit simulator which allows many things: graphical circuit design, logic simulation through GUI or scripts, breakpoints, etc. etc. It seems to be really amazing and I am just discovering it, but if you have interest in that domain, try it, you'll have a good surprise.

We choose to include version 2.0beta7. The development being really active, we can expect having a (more) stable release very soon.

Examples and tutorials are part of it, you will certainly find some in a language you understand. And of course, the fine manual can also be found online.

Here is a screenshot of its interface: Tkgate

jeudi, février 19 2009

Avr-gcc 4.3.3 available for Fedora 10 and devel

English

I just updated avr-gcc from 4.1.2 to 4.3.3. That's something I really had to do before, but for which I couldn't find time.

Right after that, I saw GCC 4.4 landing in Rawhide. This time, i'll try and update to it faster, before Fedora 11 release. It will come with new device support for ATtiny, ATmega, and M3000 family.

By the way, I would be glad to have feedback on that update, I don't have access to AVR devices for now. Please report me your problems/success with it !

Update: avr-libc also updated to version 1.6.4. Thanks Jonas for reporting the problem ! Unfortunately, the update is always pending, maybe because Koji is down now (mass rebuild maybe). You can find this RPM (noarch) here.

Français

Je viens de mettre à jour avr-gcc de la version 4.1.2 à 4.3.3. C'est quelque chose que j'aurais du faire bien avant, mais je ne trouvais pas le temps nécessaire.

Après avoir fait cela, j'ai vu GCC 4.4 arriver dans Rawhide; et cette fois j'essaierai de maintenir avr-gcc dans la même version pour la sortie de Fedora 11. Cette dernière supporte de nouveaux chips des familles ATtiny, ATmega et M3000.

Si vous avez moyen de tester avr-gcc, je serai ravi d'avoir de vos nouvelles. N'ayant pas accès à des AVR pour le moment, il m'est impossible de vérifier si tout fonctionne comme il faut.

Mise à jour: avr-libc est désormais en version 1.6.4. Malheureusement, la mise à jour n'a pas encore atteint le repo principal, peut être à cause de Koji qui fait peut-être son rebuild pour gcc 4.4. Le RPM peut être téléchargé ici en attendant.

- page 1 de 3