LUA画像処理システムは、主にWindowsプラットフォーム上のEmbarcadero C ++/Delphiで使用することを目的としています。それは次のとおりです。

これがプロジェクトの中核です。 Embarcadero C ++で書かれていますが、他のコンパイラ用に簡単に変更できます。 LuajitエンジンとFFIを使用して、画像構造をLUAスクリプトに渡します。また、ocvwrapper.dllを呼び出して、LUAスクリプトから限られたOPENCVフィルターを適用します。 DelphiからこのDLLを使用するには、LipsEnginedll.hに記載されているDLLエントリをPASファイルに変換する必要があります。
Lips Engineは現在、RGB24画像とシングルチャネル8ビット(グレイスケール)画像をサポートしています。 Tbitmapまたは連続したメモリバッファを備えたあらゆる種類の画像コンテナにすることができます。画像バッファーへの幅、高さ、スキャンラインのアライメント、ポインターのみがLipsエンジンに渡されます。また、Lips Engineは、www.imageen.comで入手可能なTiebitmap画像(商用製品)など、分離されたアルファチャネルを備えたRGB24画像をサポートしています。 RGBA32のサポートも追加できますが、現在はサポートされていません。
BCCコンパイラはOPENCVでサポートされていないため、このDLLはVS2017で記述されています。インターセットの領域と限られたOPENCVフィルターのセットと画像処理ルーチンを設定するためのAPI呼び出しが含まれています。このDLLはLipsEngineから呼び出されるため、ocvwrapper.dllをコンパイルしてリンクした後、インポートライブラリを作成する必要があります。
インポートライブラリは、LipsEngineディレクトリの下のOPENCVフォルダーにコピーする必要があります。
Host(Demo)アプリケーションはEmbarcadero C ++で記述されており、いくつかの商用コンポーネントが含まれています。ソースコードは、標準コンポーネントを使用するように変更できます。ソースコードから、Lipsengine APIの使用方法と、LUAスクリプトから要求されたパラメーターを解析する方法を確認できます。
Lipsエンジンで使用することを目的とした各LUAスクリプトの最初の行はrequire("_prolog")ステートメントで開始する必要があります。このルールの例外は、Zerobrane Studio(https://studio.zerobrane.com)を使用してLuaスクリプトをデバッグする場合です。この場合、最初のステートメントはrequire("_debug") 。 opencv apis(ocvwrapper.dll)を呼び出すには、opencvスクリプトrequire("_opencv")も含める必要があります。
スクリプトがロードされると、LUAエンジンは次のグローバル変数を作成します。
Lips Engineは、LUNAラッパーをC ++バインディング(ソースコードを含む)として使用し、ホストアプリケーションと通信するためにコールバック関数のセットを使用します。ホストアプリケーションからパラメーターを設定するには、スクリプトがprologスクリプトに含まれるrequesparams関数とコールlips_RequireParams(S)宣言する必要があります。ホストに渡されたパラメーター要求文字列の構造は、次の制作ルールに従う必要があります。
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);"
opencv gaborius.luaスクリプトの例:
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
最初のパラメーター(ステップ)はタイプINTで、初期値16の1〜32の範囲です。3番目のパラメーター(SIGMA)はフロート型で、初期値4.0で0.1〜10の範囲です。ホストアプリケーションは、必要なパラメーター文字列を解析および検証した後、さまざまなフレームを作成し、ユーザーがパラメーターを調整できるようにします。スクリプトが実行されると、パラメーター値がスタックにプッシュされ、グローバルLUA変数がパラメーター名に従って作成されます。
必要なすべてのLUAスクリプトとサンプルスクリプトも、バイナリパッケージで配布されます。
注:data_face.zipファイルには、顔の検出と顔のランドマークモデルが含まれています。 data_stylemodels.zipには、ニューラルスタイルの転送モデルが含まれています。これらのアーカイブは、opencvのサンプルスクリプトを変更したくない場合は、実行可能ファイルディレクトリパスの下にデータ/(face | stylemodels)フォルダーに梱包する必要があります(フェイススワップ、ニューラルスタイルの転送)。
さまざまなLUAスクリプトを実行した後、ホストアプリケーションのスクリーンショットをいくつか紹介します。





©SinišaPetrić、www.sigmapi-design.com、MITライセンス。