ระบบประมวลผลภาพ LUA ส่วนใหญ่มีวัตถุประสงค์เพื่อใช้กับ Embarcadero C ++/Delphi บนแพลตฟอร์ม Windows ประกอบด้วย:

นี่คือแกนหลักของโครงการ มันเขียนใน Embarcadero C ++ แต่สามารถแก้ไขได้ง่ายสำหรับคอมไพเลอร์อื่น ๆ มันใช้เครื่องยนต์ Luajit และ FFI เพื่อส่งผ่านโครงสร้างภาพไปยังสคริปต์ Lua นอกจากนี้ยังเรียก ocvwrapper.dll เพื่อใช้ชุดตัวกรอง OpenCV ที่ จำกัด จากสคริปต์ LUA ในการใช้ DLL นี้จาก Delphi รายการ DLL ที่อธิบายไว้ใน Lipsenginedll.h ต้องแปลงเป็นไฟล์ PAS รวมถึงโครงสร้างและ typedefs ใน Lipsglobals.h
ขณะนี้เอ็นจิ้นริมฝีปากรองรับภาพ RGB24 และภาพช่องเดี่ยว 8 บิต (สีเทา) มันสามารถเป็น tbitmap หรือคอนเทนเนอร์รูปภาพใด ๆ ที่มีบัฟเฟอร์หน่วยความจำที่ต่อเนื่องกัน ความกว้างความสูงการจัดตำแหน่ง scanline และตัวชี้ไปยังบัฟเฟอร์ภาพเท่านั้นที่ส่งผ่านไปยังเครื่องยนต์ริมฝีปาก นอกจากนี้เครื่องยนต์ริมฝีปากยังรองรับภาพ RGB24 ที่มีช่องอัลฟ่าที่แยกจากกันเช่นภาพ TIEBITMAP (ผลิตภัณฑ์เชิงพาณิชย์) ที่มีอยู่ใน www.imageen.com การสนับสนุนสำหรับ RGBA32 สามารถเพิ่มได้เช่นกัน แต่ในปัจจุบันยังไม่รองรับ
DLL นี้เขียนใน VS2017 เนื่องจากคอมไพเลอร์ BCC ไม่ได้รับการสนับสนุนโดย OpenCV มันมีการเรียก API สำหรับการตั้งค่าภาพแหล่งที่มา/เป้าหมายสำหรับการตั้งค่าภูมิภาคของ interesets และชุดตัวกรอง openCV ที่ จำกัด และรูทีนการประมวลผลภาพ เนื่องจาก DLL นี้ถูกเรียกจาก LipsEngine หลังจากรวบรวมและเชื่อมโยง ocvwrapper.dll ต้องสร้างไลบรารีนำเข้า:
นำเข้าไลบรารีจะต้องคัดลอกในโฟลเดอร์ OpenCV ภายใต้ไดเรกทอรี LipsEngine
แอปพลิเคชันโฮสต์ (ตัวอย่าง) เขียนใน Embarcadero C ++ และมีส่วนประกอบเชิงพาณิชย์บางส่วน ซอร์สโค้ดสามารถแก้ไขได้เพื่อใช้ส่วนประกอบมาตรฐาน จากซอร์สโค้ดคุณสามารถดูวิธีใช้ LipsEngine API และวิธีการแยกพารามิเตอร์ที่ร้องขอจากสคริปต์ LUA
บรรทัดแรกในแต่ละสคริปต์ LUA ที่มีไว้สำหรับใช้กับเครื่องยนต์ริมฝีปากจะต้องเริ่มต้นด้วย require("_prolog") ข้อยกเว้นของกฎนี้คือถ้าคุณต้องการดีบักสคริปต์ Lua ของคุณด้วย Let's Say Zerobrane Studio (https://studio.zerobrane.com) ในกรณีนี้คำสั่งแรกจะ require("_debug") ในการเรียก OpenCV APIs (ocvwrapper.dll) คุณต้องรวมสคริปต์ OpenCV require("_opencv")
เมื่อโหลดสคริปต์เครื่องยนต์ Lua จะสร้างตัวแปรทั่วโลกตามตัวแปร:
Lips Engine ใช้ Wrapper Luna เป็นการเชื่อม 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 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
พารามิเตอร์แรก (ขั้นตอน) เป็นประเภท int และช่วงตั้งแต่ 1 ถึง 32 ด้วยค่าเริ่มต้น 16 พารามิเตอร์ที่สาม (Sigma) เป็นประเภทลอยและอยู่ในช่วง 0.1 ถึง 10 ด้วยค่าเริ่มต้น 4.0 แอปพลิเคชันโฮสต์หลังจากการแยกวิเคราะห์และตรวจสอบความถูกต้องพารามิเตอร์พารามิเตอร์ที่ต้องการจะสร้างเฟรมต่างๆและอนุญาตให้ผู้ใช้ปรับพารามิเตอร์ เมื่อมีการเรียกใช้สคริปต์ค่าพารามิเตอร์จะถูกผลักไปยังสแต็กและตัวแปร LUA ส่วนกลางจะถูกสร้างขึ้นตามชื่อพารามิเตอร์
สคริปต์ LUA ที่จำเป็นทั้งหมดรวมถึงสคริปต์ตัวอย่างจะถูกแจกจ่ายด้วยแพ็คเกจไบนารี
หมายเหตุ: ไฟล์ data_face.zip มีการตรวจจับใบหน้าและรูปแบบสถานที่สำคัญ data_stylemodels.zip มีรูปแบบการถ่ายโอนรูปแบบประสาท คลังเก็บเหล่านี้จะต้องเปิดออกในโฟลเดอร์ Data/(Face | StyleModels) ภายใต้เส้นทางไดเรกทอรีที่ปฏิบัติการได้หากคุณไม่ต้องการแก้ไขสคริปต์ตัวอย่าง OpenCV (การแลกเปลี่ยนใบหน้า, การถ่ายโอนสไตล์ระบบประสาท)
ต่อไปนี้เป็นภาพหน้าจอของแอปพลิเคชันโฮสต์หลังจากดำเนินการสคริปต์ Lua ต่างๆ:





©SinišaPetrić, www.sigmapi-design.com, ใบอนุญาต MIT