Une carte intéractive du noyau Linux

Tags , , ,
8 juin 2008 par Yohann CIURLIK

Le noyau est l’organe le plus complexe et le plus grand d’une distribution Linux. Se repérer dans le noyau est une chose difficile. Il existe donc une carte interactive des différentes fonctions, couches, et structures du noyau.

kernel map

La navigation se fait via la souris ou via le clavier virtuel de navigation situé en haut à droite de l’écran. Il est possible, via des liens hypertextes, de visualiser la documentation en ligne des différentes fonctions.

Site : http://www.makelinux.net/kernel_map

(via)

Cet article vous a plu ? Abonnez-vous au blog par mail ou flux RSS : vous recevrez automatiquement les nouveaux billets !

OpenCV : Librairie C++ de gestion vidéo & webcam

Tags , ,
29 novembre 2007 par Yohann CIURLIK

Pour un projet en SDL, j’ai eu besoin d’utiliser la webcam pour faire de l’acquisition. L’idée était au départ de créer un jeu piloté via la webcam (à la manière de EyeToy sur Playstation).

J’ai commencé par utiliser le driver Cap de Windows via cette classe de gestion de webcam :

Fichier Webcam.c

  1. // WebCam.cpp: implementation of the WebCam class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4.  
  5. #include "WebCam.h"
  6.  
  7. //////////////////////////////////////////////////////////////////////
  8. // Construction/Destruction
  9. //////////////////////////////////////////////////////////////////////
  10.  
  11. WebCam::WebCam()
  12. {
  13.         //Créé une surface sur laquel on va pouvoir mettre l’image charger depuis la cam
  14.         image = SDL_CreateRGBSurface(SDL_SWSURFACE, 320, 240, 32, 0xFF000000, 0×00FF0000, 0×0000FF00, 0×000000FF);
  15.         if ( image == NULL ) {                                  fprintf(stderr, "Impossible de creer la surface de la classe WebCam: %s\n", SDL_GetError());                           
  16.     }   
  17. }
  18.  
  19.  
  20. WebCam::~WebCam()
  21. {
  22.  
  23. }
  24.  
  25. bool WebCam::Connect()
  26. {
  27.         //Récupère le Hwnd et le HDC de la fenètre SDL
  28.         SDL_SysWMinfo wmInfo;
  29.         SDL_VERSION(&wmInfo.version);
  30.         SDL_GetWMInfo(&wmInfo);
  31.         WebCam::hWnd = wmInfo.window;
  32.         WebCam::hDC = GetDC(WebCam::hWnd);
  33.  
  34.         //Connection a la webcam
  35.         hWnd_WC = capCreateCaptureWindow("WebCam", WS_CHILD, 0, 0, 1, 1, hWnd, 0);     
  36.  
  37.         //Vérifie la connection
  38.         if(!capDriverConnect(hWnd_WC, 0))
  39.         {
  40.                 MessageBox(NULL, "Erreur lors de l’initialisation de la WebCam.\nReportez-vous à l’aide pour plus d’information.", "Erreur", MB_ICONERROR);
  41.                 return FALSE;
  42.         }
  43.  
  44.         //trouve le HDC associé a la cam
  45.         hDC_WC = GetDC(hWnd_WC);
  46.         return TRUE;   
  47. }
  48.  
  49. void WebCam::StopConnect()
  50. {
  51.         //Déconnect
  52.         capDriverDisconnect(hWnd_WC);
  53. }
  54.  
  55. void WebCam::GetImage_Init()
  56. {
  57.         BITMAPINFO bmpinfo;
  58.  
  59. //      capDlgVideoDisplay( hWnd_WC );
  60. //      capDlgVideoFormat ( hWnd_WC );
  61. //      capDlgVideoSource ( hWnd_WC );
  62.  
  63.         //Modifie les infos de la cam, et initialise la cam pour récuperer des image 320*240
  64.         capGetVideoFormat(hWnd_WC, &bmpinfo, sizeof(BITMAPINFO));
  65.  
  66.         bmpinfo.bmiHeader.biSize        = sizeof(BITMAPINFOHEADER);
  67.         bmpinfo.bmiHeader.biWidth       = 320;
  68.         bmpinfo.bmiHeader.biHeight      = 240;
  69.         if(!capSetVideoFormat(hWnd_WC, &bmpinfo, sizeof(BITMAPINFO)))
  70.         {
  71.                 printf("erreur durant le setvideoformat\n");           
  72.         }
  73.  
  74.         //Définni la fonction de Callback en cas de nouvelle image     
  75.         capSetCallbackOnFrame(hWnd_WC, Main_CallBack);
  76. }
  77.  
  78. void WebCam::GetImage()
  79. {
  80.         //Charge une image
  81.         capCaptureSingleFrameOpen(hWnd_WC);
  82.         capCaptureSingleFrame(hWnd_WC);
  83.         capCaptureSingleFrameClose(hWnd_WC);
  84. }
  85.  
  86. void WebCam::CallBack(HWND hWnd, LPVIDEOHDR lpVHdr)
  87. {       
  88.         //Copie le buffer de la cam ds une surface SDL
  89.         SDL_LockSurface(WebCam::image);
  90.         for(unsigned int i=0;i<lpVHdr->dwBufferLength/3;i++)
  91.         {
  92.                 putpixel(WebCam::image,  319-i%320,     239-i/320,      SDL_MapRGB(WebCam::image->format, lpVHdr->lpData[i*3]+2, lpVHdr->lpData[i*3+1] , lpVHdr->lpData[i*3]));
  93.         }
  94.         SDL_UnlockSurface(WebCam::image);       
  95. }

