O sistema de processamento de imagens LUA destina -se principalmente a ser usado com Embarcadero C ++/Delphi na plataforma Windows. Consiste em:

Este é o núcleo do projeto. Está escrito no Embarcadero C ++, mas pode ser facilmente modificado para outros compiladores. Ele usa o motor Luajit e o FFI para passar a estrutura de imagens para os scripts Lua. Além disso, ele chama OCVWrapper.dll para aplicar um conjunto limitado de filtros OpenCV do Script Lua. Para usar esta DLL da Delphi, as entradas da DLL descritas no LipsEnginedll.h devem ser convertidas em arquivo PAS, bem como estrutura e typedefs em Lipsglobals.h.
Atualmente, o Lips Engine suporta imagens RGB24 e imagens de 8 bits de canal único (escala de cinza). Pode ser Tbitmap ou qualquer tipo de contêiner de imagem com buffer de memória contíguo. Somente largura, altura, alinhamento da linha de varredura e ponteiro para buffer de imagem são passados para o motor Lips. Além disso, o Lips Engine suporta imagens RGB24 com canal alfa separado, como a imagem do Tiebitmap (produto comercial) disponível em www.imageen.com. O suporte ao RGBA32 também pode ser adicionado, mas atualmente não é suportado.
Esta DLL é escrita no VS2017, porque o compilador BCC não é suportado pelo OpenCV. Ele contém chamadas de API para definir a imagem de origem/destino, para definir a região dos intersets e um conjunto limitado de filtros OpenCV e rotinas de processamento de imagens. Como esta DLL é chamada de LipsEngine, depois de compilar e vincular o OCVWRAPPER.DLL, a Biblioteca de Importar deve ser criada:
As bibliotecas de importação devem ser copiadas na pasta OpenCV no diretório LipsEngine.
O aplicativo Host (Demo) é escrito no Embarcadero C ++ e contém alguns componentes comerciais. O código -fonte pode ser modificado para usar componentes padrão. A partir do código -fonte, você pode ver como usar as APIs do LipsEngine e como analisar os parâmetros solicitados pelo Script Lua.
A primeira linha em cada script Lua destinado ao uso com o motor de lábios deve começar com a instrução require("_prolog") . A exceção desta regra é se você deseja depurar seu script Lua com o Let's Say Zerobrane Studio (https://studio.zerobrane.com). Nesse caso, a primeira declaração deve ser require("_debug") . Para ligar para o OpenCV APIs (OCVWRAPER.DLL), você também deve incluir o script OpenCV require("_opencv") .
Quando o script é carregado, o motor Lua cria as seguintes variáveis globais:
O Lips Engine usa o Wrapper Luna como encadernação C ++ (código-fonte incluído) e um conjunto de funções de retorno de chamada para se comunicar com o aplicativo Host. Para definir parâmetros do aplicativo host, o script deve declarar a função requisitams e chamar lips_RequireParams(S) contido no script do Prolog para instruir o host para definir os parâmetros necessários. A estrutura da (s) sequência (s) de solicitação de parâmetro, passada para o host deve seguir estas regra de produção:
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);"
Exemplo do script de 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
O primeiro parâmetro (etapa) é do tipo int e varia de 1 a 32 com o valor inicial 16. O terceiro parâmetro (sigma) é do tipo de bóia e varia de 0,1 a 10 com o valor inicial 4.0. O aplicativo host, após a análise e validação da string de parâmetros necessários, criará vários quadros e permitirá que o usuário ajuste os parâmetros. Quando o script é executado, os valores dos parâmetros são empurrados para a pilha e as variáveis globais do Lua são criadas de acordo com os nomes dos parâmetros.
Todos os scripts Lua necessários, bem como scripts de exemplo, também são distribuídos com pacotes binários.
NOTA: O arquivo data_face.zip contém o modelo de detecção de face e marcos de face. data_stylemodels.zip contém modelos de transferência de estilo neural. Esses arquivos devem ser descompactados nas pastas Data/(Face | StyleModels) no caminho do diretório executável se você não quiser modificar scripts de exemplo de openCV (troca de face, transferência de estilo neural).
Aqui estão algumas capturas de tela do aplicativo host depois de executar vários scripts da Lua:





© Siniša Petrić, www.sigmapi-deign.com, MIT Licença.