image index pad

Plugins pour PortaNum - Concepteur

index

Introduction
Conception d'un plugin
PnPluginAppName
PnPluginInfo
PnPluginFunction
PnPluginDialog
Conseils de conception
Exemples de projets
pluginExemple2.dll v0.3.0
PluginPoster.dll v0.4.0
pluginLUT.dll v0.4.0
PluginContours.dll v0.3.0
PluginFocus.dll v0.3.0
Contribuer

Introduction

Il est possible de compléter le choix des fonctions de traitement d'image prévues dans PortaNum à l'aide de fonctions supplémentaires, les "plugins", que le logiciel incorpore dans ses menus.

Ce document comporte deux parties: la première

Plugins pour PortaNum - utilisateur

est destinée à l'utilisateur, qui trouvera des fonctions supplémentaires à ajouter à son logiciel, selon ses besoins. Cette seconde partie, destinée aux programmeurs, donne des informations sur la façon de concevoir ses propres plugins, ainsi que des exemples de projets.

Conception d'un plugin

Cette section s'adresse aux programmeurs qui souhaitent concevoir leurs propres plugins.

La documentation détaillée est téléchargeable ci-dessous

documentation du plugin Portanum

Une dll utilisable avec PortaNum doit comporter au moins les fonctions suivantes:

PnPluginAppName

Cette fonction doit retourner la chaîne de caractères "PortaNum" (maj. ou minuscules indifféremment), afin de vérifier que la dll est bien destinée à l'application PortaNum

PNPLUGIN_API const char* PnPluginAppName( void )
{
 //version;
 const char * appName;
 appName = "PortaNum";
 return appName;
}

PnPluginInfo

Cette fonction retourne dans une structure comportant plusieurs champs de strings, un certain nombre d'informations qui seront intégrées dans le programme PortaNum.

typedef struct
{ const char * version;
 const char * param;
 const char * funcName;
 const char * hint
} plInfo;

