LUA 이미지 처리 시스템은 주로 Windows 플랫폼의 Embarcadero C ++/Delphi와 함께 사용되도록 의도됩니다. 그것은 다음으로 구성됩니다.

이것이 프로젝트의 핵심입니다. Embarcadero C ++로 작성되었지만 다른 컴파일러에 대해 쉽게 수정할 수 있습니다. Luajit Engine과 FFI를 사용하여 이미지 구조를 LUA 스크립트로 전달합니다. 또한 LUA 스크립트에서 제한된 OPENCV 필터 세트를 적용하려면 OCVWRPARPE.DLL을 호출합니다. Delphi 의이 DLL을 사용하려면 LipSenginedll.h에 설명 된 DLL 항목은 PAS 파일과 Lipsglobals.h의 구조 및 typedefs로 변환되어야합니다.
Lips Engine은 현재 RGB24 이미지와 단일 채널 8 비트 (Grayscale) 이미지를 지원합니다. 연속 메모리 버퍼가있는 tbitmap 또는 모든 종류의 이미지 컨테이너 일 수 있습니다. 폭, 높이, 스캔 라인 정렬 및 이미지 버퍼에 대한 포인터 만 입력 엔진으로 전달됩니다. 또한 Lips Engine은 www.imageen.com에서 사용할 수있는 TiebitMap 이미지 (상용 제품)와 같은 분리 된 알파 채널이있는 RGB24 이미지를 지원합니다. RGBA32에 대한 지원도 추가 할 수 있지만 현재 지원되지 않습니다.
이 DLL은 BCC 컴파일러가 OpenCV에 의해 지원되지 않기 때문에 VS2017로 작성됩니다. Interreset의 영역을 설정하고 OpenCV 필터 및 이미지 처리 루틴의 제한된 세트를 설정하기위한 API 호출이 포함되어 있습니다. 이 DLL은 LipsEngine에서 호출되므로 OCVWRPARPE.DLL을 컴파일하고 연결 한 후 가져 오기 라이브러리를 작성해야합니다.
가져 오기 라이브러리는 LipsEngine 디렉토리의 OpenCV 폴더에 복사되어야합니다.
호스트 (DEMO) 응용 프로그램은 Embarcadero C ++로 작성되며 일부 상용 구성 요소가 포함되어 있습니다. 표준 구성 요소를 사용하도록 소스 코드를 수정할 수 있습니다. 소스 코드에서 LipsEngine API를 사용하는 방법과 LUA 스크립트에서 요청한 매개 변수를 구문 분석하는 방법을 알 수 있습니다.
Lips 엔진과 함께 사용하기위한 각 LUA 스크립트의 첫 번째 줄은 require("_prolog") 문으로 시작해야합니다. 이 규칙을 제외하고 Zerobrane Studio (https://studio.zerobrane.com)로 LUA 스크립트를 디버깅하려는 경우입니다. 이 경우 첫 번째 명령문은 require("_debug") . opencv apis (ocvwrapper.dll)를 호출하려면 opencv script require("_opencv") 도 포함해야합니다.
스크립트가로드되면 LUA 엔진은 다음과 같은 글로벌 변수를 만듭니다.
Lips Engine은 Luna 래퍼를 C ++ 바인딩 (소스 코드 포함)과 호스트 응용 프로그램과 통신하기 위해 일련의 콜백 함수를 사용합니다. 호스트 애플리케이션에서 매개 변수를 설정하려면 스크립트가 요구 사항 스크립트에 포함 된 요구 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 범위이며, 세 번째 매개 변수 (Sigma)는 Float 유형이며 초기 값 4.0의 0.1에서 10 범위입니다. 필요한 매개 변수 문자열을 구문 분석하고 확인한 후 호스트 응용 프로그램은 다양한 프레임을 생성하고 사용자가 매개 변수를 조정할 수 있도록합니다. 스크립트가 실행되면 매개 변수 값이 스택으로 푸시되고 매개 변수 이름에 따라 글로벌 LUA 변수가 생성됩니다.
필요한 모든 LUA 스크립트와 예제 스크립트도 이진 패키지로 배포됩니다.
참고 : data_face.zip 파일은 얼굴 감지 및 얼굴 랜드 마크 모델을 포함합니다. data_stylemodels.zip에는 신경 스타일 전송 모델이 포함되어 있습니다. 이 아카이브는 OpenCV 예제 스크립트 (얼굴 스왑, 신경 스타일 전송)를 수정하지 않으려면 실행 디렉토리 경로 아래의 데이터/(Face | Stylemodels) 폴더에서 포장을 풀어야합니다.
다음은 다양한 LUA 스크립트를 실행 한 후 호스트 애플리케이션의 스크린 샷은 다음과 같습니다.





© Siniša Petrić, www.sigmapi-design.com, MIT 라이센스.