Le système de traitement d'image LUA est principalement destiné à être utilisé avec la plate-forme Embarcadero C ++ / Delphi sur Windows. Il se compose de:

C'est le cœur du projet. Il est écrit dans Embarcadero C ++, mais il peut être facilement modifié pour d'autres compilateurs. Il utilise le moteur Luajit et FFI pour passer la structure des images aux scripts Lua. Il appelle également OCVWrapper.dll pour appliquer un ensemble limité de filtres OpenCV à partir du script LUA. Pour utiliser cette DLL à partir de Delphi, les entrées DLL décrites dans LipSenginedll.h doivent être converties en fichier PAS, ainsi que la structure et les typedefs dans LipsGlobals.h.
Lips Engine prend actuellement en charge les images RGB24 et les images 8 bits à canal unique (niveaux de gris). Il peut s'agir de tbitmap ou de tout type de conteneur d'image avec tampon de mémoire contigu. Seule la largeur, la hauteur, l'alignement de la ligne de balayage et le pointeur vers le tampon d'image sont transmis au moteur Lips. En outre, Lips Engine prend en charge les images RGB24 avec un canal alpha séparé, comme l'image Tiebitmap (produit commercial) disponible sur www.imageen.com. La prise en charge de RGBA32 peut également être ajoutée, mais actuellement elle n'est pas prise en charge.
Cette DLL est écrite dans VS2017, car le compilateur BCC n'est pas pris en charge par OpenCV. Il contient des appels d'API pour définir l'image source / cible, pour définir la région des entrepreneurs et un ensemble limité de filtres OpenCV et de routines de traitement d'image. Comme cette DLL est appelée à partir de LipSengenne, après avoir compilé et lié OCVWrapper.dll, la bibliothèque d'importation doit être créée:
Les bibliothèques d'importation doivent être copiées dans le dossier OpenCV sous LipSengenne Directory.
L'application HOST (Demo) est écrite dans Embarcadero C ++ et il contient des composants commerciaux. Le code source peut être modifié pour utiliser des composants standard. À partir du code source, vous pouvez voir comment utiliser les API LipSengenne et comment analyser les paramètres demandés au script LUA.
La première ligne de chaque script LUA destiné à une utilisation avec le moteur Lips doit commencer par l'instruction require("_prolog") . L'exception de cette règle est si vous souhaitez déboguer votre script LUA avec Let's Selon Zerobrane Studio (https://studio.zerobrane.com). Dans ce cas, la première déclaration doit être require("_debug") . Pour appeler les API OpenCV (OCVWrapper.DLL), vous devez également inclure le script OpenCV require("_opencv") .
Lorsque le script est chargé, le moteur Lua crée des variables globales suivantes:
Lips Engine utilise Luna Wrapper comme liaison C ++ (code source inclus) et un ensemble de fonctions de rappel pour communiquer avec l'application hôte. Pour définir les paramètres de l'application hôte, le script doit déclarer la fonction Deiqui-Soueparams et appeler lips_RequireParams(S) contenues dans le script Prolog pour instruire l'hôte de définir les paramètres requis. La structure des chaînes de demande de paramètre transmises à l'hôte doit suivre ces règles de production:
S -> A
A -> A | token
token -> "name = type(range initial_value);"
type -> int | float | bool | combo | list | imagefile | imagemap
range -> [min, max] | [v1, v2,...,vn] | []
initial_value -> according to type, must be in the range (if range is not empty)
Parameters request example: S = "size = int([10,20] 10);"
Parameters request example: S = "perform_something = bool([] true);"
Exemple de OpenCv Gaborius.Lua Script:
function RequireParams()
lips_RequireParams("step = int([1, 32] 16); kernel_size = int([3, 101] 31);"
.. " sigma = float([0.1, 10] 4.0); lambda = float([1, 30] 10);"
.. " gamma = float([0.1, 10] 0.2); psi = float([0, 1.57] 0); ks_factor = float([0.001, 10] 1.5); ")
end
Le premier paramètre (étape) est de type int et varie de 1 à 32 avec la valeur initiale 16. Le troisième paramètre (Sigma) est de type flottant et il varie de 0,1 à 10 avec la valeur initiale 4.0. L'application hôte, après l'analyse et la validation des paramètres requis, la chaîne créera diverses trames et permettra à l'utilisateur de régler les paramètres. Lorsque le script est exécuté, les valeurs de paramètres sont poussées sur la pile et les variables LUA globales sont créées en fonction des noms de paramètres.
Tous les scripts LUA requis ainsi que des exemples de scripts sont également distribués avec des packages binaires.
Remarque: le fichier DATA_FACE.ZIP entre entente la détection des faces et le modèle de repères de la face. data_stylemodels.zip contient des modèles de transfert de style neuronal. Ces archives doivent être déballées dans les dossiers de données / (face | StyleModels) sous un chemin de répertoire exécutable si vous ne souhaitez pas modifier des exemples d'OpenCV (échange de visage, transfert de style neuronal).
Voici quelques captures d'écran de l'application hôte après avoir exécuté divers scripts LUA:





© Siniša Petrić, www.sigmapi-ségn.com, licence MIT.