Система обработки изображений LUA в основном предназначена для использования с Embarcadero C ++/Delphi на платформе Windows. Он состоит из:

Это ядро проекта. Он написан в Embarcadero C ++, но его можно легко изменить для других компиляторов. Он использует двигатель Luajit и FFI для передачи структуры изображений в сценарии Lua. Кроме того, он вызывает ocvwrapper.dll для применения ограниченного набора фильтров OpenCV из сценария LUA. Чтобы использовать этот DLL из Delphi, записи DLL, описанные в LipsEnginedll.h, должны быть преобразованы в файл PAS, а также структуру и типы в LipsGlobals.h.
Hips Engine в настоящее время поддерживает изображения RGB24 и одноканальные 8-битные (GreyScale) изображения. Это может быть TBITMAP или любой вид контейнера изображения с смежным буфером памяти. Только ширина, высота, выравнивание Scanline и указатель на буфер изображения передаются в двигатель Lips. Кроме того, Lips Engine поддерживает изображения RGB24 с разделенным альфа -каналом, такими как изображение Tiebitmap (коммерческий продукт), доступные на www.imageen.com. Поддержка RGBA32 также может быть добавлена, но в настоящее время она не поддерживается.
Этот DLL написан в VS2017, потому что компилятор BCC не поддерживается OpenCV. Он содержит вызовы API для настройки изображения источника/целевого, для установки области интерзитов и ограниченный набор фильтров OpenCV и процедур обработки изображений. Как этот DLL называется из LipsEngine, после составления и связывания ocvwrapper.dll должна быть создана библиотека импорта:
Импортные библиотеки должны быть скопированы в папке OpenCV в каталоге LipsEngine.
Приложение Host (Demo) написано в Embarcadero C ++ и содержит некоторые коммерческие компоненты. Исходный код может быть изменен для использования стандартных компонентов. Из исходного кода вы можете увидеть, как использовать API -интерфейсы LipsEngine и как проанализировать параметры, запрашиваемые из сценария LUA.
Первая строка в каждом сценарии LUA, предназначенная для использования с двигателем Lips, должна начаться с оператора require("_prolog") . За исключением этого правила, если вы хотите отладить свой скрипт Lua с помощью Zerobrane Studio (https://studio.zerobrane.com). В этом случае первое утверждение должно require("_debug") . Чтобы позвонить в API OpenCV (ocvwrapper.dll), вы также должны включить opencv script require("_opencv") .
Когда сценарий загружен, Lua Engine создает после глобальных переменных:
Lips Engine использует Luna Wrapper в качестве привязки C ++ (включенный исходный код) и набор функций обратного вызова для связи с приложением хоста. Чтобы установить параметры из приложения хоста, скрипт должен объявить функцию требований и вызовать lips_RequireParams(S) содержащиеся в сценарии PROLOG, чтобы указать хосту установить необходимые параметры. Структура строки запроса параметров, передаваемая на хост, должна следовать этим правилу производства:
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 и диапазон от 1 до 32 с начальным значением 16. Третий параметр (Sigma) имеет тип, и он колеблется от 0,1 до 10 с начальным значением 4.0. Приложение хоста после анализа и проверки требуемых параметров Строка создаст различные кадры и позволит пользователю настраивать параметры. Когда сценарий выполняется, значения параметров нажимают на стек, а глобальные переменные LUA создаются в соответствии с именами параметров.
Все необходимые сценарии LUA, а также примеры сценариев также распределены с двоичными пакетами.
Примечание. Файл DATA_FACE.ZIP содержит модель обнаружения лица и лица. data_stylemodels.zip содержит модели передачи нейронного стиля. Эти архивы должны быть распакованы в папках Data/(Face | StyleModels) в соответствии с промежуточным способом каталога, если вы не хотите изменять сценарии OpenCV (обмен лицом, передача нервного стиля).
Вот несколько скриншотов приложения хоста после выполнения различных сценариев LUA:





© Siniusha Petrić, www.sigmapi-design.com, лицензия MIT.