fichier Webcam.h

  1. // WebCam.h: interface for the WebCam class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4.  
  5. #if !defined(AFX_WEBCAM_H)
  6. #define AFX_WEBCAM_H
  7.  
  8.         #include <stdio.h>
  9.         #include <windows.h>
  10.         #include <vfw.h>
  11.        
  12.         #include <SDL\\SDL.h>
  13.  
  14.         #include "main.h"
  15.  
  16.         class WebCam  
  17.         {
  18.         public:
  19.                 WebCam();
  20.                 virtual ~WebCam();
  21.  
  22.                 bool WebCam::Connect()
  23.                 void WebCam::StopConnect();
  24.                 void WebCam::GetImage();
  25.                 void WebCam::GetImage_Init();
  26.                 void WebCam::CallBack(HWND hWnd, LPVIDEOHDR lpVHdr);
  27.  
  28.                 HWND    hWnd;
  29.                 HWND    hWnd_WC;
  30.                 HDC             hDC;
  31.                 HDC             hDC_WC;
  32.  
  33.                 SDL_Surface *image;
  34.         };
  35.  
  36. #endif
  37.  

Puis j’ai trouvé la solution miracle !Une librairie complète permettant de gérer les flux vidéos et le traitement : OpenCV.

Cette librairie open-source permet de gérer des flux de tout type et permet de faire de la motion capture ou de la reconnaissance faciale aisément. Elle fait bien plus (gestion colorimétrique, luminosité, contraste, perspective, triangulation, détection de contours, …).

Quelques liens :

Screenshot d’un test de reconnaissance faciale avec une webcam de mauvaise qualité :

Test Reconnaissance faciale SDL

Cet article vous a plu ? Abonnez-vous au blog par mail ou flux RSS : vous recevrez automatiquement les nouveaux billets !

Ressources Java et Cie

Tags , , ,
22 octobre 2007 par Yohann CIURLIK

Pour changer un peu d’ajax et compagnie, aujourd’hui je vous propose un site proposant des ressources Java.
Java2S.com propose :

  • des scripts,
  • des librairies,
  • des API,
  • des sources,
  • des tutoriaux,

Mais aussi d’autres langages comme

  • C/C++/C #
  • ASP
  • HTML / Css
  • Python
  • Oracle, SQL, …

Pleins de sources dans pleins de langages, à garder sous la main, pour les développeurs.

Cet article vous a plu ? Abonnez-vous au blog par mail ou flux RSS : vous recevrez automatiquement les nouveaux billets !

Recherche de mots dans un texte - Aho-Corasick

Tags , ,
17 janvier 2007 par Yohann CIURLIK

L’algorithme Aho-corasick de recherche de mots dans un texte est l’algorithme utilisé dans des commandes UNIX telles que GrepL’algorithme d’Aho-Corasick est un algorithme de recherche de chaîne de caractère (ou motif) dans un texte dû à Alfred Aho et Margaret Corasick et publié en 1975. L’algorithme consiste à avancer dans une structure de données abstraite appelée dictionnaire qui contient le ou les mots recherchés en lisant les lettres du texte T une par une. La structure de données est implantée de manière efficace, ce qui garantit que chaque lettre du texte n’est lue qu’une seule fois. Généralement le dictionnaire est implanté à l’aide d’un trie ou arbre digital auquel on rajoute des liens suffixes. Une fois le dictionnaire implanté, l’algorithme a une complexité linéaire en la taille du texte T et des chaînes recherchées.Lien vers wiki. Vous trouverez les sources de mes trois versions d’aho-corasick et d’un générateur de texte aléatoire en langage C pour effectuer des tests.Trois versions différentes:

  • Matrice de transitions
  • Liste d’adjacence
  • Matrice pour la racine et liste d’adjacence pour les noeuds de l’arbre

Aho-corasick.rar
Sources

N.B. 1:Les programmes sont pleins de petits bugs mais fonctionnels. Si vous avez des questions, n’hesitez pas à les poser sur mon forum.N.B. 2: Vous remarquerez dans les sources que j’ai evité l’utilisation de la fonction realloc du C qui posée problèmes.J’ai donc utilisé des valeurs assez importantes dans les malloc pour éviter les réallocations mémoires. Je ne doute pas que cette façon de faire n’est pas la meilleur, cela dit, si vous le souhaitez, vous pouvez modifier les sources à votre convenance.

Cet article vous a plu ? Abonnez-vous au blog par mail ou flux RSS : vous recevrez automatiquement les nouveaux billets !


sideBarQA