Das LUA -Bildverarbeitungssystem soll hauptsächlich mit Embarcadero C ++/Delphi auf Windows -Plattform verwendet werden. Es besteht aus:

Dies ist der Kern des Projekts. Es ist in Embarcadero C ++ geschrieben, kann aber für andere Compiler leicht modifiziert werden. Es verwendet Luajit Engine und FFI, um die Bilderstruktur an Lua -Skripte zu übergeben. Außerdem ruft es ocvWrapper.dll auf, einen begrenzten Satz von OpenCV -Filtern aus dem Lua -Skript anzuwenden. Um diese DLL von Delphi zu verwenden, müssen DLL -Einträge, die in lipSeginedll.h beschrieben werden, in PAS -Datei sowie Struktur und Typedefs in Lipsglobals.H.H konvertiert werden.
Die LIPS-Engine unterstützt derzeit RGB24-Bilder und ein Kanal 8-Bit-Bilder (GreyScale). Es kann tbitmap oder eine beliebige Art von Bildbehälter mit zusammenhängendem Speicherpuffer sein. Nur Breite, Höhe, Scanline -Ausrichtung und Zeiger auf Bildpuffer werden an die LIPS -Engine übergeben. Außerdem unterstützt Lips Engine RGB24 -Bilder mit getrenntem Alpha -Kanal, wie z. Die Unterstützung für RGBA32 kann ebenfalls hinzugefügt werden, wird jedoch derzeit nicht unterstützt.
Diese DLL ist in VS2017 geschrieben, da der BCC -Compiler von openCV nicht unterstützt wird. Es enthält API -Aufrufe zum Einstellen von Quell-/Zielbild, zum Einstellen von Regionen von Interesets und einem begrenzten Satz von OpenCV -Filtern und Bildverarbeitungsroutinen. Da diese DLL von lipSegine aufgerufen wird, muss nach dem Zusammenstellen und Verknüpfen von OCVWrapper.dll die Importbibliothek erstellt werden:
Importbibliotheken müssen im OpenCV -Ordner im LipSengine -Verzeichnis kopiert werden.
Die Host (Demo) -Anwendung ist in Embarcadero C ++ geschrieben und enthält einige kommerzielle Komponenten. Der Quellcode kann so geändert werden, dass Standardkomponenten verwendet werden. Aus dem Quellcode können Sie sehen, wie Sie LipSengine -APIs verwenden und Parameter analysieren, die vom LuA -Skript angefordert werden.
Die erste Zeile in jedem LUA -Skript, das für die Verwendung mit Lips Engine bestimmt ist, muss mit der Anweisung require("_prolog") beginnen. Die Ausnahme dieser Regel besteht darin, dass Sie Ihr Lua -Skript mit dem Zerobrane Studio (https://studio.zerobrane.com) debuggen möchten. In diesem Fall muss die erste Erklärung require("_debug") . Um OpenCV -APIs (OCVWrapper.dll) anzurufen, müssen Sie auch das OpenCV -Skript einschließen require("_opencv") .
Wenn das Skript geladen wird, erstellt die Lua Engine folgende globale Variablen:
LIPS Engine verwendet Luna Wrapper als C ++-Bindung (Quellcode enthalten) und eine Reihe von Call-Back-Funktionen, um mit der Hostanwendung zu kommunizieren. Um Parameter aus der Hostanwendung festzulegen, muss das Skript die Funktion der BedarfSeParams deklarieren und die in Prolog -Skript enthaltenen lips_RequireParams(S) aufrufen, um den Host anzuweisen, die erforderlichen Parameter festzulegen. Die Struktur der an den Host übergebenen Parameteranforderungszeichenfolge muss diese Produktionsregel befolgen:
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);"
Beispiel aus 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
Der erste Parameter (Schritt) ist vom Typ int und reicht von 1 bis 32 mit Anfangswert 16. Der dritte Parameter (Sigma) ist vom Typ Float und reicht von 0,1 bis 10 mit Anfangswert 4,0. Die Host -Anwendung erstellt nach der Parsen und Validierung der erforderlichen Parameter -Zeichenfolge verschiedene Rahmen und ermöglicht es dem Benutzer, die Parameter anzupassen. Wenn das Skript ausgeführt wird, werden Parameterwerte auf Stack und globale LUA -Variablen entsprechend den Parameternamen erstellt.
Alle erforderlichen LUA -Skripte sowie beispielsweise Skripten werden auch mit binären Paketen verteilt.
HINWEIS: Data_face.zip -Datei enthält die Gesichtserkennung und das Gesichtsmarkierungsmodell. Data_Stylemodels.zip enthält Transfermodelle für neuronale Stile. Diese Archive müssen in Daten/(Gesicht | stylemodellen) unter ausführbarer Verzeichnispfad ausgepackt werden, wenn Sie OpenCV -Beispielskripte nicht ändern möchten (Face Swap, Neural Style Transfer).
Hier sind einige Screenshots der Host -Anwendung, nachdem verschiedene LUA -Skripte ausgeführt wurden:





© Siniša Petrić, www.sigmapidesign.com, MIT-Lizenz.