El sistema de procesamiento de imágenes LUA está destinado principalmente a usarse con Embarcadero C ++/Delphi en la plataforma Windows. Consiste en:

Este es el núcleo del proyecto. Está escrito en Embarcadero C ++, pero se puede modificar fácilmente para otros compiladores. Utiliza el motor Luajit y FFI para pasar la estructura de imágenes a los scripts Lua. Además, llama a OCVWrapper.dll para aplicar un conjunto limitado de filtros OpenCV del script LUA. Para usar esta DLL de Delphi, las entradas DLL descritas en LipSenginedll.H deben convertirse en archivo PAS, así como estructura y typedefs en LipsGlobals.h.
Lips Engine actualmente admite imágenes RGB24 e imágenes de un solo canal de 8 bits (escala de grises). Puede ser tbitmap o cualquier tipo de contenedor de imagen con búfer de memoria contigua. Solo el ancho, la altura, la alineación de la línea de escaneo y el puntero al búfer de imagen se pasan al motor de labios. Además, Lips Engine admite imágenes RGB24 con canal alfa separado, como la imagen de TieBitMap (producto comercial) disponibles en www.imageen.com. También se puede agregar soporte para RGBA32, pero actualmente no es compatible.
Esta DLL está escrita en VS2017, porque el compilador BCC no es compatible con OpenCV. Contiene llamadas API para configurar la imagen de origen/destino, para configurar la región de Interesets y un conjunto limitado de filtros OpenCV y rutinas de procesamiento de imágenes. Como se llama a esta DLL desde LipsEngine, después de compilar y vincular OCVWRAPPER.dll, se debe crear la biblioteca de importación:
Las bibliotecas de importación deben copiarse en la carpeta OpenCV en el directorio de LipsEngine.
La aplicación host (demo) está escrita en Embarcadero C ++ y contiene algunos componentes comerciales. El código fuente se puede modificar para usar componentes estándar. Desde el código fuente, puede ver cómo usar las API LipsEngine y cómo analizar los parámetros solicitados del script Lua.
La primera línea en cada script Lua destinado a usar con el motor Lips debe comenzar con la declaración require("_prolog") . La excepción de esta regla es si desea depurar su script de Lua con Let's Say Zerobrane Studio (https://studio.zerobrane.com). En este caso, la primera declaración debe ser require("_debug") . Para llamar a las API de OpenCV (OCVWRAPPER.DLL), también debe incluir el script OpenCV require("_opencv") .
Cuando se carga el script, Lua Engine crea las siguientes variables globales:
Lips Engine usa luna Wrapper como enlace C ++ (código fuente incluido) y un conjunto de funciones de devolución de llamada para comunicarse con la aplicación host. Para establecer parámetros de la aplicación del host, el script debe declarar la función RequasteParams y llamar lips_RequireParams(S) contenidos en Prolog Script para instruir al host para establecer los parámetros requeridos. La estructura de las cadenas (s) de solicitudes de parámetros pasadas al host debe seguir esta regla de producción:
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);"
Ejemplo 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
El primer parámetro (paso) es de tipo int y varía de 1 a 32 con el valor inicial 16. El tercer parámetro (Sigma) es de tipo flotante y varía de 0.1 a 10 con el valor inicial 4.0. La aplicación de host, después de analizar y validar la cadena de parámetros requeridos, creará varios cuadros y permitirá que el usuario ajuste los parámetros. Cuando se ejecuta el script, los valores de los parámetros se presionan en la pila y las variables LUA globales se crean de acuerdo con los nombres de los parámetros.
Todos los scripts Lua requeridos, así como los scripts de ejemplo, también se distribuyen con paquetes binarios.
Nota: el archivo data_face.zip contiene el modelo de detección de caras y puntos de referencia de cara. data_stylemodels.zip contiene modelos de transferencia de estilo neuronal. Estos archivos deben desempaquetarse en las carpetas de datos/(Face | Stylemodels) en la ruta del directorio ejecutable si no desea modificar los scripts de ejemplo de OpenCV (intercambio de cara, transferencia de estilo neuronal).
Aquí hay pocas capturas de pantalla de la aplicación host después de ejecutar varios scripts de Lua:





© Siniša Petrić, www.sigmapi-design.com, licencia del MIT.