PNPLUGIN_API int PnPluginInfo(plInfo * pInfo )
{
 if (pInfo) 
 {
*pInfo = Info;
 return 0;
 }
 else return 1;
}
  • version est le numéro de version de la dll (sous la forme d'un string "0.3.0"
  • param est le nom du paramètre de réglage (ex: "seuil"), ou de la grandeur de sortie ex: "focus". param peut être une chaîne vide.
  • funcName est le nom de la fonction, tel qu'il apparaît dans le menu "Traitements"
  • hint est un texte court d'explication du rôle de la fonction

PnPluginFunction

Cette fonction effectue le traitement demandé. Elle utilise les définitions de la librairie Intel Ipp. Il n'est pas nécessaire d'utiliser cette librairie. Il faut alors inclure les déclarations de types suivantes:

typedef unsigned char Ipp8u;
typedef struct {
 int width;
 int height;
} IppiSize;

typedef enum {
ippStsErr = -2, /* (erreur) erreur non spécifiée */
ippStsNoErr = 0, /* (OK) pas d'erreur*/
} IppStatus;

Le paramètre mode (valeur par défaut 0) permet de prévoir des variantes de la fonction. Il est utile en particulier pour les phases de test, mais peut être exploité en usage normal, si PortaNum gère l'accès à ce paramètre. Si la valeur de mode est –1, on utilise le mode défini en interne par la page de configuration, si elle existe. Sinon, c'est le mode 0 qui est appelé. Le paramètre coef (valeur par défaut 50, plage de 0 à 100) permet à l'utilisateur de gérer de manière interactive l'amplitude de l'effet réalisé. Selon les cas, il sera actif ou non.

PNPLUGIN_API IppStatus PnPluginFunction( Ipp8u* pSrc, int srcStep, Ipp8u* pDst,
int dstStep, IppiSize roiSize, int mode, int coef )
{
 IppStatus status = 0; // 0 = no error
 Ipp8u * pS = pSrc;
 Ipp8u * pD = pDst;
 int w, iy, ix;

 // function implementation ...
// votre code …

return status;
}

Le code de retour, de type IppStatus, utilise la spécification ipp (voir codes d'erreur dans ippdefs.h) D'une manière générale, un code négatif signale une erreur, un code nul signale que l'opération s'est déroulée corrrectement, un code positif signale un avertissement. Par défaut, on utilisera seulement les deux codes suivants :

ippStsErr = -2, /* (erreur) erreur non spécifiée */
ippStsNoErr = 0, /* (OK) pas d'erreur*/

on pourra utiliser une valeur entière positive comme code de retour (par exemple pour des plugins réalisant des calculs sur des images, comme le plugin "Focus".

PnPluginDialog

Cette fonction appelle une page de dialogue. Cette page, facultative, peut être simplement utilisée pour afficher une fenêtre "à propos", ou une aide simplifiée. Elle peut être le point d'entrée d'une interface plus complexe, permettant par exemple le choix et la sauvegarde de différents paramètres de configuration.

PNPLUGIN_API IppStatus PnPluginDialog(HINSTANCE hInstance, HWND hwnd)
{
 // votre code ici
}

Conseils de conception

Il est recommandé de veiller à la complexité de l'algorithme, et à son codage, afin qu'il n'entraîne pas un temps d'exécution incompatible avec la vidéo temps réel

Il existe un moyen simple de vérifier le temps d'exécution d'un traitement: faire Préférences/Options Expert/ Les pages de propriétés du programme s'affichent. Choisir l'onglet Paramètres généraux, et cocher l'onglet Affichage Barre d'état. Il apparaît en bas de la fenêtre une zone qui indique le temps d'affichage (comparer plein écran et écran fenêtré), le temps d'exécution du traitement, et la cadence vidéo en nombre d'images par seconde. Le temps d'exécution dépend bien sûr de la puissance de votre machine et de la taille d'image. Ces informations sont disponibles en sélectionnant Aide/Info Systeme.

Prévoir des mécanismes de traitement des erreurs pour que la fonction de traitement ne bloque jamais le programme.

On utilisera, par exemple les mécanismes try - catch

Utiliser des librairies de traitement d'image

La librairie Intel/IPP comporte une implémentation très efficace des fonctions de base en traitement d'image. Elle tire parti des possibilités du processeur de la machine sur laquelle s'exécute le programme. Nous l'avons utilisée dans les traitements de base de Portanum.

La librairie OpenCV comporte un grand nombre de fonctions de Vision par Ordinateur. Elle est utilisée dans certains des projets ci-dessous.

Exemples de projets

Vous trouverez ci-dessous le code source de quelques projets de plugins.

Selon les cas, les projets ont été réalisés sous Microsoft Visual C++ 6.0, ou sous Microsoft Visual C++ .net.

pluginExemple2.dll v0.3.0

Ce plugin très simple effectue le passage en négatif d'une partie de l'image. Il comporte une page de configuration, et utilise le paramètre de réglage.

télécharger le source

PluginPoster.dll v0.4.0

Ce plugin produit un effet de postérisation par réduction du nombre de couleurs dans l'image.

  • réglage de l'effet: joue sur le nombre de couleurs retenues
  • page de configuration
  • possibilité de filtrage passe-bas
télécharger le source

pluginLUT.dll v0.4.0

Ce plugin effectue la transformation de la luminance de l'image à l'aide d'une LUT couleur. Il comporte une page de configuration, utilise le paramètre de réglage, et sauvegarde l'option choisie dans le fichier portanum.ini. Il est installé avec PortaNum.

télécharger le source

PluginContours.dll v0.3.0

Ce plugin utilise la librairie OpenCV. Il fait partie de l'installation d'origine de PortaNum. Il comporte les aspects suivants:

  • superposition des contours à l'image d'origine
  • page de configuration
  • réglage du seuil de détection des contours
  • choix de la couleur des contours
  • possibilité de filtrage passe-bas de l'image d'origine
  • possibilité d'affichage des contours seuls
  • sauvegarde des options
télécharger le source

Note : dans cette version source, ce plugin utilise la librairie OpenCV 0.9.6, et n'est pas compatible avec les versions de PortaNum égales ou supérieures à 4.5.0 . Il faut, dans ce cas, installer les dll cv096.dll et cxcore096.dll dans le répertoire de Portanum.

PluginFocus.dll v0.3.0

Ce plugin  apporte une aide au réglage de la mise au point d'une caméra ou webcam, en fournissant un indicateur de mise au point.
télécharger le source

Contribuer

Si vous souhaitez partager l'une de vos créations (source ou dll), merci de nous l'adresser, avec un petit texte de présentation, afin que nous puissions en faire profiter les utilisateurs.


Valid HTML 4.01 Transitional

copyright THALES - 11-Jan-2013